|
最近空閑時(shí)間教幾個(gè)小師弟時(shí)寫的例子,用到了串口協(xié)議解析,狀態(tài)機(jī)。僅限于入門萌新,大牛請(qǐng)給意見~
所有資料51hei提供下載:
單片機(jī)返回字符.rar
(19.41 KB, 下載次數(shù): 59)
2017-12-30 15:05 上傳
點(diǎn)擊文件名下載附件
關(guān)于串口的幾個(gè)例子。 下載積分: 黑幣 -5
串口接收數(shù)據(jù)(幀頭 數(shù)據(jù)長(zhǎng)度 數(shù)據(jù) 幀尾部) .rar
(43.67 KB, 下載次數(shù): 87)
2017-12-30 15:05 上傳
點(diǎn)擊文件名下載附件
關(guān)于串口的幾個(gè)例子。 下載積分: 黑幣 -5
串口接收數(shù)據(jù)(幀頭 數(shù)據(jù) 幀尾部)可自動(dòng)下載2.rar
(48.87 KB, 下載次數(shù): 96)
2017-12-30 15:05 上傳
點(diǎn)擊文件名下載附件
關(guān)于串口的幾個(gè)例子。 下載積分: 黑幣 -5
0.png (8.16 KB, 下載次數(shù): 64)
下載附件
2017-12-31 00:07 上傳
單片機(jī)源程序如下:
- #include "cmmu.h"
- uchar COM_State = FIND_HEADER;
- uchar UART_Recv_BUF[UART_BUF_LEN]; //串口數(shù)據(jù)緩沖區(qū)
- 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;
- }
- }
- /*串口中斷接收程序,幀頭幀尾判斷,固定數(shù)據(jù)長(zhǎng)度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;
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|