最近空閑時間教幾個小師弟時寫的例子,用到了串口協議解析,狀態機。僅限于入門萌新,大牛請給意見~
所有資料51hei提供下載:
單片機返回字符.rar
(19.41 KB, 下載次數: 59)
2017-12-30 15:05 上傳
點擊文件名下載附件
關于串口的幾個例子。 下載積分: 黑幣 -5
串口接收數據(幀頭 數據長度 數據 幀尾部) .rar
(43.67 KB, 下載次數: 87)
2017-12-30 15:05 上傳
點擊文件名下載附件
關于串口的幾個例子。 下載積分: 黑幣 -5
串口接收數據(幀頭 數據 幀尾部)可自動下載2.rar
(48.87 KB, 下載次數: 96)
2017-12-30 15:05 上傳
點擊文件名下載附件
關于串口的幾個例子。 下載積分: 黑幣 -5
0.png (8.16 KB, 下載次數: 64)
下載附件
2017-12-31 00:07 上傳
單片機源程序如下:
- #include "cmmu.h"
- uchar COM_State = FIND_HEADER;
- uchar UART_Recv_BUF[UART_BUF_LEN]; //串口數據緩沖區
- uchar UART_Recv_Count;
- bit UART_Overflow_Flag = 0;
- void CMD_Init(void)
- {
- UartInit();
- }
- void CMD_Send(void)
- {
- uchar i;
- if(UART_Overflow_Flag)
- {
- // UART_Send_Byte(COMMAND_HEADER);
- for (i=0; i<UART_BUF_LEN; i++)
- {
- UART_Send_Byte(UART_Recv_BUF[i]);
- UART_Recv_BUF[i] =0;
- }
- UART_Send_Byte(COMMAND_FRAME);
- // UART_Overflow_Flag = 0;
- }
- }
- /*串口中斷接收程序,幀頭幀尾判斷,固定數據長度UART_BUF_LEN*/
- void UART_Int(void) interrupt INT_UART1
- {
- if (RI)
- {
- RI = 0;
- if (!UART_Overflow_Flag)
- {
- Check_DownLoda_Data(SBUF);
- switch(COM_State)
- {
-
- case FIND_HEADER :
- UART_Recv_Count=0;
- if(SBUF == COMMAND_HEADER)
- {
- COM_State = GETTING_DATA;
- }
- break;
-
- case GETTING_DATA:
- UART_Recv_BUF[UART_Recv_Count++] = SBUF;
- if (UART_Recv_Count==(UART_BUF_LEN))
- {
- COM_State = FIND_FRAME;
- }
- break;
- case FIND_FRAME:
- if(SBUF == COMMAND_FRAME)
- {
- UART_Overflow_Flag=1;
- }
- COM_State = FIND_HEADER;
- break;
- default:
- COM_State = FIND_HEADER;
- break;
-
- }
- }
- }
- if (TI)
- {
- TI = 0;
- }
- }
復制代碼
|