|
STC12C5A60S2双串口程序。串口1P3.0和P3.1、串口2P1.3和P1.2。- /***********************************************************************
- 时间:2012.11.24
- 芯片:STC12C5A60S2
- 晶振:22.1184MHz 波特率:9600bps
- 引脚定义:串行口1:发送————TxD/P3.1; 接收———.000—RxD/P3
- 串行口2: 发送————TxD2/P1.3;接收————RxD2/P1.2
- 功能描述:STC12双串口通信(中断方式)
- 当串行口1接收数据后,将此数据由串行口2发送出去
- 当串行口2接收数据后,将此数据由串行口1发送出去
- ***********************************************************************/
- #include<STC12C5A60S2.h>
- #define S2RI 0x01 //串口2接收中断请求标志位
- #define S2TI 0x02 //串口2发送中断请求标志位
- unsigned char flag1,flag2,temp1=0xaa,temp2=0x55;
- /****************串行口初始化函数****************/
- 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
- }
- void delay(unsigned int z)
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=600;y>0;y--);
- }
- /*****************主函数******************/
- void main(void)
- {
- InitUART(); //串行口初始化
-
- while(1)
- {P0=temp2;
- //如果串口1接收到数据,将此数据由串口2发送
- if(flag1==1)
- {
-
- flag1=0;
- UART_2SendOneByte(temp1);
-
- }
- delay(300);
- P0=temp1;
- //如果串口2接收到数据,将此数据由串口1发送
- if(flag2==1)
- {
-
- flag2=0;
- UART_1SendOneByte(temp2);
- }
- delay(300);
- }
- }
- /************串行口1中断处理函数*************/
- void UART_1Interrupt(void) interrupt 4
- {
- if(RI==1)
- {
-
- RI=0;
- flag1=1;
- temp1=SBUF;
- }
- }
- /************串行口2中断处理函数*************/
- void UART_2Interrupt(void) interrupt 8
- {
- if(S2CON&S2RI)
- {
-
- S2CON&=~S2RI;
- flag2=1;
- temp2=S2BUF;
- }
- }
复制代码
|
评分
-
查看全部评分
|