【23】串口通信
本课资源下载
共 1 个资源P23串口通信
本节课的标准源代码工程/可供参考
课程笔记
本节目标概括
创建main.c > 编写点灯代码 > 编译HEX文件 > 下载到学习板 > 串口发送单片机UID
串口驱动库函数介绍
C语言1bit busy;2/**3 * @brief UART 初始化4 * @param baudRate 波特率 1200/2400/4800/9600/14400/19200/288005 * @note 警告:波特率最大28800,超过将无法通信(11.0592MHz晶振下)6 */7void UART_Init(unsigned int baudRate)8{9 SCON = 0x50; // 8-bit 可变帧, REN=110 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}1718void Uart_Isr() interrupt 419{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);34 char send_data[] = "Hello World";56 while(1){7 SendString(send_data);8 delay(1000);9 }10}