这是刚接触串口一些心得体会:轮询方式将接收函数放在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)
USART(轮询法接收数据).7z
(299.78 KB, 下载次数: 13)
|