51单片机通过串口发送数字能编译过的代码
时间: 2024-05-01 09:21:00 浏览: 97
以下是一个简单的51单片机通过串口发送数字的例子,你可以根据自己的需求进行修改:
```
#include <reg51.h>
#define BAUD 9600 // 定义波特率
#define FOSC 11059200L // 定义时钟频率
typedef unsigned char uchar;
typedef unsigned int uint;
sbit TX = P3^1; // 串口发送引脚
void init_uart()
{
TMOD &= 0x0F;
TMOD |= 0x20; // 定时器1工作在模式2(8位自动重载)
TH1 = TL1 = -(FOSC/12/32/BAUD); // 计算波特率重载值
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置为工作在模式1(8位数据、可变波特率)
ES = 1; // 允许串口中断
EA = 1; // 开启总中断
}
void send_char(uchar ch)
{
SBUF = ch;
while(!TI); // 等待发送完毕
TI = 0; // 发送完毕,清除TI位
}
void send_string(uchar *str)
{
while(*str != '\0')
{
send_char(*str++);
}
}
void main()
{
init_uart(); // 初始化串口
while(1)
{
uint num = 12345; // 要发送的数字
uchar buf[6]; // 存储数字的缓冲区
sprintf(buf, "%u", num); // 将数字转换为字符串
send_string(buf); // 发送字符串
send_char('\n'); // 发送换行符
}
}
void uart() interrupt 4 using 1
{
if(RI) // 有数据接收
{
RI = 0; // 清除RI位
}
if(TI) // 发送完毕
{
TI = 0; // 清除TI位
}
}
```
在上述代码中,我们首先定义了波特率、时钟频率和发送引脚的宏定义,然后定义了两个 typedef 类型,分别是 uchar 和 uint,用于表示无符号字符和无符号整数。接着定义了初始化串口的函数 init_uart 和发送字符的函数 send_char。在主函数中,我们定义了要发送的数字 num 和存储数字的缓冲区 buf,并使用 sprintf 函数将数字转换为字符串,然后调用 send_string 函数发送字符串,最后发送一个换行符。在中断函数 uart 中,我们判断是否有数据接收或发送完毕,并清除 RI 和 TI 位。最后在主函数中使用一个无限循环来不断发送数字。
阅读全文