分别用汇编语言和C语言设计: 采用中断方式,利用定时器进行0-9秒表计数器的设计,并用数码

分别用汇编语言和C语言设计:
采用中断方式,利用定时器进行0-9秒表计数器的设计,并用数码管显示。

ORG 0000H 
LJMP MAIN 
ORG 000BH 
LJMP T0ISR 
ORG 0030H 
MAIN: 
     MOV TMOD,#01H
     MOV TH0,#HIGH(65536-50000)
     MOV TL0,#LOW((65536-50000)  
     SETB TR0
     SETB ET0 
     SETB EA
     MOV R0,#0
     MOV R2,#0
     SJMP $
T0ISR:
     CLR TR0 
     MOV TH0,#HIGH(65536-50000)
     MOV TL0,#LOW((65536-50000)  
     SETB TR0 
     INC R0 
     CJNE R0,#20,T0E
     INC R2
     CJNE R2,#10,T001
     MOV R2,#0
T001: 
     MOV A,R2
     MOV DPTR,#TABLE
     MOV A,@A+DPTR 
     MOV P0,A
T0E: 
     RETI
TABLE:      ; å…±é˜´æžæ•°ç ç®¡æ˜¾ç¤ºä»£ç è¡¨
          DB    3FH,06H,5BH,4FH,66H ;01234
          DB    6DH,7DH,07H,7FH,6fh ;56789

        END

 

 

#include<reg51.h>

#define uchar unsigned char

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
uchar num,dat;

void t0isr() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

num++;

if(num>=20)

    {

    num=0;

    dat++;

    dat%=10;

    P0=table[dat];

    }

}

main()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

num=0;

dat=0;

while(1);

}

追问

谢谢

追答

呵呵,希望可以帮到你。

追问

谢谢 能再帮我回答这个问题吗?简述中断系统的工作流程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-12
ORG 00HAJMP MAINORG 0BHAJMP T0INTORG 30H ;主程序开始地址MAIN: MOV R4,#20MOV DPTR,#TABMOV TMOD,#01HMOV TH0,#03CH ;12M晶振时定时初值取#3CB0H MOV TL0,#0B0H SETB ET0SETB EASETB TR0DISP:MOV A,R0MOVC A,@A+DPTRMOV P0,AAJMP DISP T0INT: MOV TH0,#03CH;定时中断子程序。重装定时常数MOV TL0,#0B0H;DJNZ R4,RTI ;50msX20=1S,未满20次,跳出中断子程序MOV R4,#20INC R0CJNE R0,#10,RTIMOV R0,#0 RTI: RETI
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;显示码表,共阴
END

#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar time,num;uchar code tab[ ]= { 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ }; void display();
void T0intinit( ) //定时器T0初始化{ TMOD=0x01; TH0=(65536-50000)/256; //50ms定时 TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;}
void main(){ T0intinit( ); while(1) { display( ); }}
void display( ){ P0=tab[num];}
void T0int( ) interrupt 1 //定时器T0中断 方式1{ TH0=(65536-50000)/256; //重装10ms定时常数 TL0=(65536-50000)%256; time++; if(time==20) { time=0; num++; if(num==10) num=0; }}追问

中文需要写上去吗?

追答

中文没事,前面有个分号。分号后面的是注释,不影响程序的。

第2个回答  2021-12-26
秒表是秒表,计数器是计数器。
你到底需要什么呢?
一般不会是两个的。。。