找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3177|回复: 4
收起左侧

51单片机的T1作为波特率发生的话,可以允许ET1=1允许中断吗?

[复制链接]
ID:482935 发表于 2020-5-8 09:10 | 显示全部楼层 |阅读模式
如题,理论上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的发送???

回复

使用道具 举报

ID:746796 发表于 2020-5-8 12:25 | 显示全部楼层
看你中断频率多高了,单片机都是单线程,主要还是看时间能不能切换得过来。如果不高,按理说应该不会影响正常的串口收发。
回复

使用道具 举报

ID:612392 发表于 2020-5-8 13:22 | 显示全部楼层
应该会影响波特率吧,会有误码。
回复

使用道具 举报

ID:213173 发表于 2020-5-8 17:16 | 显示全部楼层
一般尽可能避免同一个定时器即作为波特率发生器又作为定时器中断源使用,否则有可能发生无法预料的后果。实在因为资源不济也得分时共用一个定时器。
回复

使用道具 举报

ID:747196 发表于 2020-5-8 20:54 | 显示全部楼层
T1作为串口数据传输,是要按波特率重新赋初始值的,如果另外用T1做中断也要重新赋值,这两个动作本来就不可能同步吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表