"STC12C5A60S2单片机双串口通信实例及波特率设置"

版权申诉
0 下载量 51 浏览量 更新于2024-03-28 收藏 35KB DOCX 举报
STC12C5A60S2 单片机是一款功能比较强大的单片机,具有两个全双工串行通信接口。其中,串口1的功能及操作与传统51单片机串行口相同,但内部有一个独立波特率发生器,可以选择定时器1或独立波特率发生器作为波特率发生器。而串口2只能使用独立波特率发生器。 下面是一段双串口通信的程序示例: /*********************************************************************** 时间:2012.11.24 芯片:STC12C5A60S2 晶振:22.1184MHz 波特率:9600bps 引脚定义: 串口1:发送端口P3.1,接收端口P3.0 串口2:发送端口P3.2,接收端口P3.3 ***********************************************************************/ #include <STC12C5A60S2.H> #define FOSC 22118400UL #define BAUD 9600 void UART1_Init() { SCON = 0x50; TMOD = 0x20; TH1 = 256 - FOSC/12/32/BAUD; TL1 = TH1; ET1 = 0; TR1 = 1; } void UART2_Init() { S2CON = 0x50; T2L = (65536 - FOSC/4/BAUD); T2H = (65536 - FOSC/4/BAUD) >> 8; AUXR |= 0x14; AUXR &= 0xFE; IE2 |= 0x01; } void UART1_SendByte(unsigned char dat) { SBUF = dat; while(TI == 0); TI = 0; } unsigned char UART1_ReceiveByte() { unsigned char dat; while(RI == 0); dat = SBUF; RI = 0; return dat; } void UART2_SendByte(unsigned char dat) { S2BUF = dat; while(!TI2); TI2 = 0; } unsigned char UART2_ReceiveByte() { unsigned char dat; while(!RI2); dat = S2BUF; RI2 = 0; return dat; } void main() { UART1_Init(); UART2_Init(); while(1) { unsigned char dat1, dat2; dat1 = UART1_ReceiveByte(); dat2 = UART2_ReceiveByte(); UART1_SendByte(dat2); UART2_SendByte(dat1); } } 这段代码演示了如何利用STC12C5A60S2单片机的双串口通信功能,通过串口1接收数据,然后通过串口2发送出去;同时通过串口2接收数据,然后通过串口1发送出去,实现了双串口之间的数据交换。通过这个例子,展示了STC12C5A60S2单片机在双串口通信方面的强大功能和灵活性。