主控STC8G1K08(SOP16)主频11.0592M串口波特率:9600TxDP11RxDP10采用定时器2(16位自动重载)做波特率发生器定时器时钟为1T8位数据1停止位无校验上电后循环发送。// STC8G1K08 串口2测试代码 // 功能: 使用P1.0(RXD2), P1.1(TXD2)进行串口通信 // 配置: 11.0592MHz, 9600bps, 8位数据, 1停止位, 无校验 // 测试: 上电后循环发送UART2 Test OK!\r\n #include STC8G.h #include string.h #include stdio.h // 系统配置 #define MAIN_Fosc 11059200UL // 主频 11.0592MHz #define UART2_BAUD_RATE 9600UL // 波特率 9600 // 串口2发送完成标志 bit UART2_Busy 0; // 串口2中断服务函数 void UART2_Isr(void) interrupt 8 { // 发送完成中断 if (S2CON 0x02) { S2CON ~0x02; // 清除发送中断标志 UART2_Busy 0; // 清除忙标志 } // 接收完成中断 if (S2CON 0x01) { S2CON ~0x01; // 清除接收中断标志 UART2_Busy 1; // 设置忙标志 S2BUF S2BUF; // 将接收到的数据发回 } } // 串口2初始化函数 // 功能: 使用P3.6(RXD2), P3.7(TXD2) // 波特率: 9600 11.0592MHz void UART2_Init(void) { // 1. 配置IO口模式 // P1.1 (TXD2) 配置为推挽输出 P1M1 ~0x02; // 清零P1.1的M1位 P1M0 | 0x02; // 设置P1.1为推挽输出 // P1.0 (RXD2) 配置为高阻输入 P1M1 | 0x01; P1M0 ~0x01; // 2. 配置串口和定时器 S2CON 0x50; T2L 0xE0; T2H 0xFE; AUXR | 0x14; UART2_Busy 0; IE2 | 0x01; EA 1; } // 串口2发送单字节 void UART2_SendByte(unsigned char dat) { while (UART2_Busy); // 等待发送完成 UART2_Busy 1; // 设置忙标志 S2BUF dat; // 启动发送 } // 串口2发送字符串 void UART2_SendString(char *str) { while (*str) { UART2_SendByte(*str); } } // 毫秒延时函数 (简单软件延时主频11.0592MHz) void Delay_ms(unsigned int ms) { unsigned int i, j; for (i 0; i ms; i) for (j 0; j 1100; j); // 粗略延时1ms } // 主函数 void main(void) { unsigned char test_count 0; char send_buf[32]; // 初始化串口2 UART2_Init(); // 发送启动信息 UART2_SendString(STC8G1K08 UART2 Test Started!\r\n); UART2_SendString(P1.0(RXD2), P1.1(TXD2), 9600bps, 11.0592MHz\r\n); while (1) { // 周期性发送测试数据 Delay_ms(1000); // 延时1秒 // 格式化测试信息 sprintf(send_buf, Test Count: %d, Time: %d ms\r\n, test_count, 1000 * test_count); UART2_SendString(send_buf); UART2_SendString(UART2 Test OK!\r\n); UART2_SendString(--------------------------------\r\n); } }