- #include "usart.h"
- #include "io.h"
-
-
- u8 Rec_Dat[50]; //接收缓冲区
- u8 Rec_Num = 0; //接收计数
- bit B_TX2_Busy=0;
- void Uart2_Isr(void) interrupt 8
- {
- if (S2CON & 0x02) //检测串口2发送中断
- {
- S2CON &= ~0x02; //清除串口2发送中断请求位
- B_TX2_Busy = 0;
- }
- if (S2CON & 0x01) //检测串口2接收中断
- {
- S2CON &= ~0x01; //清除串口2接收中断请求位
-
- //S2BUF
- Rec_Dat[Rec_Num++] = S2BUF;
- }
- }
-
-
- void Uart2_Init(void) //9600bps@24.000MHz
- {
- //UART2/USART2: RxD2(P4.2), TxD2(P4.3)
-
- P_SW2 |= 0x01; //UART2/USART2: RxD2(P4.2), TxD2(P4.3)
-
- S2CON = 0x50; //8位数据,可变波特率
- AUXR |= 0x04; //定时器时钟1T模式
- T2L = 0x8F; //设置定时初始值
- T2H = 0xFD; //设置定时初始值
- AUXR |= 0x10; //定时器2开始计时
- IE2 |= 0x01; //使能串口2中断
-
- Rec_Num = 0;
- B_TX2_Busy = 0;
- }
-
- void Uart2_SendStr( u8 *puts ) //串口数据发送函数
- {
- for (; *puts != 0; puts++) //遇到停止符0结束
- {
- S2BUF = *puts;
- B_TX2_Busy = 1;
- while(B_TX2_Busy);
- }
- }
-
- //1.发送OPEN\r\n打开数码管,数码管显示“- - - -” 11 22 OPEN\r\n
- //2.发送CLOSE\r\n打开数码管,数码管全部熄灭
-
-
- void Usart2_RunTask(void)
- {
- if( Rec_Num >= 6 ) //是否接收到了6位以上的数据
- {
- if(( Rec_Dat[Rec_Num-1] == '\n' ) && ( Rec_Dat[Rec_Num-2] == '\r' ) ) //末尾判断
- {
- if( ( Rec_Dat[Rec_Num-6] == 'O' ) && ( Rec_Dat[Rec_Num-5] == 'P' ) && ( Rec_Dat[Rec_Num-4] == 'E' ) && ( Rec_Dat[Rec_Num-3] == 'N' ) )
- {
- passward[0] = 16;
- passward[1] = 16;
- passward[2] = 16;
- passward[3] = 16;
- Uart2_SendStr( "打开成功!\r\n" );
- }
- else if( ( Rec_Dat[Rec_Num-7] == 'C' ) && ( Rec_Dat[Rec_Num-6] == 'L' ) && ( Rec_Dat[Rec_Num-5] == 'O' ) && ( Rec_Dat[Rec_Num-4] == 'S' ) && ( Rec_Dat[Rec_Num-3] == 'E' ) )
- {
- passward[0] = 17;
- passward[1] = 17;
- passward[2] = 17;
- passward[3] = 17;
- Uart2_SendStr( "关闭成功!\r\n" );
- }
- Rec_Num = 0;
- }
- }
- }
-
复制代码
关键程序: |