单片机定时器如何工作

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

uint num;
void main()
{
TMOD=0x01; //定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //初始化为定时时间为50ms
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1)
{
if(num==20)
{
P1=0x00; //接P1口的发光二极管全亮
num=0;
}
else
P1=0xff; //接P1口的发光二极管全熄灭
}

}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //初始化为定时时间为50ms
num++;
}

执行到这一行后: TR0=1; //启动定时器0
再去执行哪一行啊?是直接去定时器0中断那吗?
定时器溢出后,程序又将去执行哪里啊?
EA总中断和定时器0中断都已经打开。

1、定时器开始工作之前,CPU必须将一些命令(称为控制字)写入定时器。将控制字写入定时器的过程叫定时器初始化。在初始化过程中,要将工作方式控制字写入方式寄存器,工作状态字(或相关位)写入控制寄存器,赋定时初值。
2、单片机定时器定时的时间算法:
根据晶振频率,计算指令周期,设置定时器的分频,然后设置定时器的工作方式TMOD,最后设置初值TH0 TL0 比如用的X HZ的晶振,stc的单片机有3种模式(X/12)x/6,还有单周期指令,选择12分频的,T=1/(X/12)就是一个指令周期 ,如果定时没有分频(65536-Z(初值))*T就是定时的时间。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-14
因为EA总中断和定时器0中断都已经打开。
TR0=1; //启动定时器0
再去执行while(1) {} 同时硬件启动定时器计时
定时器溢出后产生中断,执行void timer0() interrupt 1 定时器初值重装 mun++

这样的回答不知道满意否?本回答被提问者和网友采纳
第2个回答  2009-03-07
定时器溢出后单片机如何工作这个问题要看你有没有开定时器中断和开总中断,如果都开了的话就去执行中断服务子程序。如果有一个没开就会定时器继续计数。