=
0x8a--允许外部中断1和定时器t0中断,tr0=1--定时器t0启动,晶振频率为11.0592mhz;
2.tzd()为定时器t0中断服务子程序,当定时器t0溢出时,进入tzd(),th0
=
0xfe--寄存器th0重置为254,tl0
=
0x33--寄存器tl0重置为51,
每进入一次定时器t0中断,ct就加1,ct++==speed--当ct的值加到speed时,执行tim=1和ct=0。
不是单片机题目里的TMOD,而是单片机的内部专用寄存器TMOD的设置,它是定时器的工作模式设置寄存器,用它来设置定时器T0,T1的工作模式。以最常用的定时器模式(还有一种计数器模式)为例
高四位 用来设置定时器T1的,低四位用来设置定时器T0的。
定时器有四种工作方式,分别为0,1,2,3
T0方式几,低四位就是几,T1方式几,高四位就是几。
例:T0设置为方式1,则TMOD=0x01,即01H
T1设置为方式2,则TMOD=0x20,即02H
如果T1,T0同时使用,就同时设置,T1方式2,T0方式1,则TMOD=0x21,即21H。
你说的00H,是不用设置的,因为默认的就是00H。
下面以运用中断对LED进行控制,举一个例子吧,定时时间50ms,设置为一秒的话,加个for循环,相应改动即可!#include<reg52.h>
sbit LED=P1^2 //定义LED端口
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01 //使用模式1
TH0=(65535-50000)/256 //给定初值
TL0=(65535-50000)%256
EA=1 //总中断打开
ET0=1 //定时器中断打开
TR0=1 //定时器开关打开
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
Init_Timer0()
while(1)
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x00 //重新赋值
TL0=0x00
LED=~LED //指示灯反相,可以看到闪烁
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)