STC12C5A60S2单片机双串口通信 下载本文

内容发布更新时间 : 2024/5/18 17:32:22星期一 下面是文章的全部内容请认真阅读。

STC12C5A60S2单片机双串口通信

STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同;特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器,串口1可以使用定时器1作为波特率发生器,也可以使用独立波特率发生器作为波特率发生器;而串口2只能使用独立波特率发生器作为波特率发生器。 下面是一段双串口通信的程序:

/*********************************************************************** 时间:2012.11.24 芯片:STC12C5A60S2

晶振:22.1184MHz 波特率:9600bps 引脚定义:串行口1:发送

————TxD/P3.1; 接收————RxD/P3.0 串行口2:发送

————TxD2/P1.3;接收————RxD2/P1.2 功能描述:STC12双串口通信(中断方式)

当串行口1接收数据后,将此数据由串行口2发送出去

当串行口2接收数据后,将此数据由串行口1发送出去

***********************************************************************/ #include;

#define S2RI 0x01//串口2接收中断请求标志位 #define S2TI 0x02//串口2发送中断请求标志位 unsigned char flag1,flag2,temp1,temp2; /****************串行口初始化函数****************/ void InitUART(void) {

TMOD = 0x20; //定时器1工作在方式2 8位自动重装

SCON = 0x50; //串口1工作在方式1 10位异步收发 REN=1允许接收

TH1 = 0xFA; //定时器1初值 TL1 = TH1;

TR1 = 1; //定时器1开始计数 EA =1;//开总中断

ES =1;//开串口1中断

S2CON = 0x50; //串口2工作在方式1 10位异步收发 S2REN=1允许接收

BRT = 0xFA; //独立波特率发生器初值 AUXR = 0x10; //BRTR=1 独立波特率发生器开始计数

IE2 =0x01;//开串口2中断 ES2=1 }

/****************串行口1发送****************/ void UART_1SendOneByte(unsigned char c) {

SBUF = c;

while(!TI); //若TI=0,在此等待 TI = 0; }

/****************串行口2发送****************/ void UART_2SendOneByte(unsigned char c) {

S2BUF = c;

while(!(S2CON&S2TI)); //若S2TI=0,在此等待 S2CON&=~S2TI; //S2TI=0 }