波特律动
课程中心/51单片机教程/【23】串口通信

【23】串口通信



本课资源下载
共 1 个资源
P23串口通信

本节课的标准源代码工程/可供参考

V1.0压缩包22 KB
下载

课程笔记


本节目标概括

创建main.c > 编写点灯代码 > 编译HEX文件 > 下载到学习板 > 串口发送单片机UID


串口驱动库函数介绍
C语言
1bit busy;
2/**
3 * @brief UART 初始化
4 * @param baudRate 波特率 1200/2400/4800/9600/14400/19200/28800
5 * @note 警告:波特率最大28800,超过将无法通信(11.0592MHz晶振下)
6 */
7void UART_Init(unsigned int baudRate)
8{
9 SCON = 0x50; // 8-bit 可变帧, REN=1
10 TMOD = 0x20; // Timer1 模式2 (保留 TMOD 低4位)
11 TH1 = TL1 = 65536 - (FOSC / 12 / 32 / baudRate);
12 TR1 = 1;
13 ES = 1; // 允许串口中断
14 EA = 1; // 总中断使能
15 busy = 0;
16}
17
18void Uart_Isr() interrupt 4
19{
20 if (RI)
21 {
22 RI = 0;
23 // P0 = SBUF; // 接收数据显示到 P0(调试用)
24 // bit9 = RB8;
25 }
26 if (TI)
27 {
28 TI = 0;
29 busy = 0;
30 }
31}
32// 串口发送一个字节
33void SendByte(BYTE dat)
34{
35 while (busy)
36 ; // 等待上次发送完成
37 ACC = dat; // 更新 P 标志位(用于奇偶校验计算,如需要)
38 // 默认不使用奇偶校验(TB8 保持 0)
39 busy = 1;
40 SBUF = ACC;
41}
42// 串口发送一个字符串
43void SendString(char *s)
44{
45 while (*s)
46 {
47 SendByte(*s++);
48 }
49}


主函数:

  • 现象:每一秒串口发送一次 "Hello World"
C语言
1void main(){
2 UART_Init(9600);
3
4 char send_data[] = "Hello World";
5
6 while(1){
7 SendString(send_data);
8 delay(1000);
9 }
10}