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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分别用汇编语言和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);

追问

谢谢

追答

呵呵,希望可以帮到你。

追问

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

参考技术A 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; 追问

中文需要写上去吗?

追答

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

参考技术B 秒表是秒表,计数器是计数器。
你到底需要什么呢?
一般不会是两个的。。。

以上是关于分别用汇编语言和C语言设计: 采用中断方式,利用定时器进行0-9秒表计数器的设计,并用数码的主要内容,如果未能解决你的问题,请参考以下文章

c语言:请编程序将“China”译成密码,分别用putchar和printf函数输出这5个字符。

C语言词频统计设计

C语言编程,输入10个学生5门课的成绩,分别用函数实现以下功能:

高分悬赏 求解2道MATLAB编程题目

分别用回溯法和动态规划求0/1背包问题(C语言代码)

C 语言程序设计~实训~急急急!!!