這是剛接觸串口一些心得體會:輪詢方式將接收函數放在while循環中,每次循環cpu主動詢問并判斷是否有數據接收,接收占用CPU資源較多,所以一般使用串口中斷方式接收數據,串口接收到數據后觸發中斷,cpu被打斷,中斷當前任務去處理接收的數據。個人理解輪詢和中斷最大區別就是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,"關燈")==0)
- {
- LED1_OFF;
- LED2_OFF;
- LED3_OFF;
- LED4_OFF;
- printf("主人,已為您燈關\r\n");
- }
- else if (strcmp((char*)buf,"啟動蜂鳴器")==0)
- {
- BEEP_ON;
- printf("回稟大人,蜂鳴器已響\r\n");
- }
- else if (strcmp((char*)buf,"關閉蜂鳴器")==0)
- {
- BEEP_OFF;
- printf("回稟大人,蜂鳴器已關\r\n");
- }
- }
- }
復制代碼
全部程序51hei下載地址:
USART串口中斷.7z
(292.74 KB, 下載次數: 20)
2021-2-5 15:20 上傳
點擊文件名下載附件
USART(輪詢法接收數據).7z
(299.78 KB, 下載次數: 13)
2021-2-5 15:20 上傳
點擊文件名下載附件
|