标题:
stc52单片机定时器1,运行不了是什么问题?
[打印本页]
作者:
sr861126
时间:
2023-7-10 14:22
标题:
stc52单片机定时器1,运行不了是什么问题?
/*-----------------------------------------------
名称:定时器1
修改:无
内容:通过定时让LED灯闪烁
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit LED=P1^0; //定义LED端口
char n;
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer1(void)
{
TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=65535-10000/256;
TL1=65535-10000%6; //定时器0的,写入数值寄存器的低8位
EA=1; //总中断打开
ET1=1; //定时器中断打开
TR1=1; //定时器开关打开
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
Init_Timer1();
while(1);
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer1_isr(void) interrupt 3 using 1
{
TH1=65535-10000/256;
TL1=65535-10000%6; //定时器0的,写入数值寄存器的低8位
if(n>=20)
{
n=0;
LED=~LED; //LED闪烁
}
}
作者:
13534874028
时间:
2023-7-10 15:28
不是你定时器没有运行,是你的中断函数里的变量n没有自加操作呀,你的n就不可能大于20
作者:
13534874028
时间:
2023-7-10 15:29
你中断函数里的变量n没有自加操作,就一直是0
作者:
sbskywalker
时间:
2023-7-10 15:33
这不是定时器没有运行,而是中断服务函数写错了,应加上n++;
作者:
wulin
时间:
2023-7-10 16:00
TH1、TL1赋值错误
TH1=65535-10000/256;
TL1=65535-10000%6;
void Init_Timer1(void)
{
TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=(65535-10000)/256;
TL1=(65535-10000)%256; //定时器0的,写入数值寄存器的低8位
EA=1; //总中断打开
ET1=1; //定时器中断打开
TR1=1; //定时器开关打开
}
void Timer1_isr(void) interrupt 3 using 1
{
TH1=(65535-10000)/256;
TL1=(65535-10000)%256; //定时器0的,写入数值寄存器的低8位
if(n>=20)
{
n=0;
LED=~LED; //LED闪烁
}
}
作者:
man1234567
时间:
2023-7-10 17:01
1、TH1、TL1赋值错误,楼上正解;
2、对于TH1、TL1赋值方式有多种样式,具体可百度。
作者:
sr861126
时间:
2023-7-11 09:15
13534874028 发表于 2023-7-10 15:29
你中断函数里的变量n没有自加操作,就一直是0
++了,也是一样的
作者:
coody_sz
时间:
2023-7-11 13:39
在中断里取反一个IO,示波器看看。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1