AT89C51中断程序设计两位数码管0到99,工作方式1,定时计数,1s,不用C语言汇编。

说出每条指令的意思,谢谢了

SECOND EQU 30H; 定义

TCOUNT EQU 31H ;定义

ORG 00H ; 起始

LJMP START; 跳转

ORG 1BH  ;  中断矢量地址

LJMP INT0X ;  跳转

START: 

MOV SECOND,#00H ; 设置计数0送入SECOND

MOV TCOUNT,#00H ; 设置计数0送入TCOUNT

MOV TMOD,#10H  ; 设置计数器1

MOV TH1,#(65536-50000) / 256 ; 设置低位初值

MOV TL1,#(65536-50000) MOD 256; 设置高位初值

SETB TR1 ; 打开计数器1

SETB ET1; 允许中断

SETB EA;  打开总中断

SJMP $

INT0X:

MOV TH1,#(65536-50000) / 256 ;

MOV TL1,#(65536-50000) MOD 256;

INC TCOUNT ;  加1

MOV A,TCOUNT;  送入A

CJNE A,#20,NEXT ; 判断是否等于1ms 等于1ms顺序执行  不等跳转到next 继续计数

MOV TCOUNT,#00H ; 等于1ms TCOUNT清零

MOV A,SECOND  ;将 SECOND 送入a

INC SECOND ; 加一

CJNE A,#99,NEX ;判断是否等于99 等于99顺序执行  不等跳转到nex 继续计数

MOV SECOND,#00H ;清零

NEX: 

MOV B,#10 ;10送入b

DIV AB   ;   a除以b 商送入a 余数送入b

MOV DPTR,#TABLE ;取表

MOVC A,@A+DPTR ;取表中的值 送入a

MOV P0,A   ;  值送入p0

MOV A,B   ;     余数送入a

MOVC A,@A+DPTR  ;  取表值

MOV P2,A   ;     值送入p2

NEXT: RETI ;  子程序返回

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数组

END

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-08
no

AT89C51中断程序设计两位数码管0到99,工作方式1,定时计数,1s,不用C语 ...
ORG 1BH ; 中断矢量地址 LJMP INT0X ; 跳转 START:MOV SECOND,#00H ; 设置计数0送入SECOND MOV TCOUNT,#00H ; 设置计数0送入TCOUNT MOV TMOD,#10H ; 设置计数器1 MOV TH1,#(65536-50000) \/ 256 ; 设置低位初值 MOV TL1,#(65536-50000) MOD 256; 设置高位初值 SETB TR1 ; 打开...

用单片机AT89C51驱动两位数码管显示00--99依次循环程序代码
以下是用单片机AT89C51驱动两位数码管显示00--99循环的程序代码片段:程序开始于0000h地址,通过计数器temp(22h)控制数码管从00到99的循环显示。计数器初始化为0,然后调用子程序display进行显示。每当计数器加1并判断是否达到100后,若未满则返回stlop继续循环,满100则清零重新开始。display子程序中,先...

编一个AT89C51单片机00 —99 秒的汇编程序,要求有循环和暂停,用两个...
CLR LATCH1 MOV P0,#11111101B ;0代表选通该位数码管 SETB LATCH2 CLR LATCH2 CALL DELAY1 RET DELAY:MOV R5,#50 ;典型延时程序 D1: MOV R6,#40 D2: MOV R7,#248 CALL SCAN DJNZ R7,DJNZ R6,D2 DJNZ R5,D1 RET DELAY1:MOV R6,#4 ;扫描延时 D3: MOV R7,#2...

求大神写个程序,at89c51单片机实现两个7SEG-COM-ANODE灯循环显示00...
TMOD=0x01;\/\/用T0定时,中断方式 TH0=0x3C;\/\/晶振12M,定时50ms TL0=0xB0;IE=0x82;TR0=1;P0=0xc0;P2=0xc0;while(1);} \/\/T0中断程序 void T0_int() interrupt 1 { TH0 =0x3C;TL0 =0xB0;t0n++;if(t0n>=10)\/\/0.5秒到 { t0n=0;num++;\/\/加1 if(num>99)num=0;P0=tab...

1、 基于AT89C51单片机,利用定时器设计一个两位数码管显示电路。 设计...
if(shu==99) shu=0; } } void time1(void) interrupt 3 { TH1=(65536-5000)\/256; TL1=(65536-5000)%256; display(); } void init() { TMOD=0x11; EA=1; ET0=1; ET1=1; TR1=1; TR0=1; } main() { init(); while(1) { conv(shu); } } 本回答由提问者推荐 举报| 答案纠错 |...

用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键...
uchar num=0;sec,key;void delay(unsigned int a){ unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);} void display(){ LED1=sec\/10;LED2=sec%10;P2=0x01;P0=distab[LED1];delay(3);P2=0x02;P0=distab[LED2];delay(3);} void t0isr() interrupt 1 { TH0=(...

AT89C51单片机用C语言编写一个99秒倒计时的程序,要求复位或上电2位数码...
首先呢,定义两个全局变量,以作十与个并赋值为0,然后编写一个独立键盘函数,分别用于判断SB1~4,若 SB1==0,TR0=1,若SB2==0,TR0=0,若SB3==0,SHI ,若SB4==0,FEN 。主要功能就这样,当然这个并不完美,需要你自己去添加一些功能,然后再编写中断函数。希望我的回答能帮助到你。

单片机用汇编写两个数码管显示0到99循环的程序
1、新建项目,做好准备。2、数码管段选表。3、延时函数。4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。5、while(1) \/\/死循环效果{} 。6、dk = 1;\/\/打开段选,P0 = leddata[i];,dk = 0;\/\/关闭段选,delay(100);\/\/延时...

急求基于单片机AT89C51的多功能数字电子钟的汇编程序,高手进!~_百度知...
用89C51控制3个HC595,前两个595接8段数码显示管,显示“0”~“9”每秒跳动一次.第3个HC595接8个LED灯,每隔1秒闪烁1次.include<at89x52.h> include<intrins.h> define uchar unsigned char define uint unsigned int uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90...

用C语言编写AT89C51单片机程序,设计一个智能数字钟。
这是我的课程设计,6个数码管,显示时分秒,三个按钮P0.0、P0.1、P0.2可以调时,有8个彩灯(可以不要),没闹钟、倒计时之类的。呵呵。include<AT89X52.H> define uchar unsigned char int i;\/\/***时钟的 uchar one[10]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,0x07,0xff,0xef}...

相似回答