C51中12.000MHz的串口设置波特率
时间: 2023-09-03 12:12:50 浏览: 61
在C51中设置12.000MHz的串口波特率需要先确定所使用的UART模块类型和使用的波特率计算公式。
假设使用的是常见的STC89C52单片机,其内部UART模块的时钟源为12MHz晶振,可以通过下面的代码设置9600波特率:
```c
#include <reg52.h>
void main()
{
// 设置波特率计算公式
TH1 = 0xFD;
TL1 = 0xFD;
// 打开串口
TMOD |= 0x20;
TR1 = 1;
// 向串口发送数据
SBUF = 'H';
while (1);
}
```
上述代码中,TH1和TL1寄存器共同决定了波特率计算公式,9600波特率对应的计算公式为:
$$BaudRate = \frac{F_{OSC}}{12 \times (256-TH1)}$$
将12.000MHz代入上式计算可得:
$$TH1 = 0xFD$$
因此,设置TH1寄存器为0xFD即可设置12.000MHz下的串口波特率为9600。如果需要设置其他波特率,可以根据相应的计算公式计算得到TH1的值。
相关问题
如何把c51串口通信波特率设置为4800
在C51单片机中,串口通信的波特率可以通过修改波特率发生器的值来设置。具体步骤如下:
1. 确定单片机外部晶振的频率,例如为11.0592MHz。
2. 计算出所需的波特率发生器的值,公式为:波特率发生器的值 = (晶振频率 / (32 * 波特率)) - 1。例如,要设置波特率为4800,则波特率发生器的值为 (11.0592MHz / (32 * 4800)) - 1 = 53。
3. 将计算出的波特率发生器的值写入到单片机的特定寄存器中,以设置串口通信的波特率为4800。
具体的代码实现可能因不同的单片机型号而有所不同,这里以STC89C52RC为例,给出一段设置串口波特率为4800的代码:
```
void init_uart() {
TMOD &= 0x0F; // 设置定时器1为模式1
TMOD |= 0x20;
PCON |= 0x80; // SMOD = 1, 波特率加倍
SCON = 0x50; // 设置串口为模式1,允许接收
TH1 = 0xB7; // 波特率发生器高字节
TL1 = 0xFF; // 波特率发生器低字节
TR1 = 1; // 启动定时器1
}
```
在上面的代码中,TH1和TL1分别是定时器1的高字节和低字节,它们组成了波特率发生器的值。将TH1设置为0xB7,TL1设置为0xFF,就可以设置串口波特率为4800。
频率22.1184MHZ C51 串口收发程序
对于C51单片机的串口收发程序,你可以参考以下示例代码:
```c
#include <reg52.h>
#define FREQ 22118400UL // 单片机工作频率
#define BAUDRATE 9600 // 波特率
void UART_Init() {
TMOD = 0x20; // 设置定时器1为8位自动重装模式
TH1 = 256 - FREQ / 12 / 32 / BAUDRATE; // 计算波特率重装值
TL1 = TH1; // 初始化定时器1的初值
PCON = 0x00; // 波特率不加倍
SCON = 0x50; // 设置串口为模式1,REN=1
TR1 = 1; // 启动定时器1
}
void UART_SendByte(unsigned char dat) {
SBUF = dat;
while (!TI); // 等待发送完成
TI = 0; // 清除发送标志位
}
unsigned char UART_ReceiveByte() {
while (!RI); // 等待接收完成
RI = 0; // 清除接收标志位
return SBUF;
}
void main() {
UART_Init(); // 初始化串口
while (1) {
unsigned char data;
data = UART_ReceiveByte(); // 接收数据
UART_SendByte(data); // 发送数据
}
}
```
请注意,上述代码是基于C51单片机的8051系列,使用定时器1来实现波特率的计算和串口的收发功能。在初始化时,根据所使用的单片机工作频率和波特率计算出波特率重装值,并设置相应的寄存器。然后,在主循环中,通过调用`UART_ReceiveByte()`函数接收数据,再调用`UART_SendByte()`函数发送数据。
你可以根据自己的实际需求对代码进行修改和扩展。希望对你有帮助!如果有任何问题,请随时提问。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)