找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1838|回复: 8
收起左侧

单片机串行口通信定时器中断问题

[复制链接]
ID:705846 发表于 2024-5-20 14:29 | 显示全部楼层 |阅读模式
各位大师:

    利用单片机TR1作为波特率发生器时候,是否一定要禁止TR1的中断(ET1=0), 如果一定要是不是意味着TR1不能作为有中断需求的定时器使用。例如时间的计时功能。

谢谢解答。

void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0xE0;                        //设置定时初始值
        TH1 = 0xFE;                        //设置定时初始值
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
}

回复

使用道具 举报

ID:94031 发表于 2024-5-21 05:54 | 显示全部楼层
TR1作为波特率发生器时候,不能再作为有中断需求的定时器使用。
回复

使用道具 举报

ID:705846 发表于 2024-5-21 14:46 | 显示全部楼层
xuyaqi 发表于 2024-5-21 05:54
TR1作为波特率发生器时候,不能再作为有中断需求的定时器使用。

真的,14W401要有个定时器的中断,还要串口通信怎么办
回复

使用道具 举报

ID:161164 发表于 2024-5-21 15:27 | 显示全部楼层
samxon 发表于 2024-5-21 14:46
真的,14W401要有个定时器的中断,还要串口通信怎么办

用两个定时器
回复

使用道具 举报

ID:624769 发表于 2024-5-21 16:09 | 显示全部楼层
不是完全不能用串口的定时器同时做定时器中断,只是如果波特率很高,并且单片机速度又比较慢的话,就不合适了。
用数据讲话,
假定用 AT89C51  定时器1 做波特率发生器 晶振频率 11.0592MHz, 波特率9600, 此时TH1, TL1 就要设置成  0xFD,  换句话说,如果把这个设定同时开定时器中断的话,每3个时钟 就是中断一次。对51单片机来讲,这就等于,死在中断里出不来了(进中断2个时钟,出中断2个时钟)。

假定,用 STC15系列(所谓的1T单片机),晶振频率 22.1184MHz,波特率57600,此时,TH1,TL1, 设置为: 0xFFA0   这种情况下如果开中断,那么相当于 96个时钟 进入中断一次。那么如果只是在中断里面做点小的工作,比如:
if(--count ==0)
{
          time_flag = 1;
          count = 200;
}
那么完全是可以的。

当然,可以是一回事,好不好是另外一回事,如果资源丰富还是建议用其他的定时器。同样如果资源紧张,对串口没有特别的要求,也可以使用串口的模式2,不用定时器的串口模式。
回复

使用道具 举报

ID:705846 发表于 2024-5-21 18:57 | 显示全部楼层
188610329 发表于 2024-5-21 16:09
不是完全不能用串口的定时器同时做定时器中断,只是如果波特率很高,并且单片机速度又比较慢的话,就不合适 ...

谢谢,不用定时器是不是就是固定波特率
回复

使用道具 举报

ID:624769 发表于 2024-5-21 19:20 | 显示全部楼层
samxon 发表于 2024-5-21 18:57
谢谢,不用定时器是不是就是固定波特率

对的, 就是串口模式2, 固定波特率
当晶振频率为: 7.3728 Mhz 时 波特率为: 115200
当晶振频率为: 29.4912 Mhz 时 波特率为: 460800
当晶振频率为: 29.4912 Mhz 并且 SMOD = 1 时 波特率为: 921600

不过这两个型号的 晶振 价格相对 比较贵。
回复

使用道具 举报

ID:402383 发表于 2024-5-24 10:42 | 显示全部楼层
188610329 发表于 2024-5-21 16:09
不是完全不能用串口的定时器同时做定时器中断,只是如果波特率很高,并且单片机速度又比较慢的话,就不合适 ...

举的例子很形象。在通讯速率高或者采集数据时间速度要求高的场合,需要考虑系统时钟和执行指令的时间。
回复

使用道具 举报

ID:123289 发表于 2024-5-24 17:32 | 显示全部楼层
这是两码事:
定时器,只要有CLK输入就计数,计满则回头再来。
将其输出作为波特率的CLK与用不用中断无关。
但是有一点,如果时常数需要中断程序去修改,这样不中断波特率就不对了。


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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