初学者单片机程序求助!

来源:百度知道 编辑:UC知道 时间:2024/06/05 16:45:15
两个程序一样的功能:将但是不理解第二个程序中中断的作用是什么!哪位大大给详细解释一下中断的作用:
#include <AT89X51.H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char second;
unsigned char tcount;

void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
tcount=0;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(TF0==1)
{
tcount++;
if(tcount==20)
{
tcount=0;
second++;
if(second==60)
{
second=0;
}
P0=dispcode[second/10];
P2=dispcode[second%10];

你上面那个程序是通过查询方式进行计数,下面是通过中断方式进行计数,查询的你必须时常去判断,并且执行其他程序是查询到的标志变化会被延迟,实时性不好.中断方式你其他的程序一直在运行,等时间到后马上转到中断子程序,实时性好,程序效率高。

每秒就中断一次,然后second自加一,也就是将秒计数,然后通过这段程序
if(second==60)
{
second=0;
}
P0=dispcode[second/10];
P2=dispcode[second%10];
}
把秒数显示出来

(首先纠正楼上兄弟的一个错误,此中断为一秒中中断20次)
定时器的定时时间为50ms,每次定时到,定时计数(Tcount)+1,当Tcount到20时,也就是定时到20*0.05=1S时,秒钟计数+1,实到一个0-59秒的计数显示