下图中左边的单片机用串口接收数据,用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)
{
;
}
}