单片机 串口采用中断服务收发数据
程序员文章站
2022-03-04 15:04:57
下图中左边的单片机用串口接收数据,用C语言编程,实现将接收的数值送到数码管进行实时显示(接收数据范围为0~9)。(1) 已知晶振频率=11.0592MHz;(2) 要求配置串口工作在异步方式,8位数据位,波特率=2400;(3) 必须用中断服务程序对接收数据进行处理并驱动显示,主程序中的后台循环while应为空。//发送#include sbit button =P1^0;void delay(unsigned int n);char cnt...
下图中左边的单片机用串口接收数据,用C语言编程,实现将接收的数值送到数码管进行实时显示(接收数据范围为0~9)。
(1) 已知晶振频率=11.0592MHz;
(2) 要求配置串口工作在异步方式,8位数据位,波特率=2400;
(3) 必须用中断服务程序对接收数据进行处理并驱动显示,主程序中的后台循环while应为空。
//发送 #include <reg51.h> sbit button =P1^0; void delay(unsigned int n); char cnt=0; void inter (void) interrupt 4 { TI=0; delay(100); SBUF=cnt++; if(cnt>9) cnt=0; } void main(void) { TMOD =0x20; TH1=0xf4;//256-(11059200/2400/32/12)=244 TL1=0xf4; TR1=1; ES=1;//打开串口中断开关 EA=1;//打开中断总开关 SCON=0x50; PCON=0x00; SBUF=cnt++;//要先发送一帧才会产生中断 while(1) { ; } } void delay(unsigned int n) { unsigned int cnt; for(;n>0;n--) { for(cnt=0;cnt<1000;cnt++); } } //接收 #include <reg51.h> sbit led=P1^0; sfr display=0x80; char led_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void inter (void) interrupt 4 { char serial_byte; serial_byte=SBUF; P0=led_mod[serial_byte]; RI=0; } void main(void) { TMOD=0x20; TH1=0xf4; TL1=0xf4; TR1=1; EA=1;//打开中断总开关 ES=1;//打开串口中断开关 SCON=0x50; PCON=0x00; while(1) { ; } }
本文地址:https://blog.csdn.net/qq_45653763/article/details/107907667