列出使用51单片机定时器2生成不同波特率时,TH2和TL2寄存器可能对应的数值范围,以及如何计算得出这些值(假设晶振频率已知)?给出具体数值波特率为115200晶振为12Mhz和11.0592Mhz给出代码
时间: 2024-12-20 17:24:26 浏览: 69
51单片机的定时器2(Timer2)通常用于波特率发生器,通过调整TH2(高8位)和TL2(低8位)寄存器的值,结合特定的时钟源频率,可以得到不同的波特率。对于115200波特率的设置,我们需要使用软件中断法,即计数到溢出后自动重启计数器。
首先,假设我们使用12MHz的晶振频率,为了获得115200bps的波特率,因为115200 = (12 * 10^6) / (8 * (1+RISE/FALL_TIME)),其中RISE/FALL_TIME代表每个数据位的上升时间和下降时间,一般取7.5μs(对应于51单片机的典型配置)。计算出RISE/FALL_TIME后,可以得出定时器的最大计数值。
```c
// 计算最大计数值(假设RISE/FALL_TIME为7.5us)
int max_count = (12 * 1000000) / (8 * 115200);
max_count = (max_count >> 4); // 取TH2 TL2的值范围(16位)
// TH2 = (max_count >> 8), TL2 = max_count & 0xFF
TH2 = (max_count >> 8);
TL2 = max_count & 0xFF;
```
如果晶振改为11.0592MHz,同样计算出计数值:
```c
int new_max_count = (11.0592 * 1000000) / (8 * 115200);
new_max_count = (new_max_count >> 4); // 范围保持不变
// 更新TH2 TL2的值
TH2 = (new_max_count >> 8);
TL2 = new_max_count & 0xFF;
```
请注意,实际操作中可能还需要考虑额外的延时以确保在计数溢出时正确触发中断,以及波特率发生器的初始化步骤。这是简化示例,实际应用可能需要更复杂的控制逻辑。
阅读全文