标题: 51单片机的T1作为波特率发生的话,可以允许ET1=1允许中断吗? [打印本页]

作者: 13681878016    时间: 2020-5-8 09:10
标题: 51单片机的T1作为波特率发生的话,可以允许ET1=1允许中断吗?
如题,理论上T1作为波特率发生器的定时器不需要中断服务函数。 但是如果加了允许进入中断(ET1=1;),又写了中断服务函数内容的话,会造成串口发送乱码吗?

或者允许了中断,但是不写中断服务函数,会造成51单片机跑飞程序吗?

void SendByte(unsigned char c)
{
  SBUF = c;
  while(TI==0);
  TI = 0;
}

void main(void)
{
   TMOD = 0x21;       // 波特率2400
   SCON = 0x50;        
   TH1 = 0xF3;        
   TL1 = TH1;         
   TR1 = 1;                     
    EA = 1;       
      ET1 = 1;                         //就是加了这句!!!!允许T1中断

   while(1)
  {
    SendByte('A');
  }

}

void Timer1Isr(void) interrupt 3    //T1的中断服务函数,随便瞎写的内容,只是表示一下。
{
        unsigned char i = 0;
       i++;
}


其实也就是 定时器T1的中断服务函数会不会影响串口产生的波特率或者SBUF的发送???


作者: sxqstudy    时间: 2020-5-8 12:25
看你中断频率多高了,单片机都是单线程,主要还是看时间能不能切换得过来。如果不高,按理说应该不会影响正常的串口收发。
作者: cjjdemon    时间: 2020-5-8 13:22
应该会影响波特率吧,会有误码。
作者: wulin    时间: 2020-5-8 17:16
一般尽可能避免同一个定时器即作为波特率发生器又作为定时器中断源使用,否则有可能发生无法预料的后果。实在因为资源不济也得分时共用一个定时器。
作者: kevin_cgl    时间: 2020-5-8 20:54
T1作为串口数据传输,是要按波特率重新赋初始值的,如果另外用T1做中断也要重新赋值,这两个动作本来就不可能同步吧




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1