程序9600波特率 下 STC單片機雙串口通訊發基礎程序,程序內容,各自中斷接收,中斷轉發接收到的數據。需要兩個串口同時工作的可以用的上。
單片機源程序如下:
-
- /*-----------------------------------------------
- 名稱:STC12C5A60S2雙串口通信
- 編寫:Nico
- 日期:2009.5
- 修改:無
- 內容:9600波特率 雙串口收發
- 接線:串口1 發送P3.1,接收P3.0
- 串口2 發送P1.3,接收P1.2
- ------------------------------------------------*/
- #include"stc12c5a60s2.h"
- #include"delay.h"
- #define S2RI 0x01 //串口2接收中斷中斷請求標志位
- #define S2TI 0x02 //串口2發送中斷請求標志位
- unsigned char flag1,flag2,temp1,temp2;
- unsigned char uart2Receive[100];
- unsigned char uart1Receive[100];
- unsigned int point1=0,point2=0;
- unsigned char i;
- /*------------------------------------------------
- 函數聲明
- ------------------------------------------------*/
- //void SendStr(unsigned char *s);
- void UART_1SendOneByte(unsigned char c);
- void UART_2SendOneByte(unsigned char c);
- void uart1SendStr(unsigned char *s);
- void uart2SendStr(unsigned char *s);
- /*------------------------------------------------
- 串口初始化
- ------------------------------------------------*/
- void InitUART (void)
- {
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重裝
- TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
- TR1 = 1; // TR1: timer 1 打開
- EA = 1; //打開總中斷
- ES = 1; //打開串口中斷
-
- S2CON = 0x50; //
- BRT = 0xFD; // 9600
- AUXR = 0x10; //
- IE2 =0x01; //
- }
- /*------------------------------------------------
- 主函數
- ------------------------------------------------*/
- void main (void)
- {
- InitUART();
- DelayMs(100);
- uart1SendStr("串口1初始化成功");
- DelayMs(100);
- uart2SendStr("串口2初始化成功");
- while (1)
- {
- if(flag1==1)
- {
- flag1=0;
-
- // uart2SendStr("串口1中斷,串口2發送串口1接收的數據:");
- uart1SendStr(uart1Receive);
- for(i=0;i<=100;i++)
- {
- uart1Receive[i]=0;
- }
- }
- if(flag2==1)
- {
- flag2=0;
- // uart1SendStr("串口2中斷,串口1發送串口2接收的數據:");
- uart2SendStr(uart2Receive);
- for(i=0;i<=100;i++)
- {
- uart2Receive[i]=0;
- }
- }
- }
- }
- /*------------------------------------------------
- 1發送字符串
- ------------------------------------------------*/
- void uart1SendStr(unsigned char *s)
- {
- while(*s!='\0')// \0 表示字符串結束標志,
- //通過檢測是否字符串末尾
- {
- UART_1SendOneByte(*s);
- s++;
- }
- }
- /*------------------------------------------------
- 2發送字符串
- ------------------------------------------------*/
- void uart2SendStr(unsigned char *s)
- {
- while(*s!='\0')// \0 表示字符串結束標志,
- //通過檢測是否字符串末尾
- {
- UART_2SendOneByte(*s);
- s++;
- }
- }
- 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
- }
- /************串口1中斷函數*************/
- void UART_1Interrupt(void) interrupt 4
- {
- if(RI==1)
- {
- RI=0;
- flag1=1;
- temp1=SBUF;
- uart1Receive[point1++]=temp1;
- if(temp1=='\n')
- {
- flag1=1;
- point1=0;
- }
- if(point1==100)
- {
- point1=0;
- }
- }
- }
- /************串口2中斷函數*************/
- void UART_2Interrupt(void) interrupt 8
- {
- EA = 0; //打開總中斷
- if(S2CON&S2RI)
- {
- S2CON&=~S2RI;
- temp2=S2BUF;
- uart2Receive[point2++]=temp2;
- if(temp2=='\n')
- {
- point2=0;
- flag2=1;
- }
- if(point2==100)
- {
- point2=0;
- }
- }
- EA = 1; //打開總中斷
- }
復制代碼
以上資料51hei提供下載:
12C5a60s2雙串口通訊.rar
(50.5 KB, 下載次數: 196)
2020-3-19 18:05 上傳
點擊文件名下載附件
雙串口程序下載 下載積分: 黑幣 -5
|