求教89C52定时器2的使用
为使用89c52的定时器2,编写了一段C语言程序,让一个灯闪烁。程序如下:#include<reg52.h>
sbit led1 = P1^0;
int i = 0;
void timer1_inte()//定时器初始化函数
{
TMOD = 0x01; //定时器T0选择工作方式1
TH2 = 0x4c; //设置初始值
TL2 = 0x00;
EA = 1; //打开总中断
ET2 = 1; //打开定时器T2中断
TR2 = 1; //启动定时器T2
}
void main()
{
led1 = 0;
timer1_inte();
while(1)
{
if(i==20)
{
led1 = ~led1;
i=0;
}
}
}
void tmer3() interrupt 3
{
TF2 = 0;
TH2 = 0x4c; //设置初始值
TL2 = 0x00;
i=i+1;
}
但烧录后不能运行,请高手指点。 寄存器设置错误~~ 寄存器设置
TMOD = 0x01; //定时器T0选择工作方式1
是为了试一下T0定时器用的,将其去掉后仍是一样。
将程序中TH2等等改成TH0后,运行通过。也就是这个程序用T0定时器是成功的。 如果是其它寄存器设置,烦请告知。谢谢! 本帖最后由 huxiangming 于 2018-6-10 20:40 编辑
T2的中断号应该是5.
void timer2() interrupt 5 把 main() 写到最后
https://blog.csdn.net/u013020969/article/details/39588167
你这程序是直接用定时器1的程序改的吧?完全不对路,能正常运行才怪。建议好好看看Datasheet里关于Timer2的说明:中断号是5不是3,上面已经有人说了;初始化时不需要设置TMOD,而是T2CON=0x00.
把中断号3改成5,试验成功。TOMD不需要设置是知道的。T2CON的默认值是0,这里可以不设置。但中断号必须是5我真不知道,资料上只是说中断号是编译器识别不同中断的唯一编号,为什么必须是5就不知道了,现在仍然不知道。 谢谢各位高手的指点! zls3210018 发表于 2018-6-11 16:46
把中断号3改成5,试验成功。TOMD不需要设置是知道的。T2CON的默认值是0,这里可以不设置。但中断号必须是5 ...
中断控制寄存器IE、IPL、IPH的位5,定义为T2的控制位。这是由硬件或微程序决定的,用户不可更改。
本帖最后由 ycx2002 于 2018-6-17 00:50 编辑
设置RCAP2H和2L即可,百度一下,方法一坨一坨的。
页:
[1]