|
這是剛接觸串口一些心得體會:輪詢方式將接收函數(shù)放在while循環(huán)中,每次循環(huán)cpu主動詢問并判斷是否有數(shù)據(jù)接收,接收占用CPU資源較多,所以一般使用串口中斷方式接收數(shù)據(jù),串口接收到數(shù)據(jù)后觸發(fā)中斷,cpu被打斷,中斷當(dāng)前任務(wù)去處理接收的數(shù)據(jù)。個人理解輪詢和中斷最大區(qū)別就是cpu主動和被動請求,如果大家還有其他理解,歡迎提出
單片機源程序如下:
- #include "led.h"
- #include "key.h"
- #include "usart.h"
- #include "systick.h"
- #include "beep.h"
- int main(void)
- {
- u8 buf[50];
- LED_Init(); //LED初始化
- KEY_Init(); //按鍵初始化
- BEEP_Init(); //蜂鳴器初始化
- USART1_Init(9600);//串口1初始化
- while(1)
- {
- USART1_ReceString(buf);
- printf("%s\r\n",buf);
- if(strcmp((char*)buf,"開燈")==0)
- {
- LED1_ON;
- LED2_ON;
- LED3_ON;
- LED4_ON;
- printf("主人,已為您開燈\r\n");
- }
- else if (strcmp((char*)buf,"關(guān)燈")==0)
- {
- LED1_OFF;
- LED2_OFF;
- LED3_OFF;
- LED4_OFF;
- printf("主人,已為您燈關(guān)\r\n");
- }
- else if (strcmp((char*)buf,"啟動蜂鳴器")==0)
- {
- BEEP_ON;
- printf("回稟大人,蜂鳴器已響\r\n");
- }
- else if (strcmp((char*)buf,"關(guān)閉蜂鳴器")==0)
- {
- BEEP_OFF;
- printf("回稟大人,蜂鳴器已關(guān)\r\n");
- }
- }
- }
復(fù)制代碼
全部程序51hei下載地址:
USART串口中斷.7z
(292.74 KB, 下載次數(shù): 20)
2021-2-5 15:20 上傳
點擊文件名下載附件
USART(輪詢法接收數(shù)據(jù)).7z
(299.78 KB, 下載次數(shù): 13)
2021-2-5 15:20 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|