标题: 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