问题:如何正确配置定时器?
解决:
第一步:看内部结构框图
从图中看,配置ET,EA,TR,还有设置初始值就可以了,这里取十六进制。


第二步:看寄存器
直接看M0M1即可,操作比较简单



第三步:具体配置
void TIME0_init() //T0
{
TMOD|=0x01;//这里选择的是定时模式,工作方式1,定时模式就是总数减去初值,例如65535-1000+1,就是求定时1ms的例子
//设置初始值,设置初值需要知道一个机器周期等于多少时间,51里面一个机器周期等于1us,那么定时1ms,就需要1000次
TH0=0xfc;
TL0=0x17;
ET0=1;
TR0=1;
EA=1;
}
void TIME0_exit() interrupt 1
{
}
应用:T0和T1一起用
#include <reg52.h>
typedef unsigned int u16;
sbit LED=P2^0;
sbit LED1=P2^1;
u16 num=0,num_1=0;
void TIME0_1_init()
{
TMOD|=0x11;//这里选择的是定时模式,工作方式1,定时模式就是总数减去初值,例如65535-1000+1,就是求定时1ms的例子
//设置初始值,设置初值需要知道一个机器周期等于多少时间,51里面一个机器周期等于1us,那么定时1ms,就需要1000次
TH0=0xfc;
TL0=0x17;
TH1=0xfc;
TL1=0x17;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
EA=1;
}
void main()
{
TIME0_1_init();
while(1)
{
}
}
void TIME0_1_exit() interrupt 1
{
TH0=0xfc;
TL0=0x17;
num++;
if(num%1000==0)
{
LED=!LED;
}
}
void TIME0_1_exit1() interrupt 3
{
TH1=0xfc;
TL1=0x17;
num_1++;
if(num_1%1000==0)
{
LED1=!LED1;
}
}
注意:
这里是定时器模式,计数器模式尝试多次,我暂时还不知道如何使用,知道的也可以私我。