微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 定时中断不执行,不知道什么原因,着急啊

定时中断不执行,不知道什么原因,着急啊

时间:10-02 整理:3721RD 点击:
现在这个程序遇到了一些问题:定时器定时5ms,在定时中断中计数1000次(既完成定时5S),执行串口发送字符,但是程序并没有发从出a,b...g,h.如果把count赋值在100,可以执行中断发送,但不是5s,如果把count赋值大于100,则执行send(i),并不执行中断发送程序。这是什么原因,难道和串口的中断发送相冲突,导致结果发布出来,还是什么原因,能给一个比较详细的解释么?谢谢
#include <reg52.h>
int i;
unsigned int count;
//延时1ms乘以count
void delay1ms(int count)
{
   int j,k;
   while(count--!=0)
     {  
            for(j=0;j<9;j++)
                  for(k=0;k<15;k++)
                  ;
                }                                                                                                                                                                                                                                       
  }
//定时器T0定时5ms程序                                                                                          
void InitTimer0(void)
{
           TMOD = 0x21;
       TH0 = 0x0DC;
       TL0 = 0x00;
           EA=1;
           ET0=1;
           TR0=1;
}          
//串口发送程序
send(unsigned char a)
{
    TI = 0;
        SBUF = a;
        while(!TI);
  }
//系统初始化
void init()
  {
TMOD = 0X21; //timer 1 mode 2: 8-Bit reload
SCON = 0X50; //mode 1: 8-bit UART, enable receiver
TH1 = 0XFA;  //reload value 19200 baud /22.1184M
TL1 = TH1;
PCON= 0X80;
TR1=1;                //timer 1 run
TI=1;
  }
//定时时间到之后,执行中断程序
void Timer0Interrupt(void) interrupt 1        using 1
{
    TH0 = 0x0DC;
    TL0 = 0x00;
        count--;
        if(count==1)
            {  
                  count = 10;
                  send('a');
                  send('b');
                  send('c');
                  send('d');
                  send('e');
                  send('f');
                  send('g');
                  send('h');
                 }
}
//主函数从此执行
main()
  {                    count=100;
           delay1ms(100);
                        init();
                       
                InitTimer0();
                        send('i');
                        delay1ms(1000);
}

你的问题我看出来两点,给你说一下
1.串口波特率和定时器有问题,要用同一个定时器
2.在中断函数中加一个while(1)如:void Timer0Interrupt(void) interrupt 1        using 1
{
while(1)
{    TH0 = 0x0DC;
    TL0 = 0x00;
        count--;
        if(count==1)
            {  
                  count = 10;
                  send('a');
                  send('b');
                  send('c');
                  send('d');
                  send('e');
                  send('f');
                  send('g');
                  send('h');
                 }
    }
}

楼上的人才,加了while(1)就不能从中断函数出来了,可能是你定义的延时函数中count的类型有问题,改为unsigned int试试

问题解决了,不是你说的这个问题,你的解决方法也不对

不是别的问题,就是终端里面程序太多,主程序里面没有调用好

没道理啊,中断里面直接用了一个while(1)怎么从中断里出来呢?小弟新手,有些地方不懂还请小编见谅,就请小编告知一下!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top