51单片机定时器中断函数,定时器,还有while()这三个之间是怎么跳转,工作流程是什么呢?
用定时器以间隔500MS在6位数码管上依次显示0、1、2、3....C、D、E、F,重复。设时钟频率为12M*//****************************...
用定时器以间隔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()时这整个流程,具体怎么工作的呢? 展开
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()时这整个流程,具体怎么工作的呢? 展开
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 就是让定时器 开始计时,不管同不同意中断,它都在计时。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询