程序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)
|