|
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;
- }
- }
復制代碼
|
評分
-
查看全部評分
|