51单片机定时器中断函数,定时器,还有while()这三个之间是怎么跳转,工作流程是什么呢?

用定时器以间隔500MS在6位数码管上依次显示
0、1、2、3....C、D、E、F,重复。
设时钟频率为12M
*/
/*********************************************************/
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit dula=P2^6; //数码管段选锁存端
sbit wela=P2^7; ////数码管位选锁存端
uchar num,tt;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{
num=0;
tt=0;
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
dula=1;
P0=0x3f; //给段开始送显示0。
dula=0;//关闭段选锁存端,防止开始时出现乱码。
wela=1;//11101010
P0=0xc0; // 打开六个数码管位选
wela=0;
while(1)
{
if(tt==10) //每进入10次中断即为500ms,执行一次显示变化。
{
tt=0;
num++;
if(num==16)
num=0;
dula=1;
P0=table[num];
dula=0;
}
}
}

void exter0() interrupt 1 // 定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}

1,什么时候定时器开始工作?
2,什么时候进入中断函数,进入中断函数后定时器是怎么工作的,怎么循环累加出延时时间的?
3,while()里面的循环又是怎么工作的呢
主要在定时器计数,进中断,进WHILE()时这整个流程,具体怎么工作的呢?

①TR0=1;//启动定时器0 这就是 定时器开始 工作了。

②程序配置了 定时器的 中断时间为 50ms(12MHz晶振),也就是每隔 50ms 就进入一次中断函数。进入中断后,程序又重新给定时器 定时 50ms,同时 对 中断次数 进行 记录(tt++)。主程序只要查询 记录值(tt),就能知道 定时器 中断了多少次了。
主函数的 while(1)表示 系统是个 循环系统,一直在 循环,不结束。当 定时器 产生中断时,就会 暂停 主函数,这就称为 中断。等 中断执行结束后,又 会的 主函数 被打断的 地方,继续执行主函数的 内容。追问

1,TR0=1;//启动定时器0后,定时器第一次溢出时,进入中断函数(第一次),中断函数重赋定时器初值,tt加1;定时器开始第二次计数,tt加1;
一直到tt=10时,数码显示,同时定时器也一直在独立工作,不受while(1)j里动作的影响。

2,理解为:TR0=1这条指令后,
一路是定时器一直在计数; 另一路是程序按顺序执行,执行到while(1)中等待。

追答

①主函数属于 前台工作,定时器属于 后台工作。这就像一个戏台子:演员(主函数)在前台表演给观众(使用者)看,而后勤人员(定时器)在后台 敲锣打鼓(计时)为 演员表演 提供信息。这是告诉你,主函数在执行的时候,定时器是一直在工作的(只要你开启了)。
②程序中,主函数的while(1)内容是有东西的,它对 定时器的中断次数(tt)进行查询,如果=10次,那它就清 0 次数,并且执行数码显示。这是告诉你,显示不是定时器做的,清0 也不是定时器做的。
③TR0=1 就是让定时器 开始计时,不管同不同意中断,它都在计时。

温馨提示:答案为网友推荐,仅供参考