这也是一次单片机练习,我是根据课上讲的仿照写的,但是出错了,不清楚出错点,请各位大佬给指点指点。
要求:计算机发送数据0x00~0x0F,一次发送一个数据,单片机接收后在1位共阳数码管上显示,并返回计算机一个信息,例如接收到0x00,返回一个0x80,接收0x01,返回0x81
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char//宏定义非整型字符
#define uint unsigned int//宏定义整型字符
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管0~16段码
uchar code sendbuf[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
0x8A,0x8B,0x8C,0x8D,0X8E,0X8F};//单片机返回数字
uchar dat;
void delay(uint a);
void uart();
void send(uchar byte);
/****主函数*****/
void main()
{ uart();
while(1);
}
/*****串口方式初始化*******/
void uart()
{ SCON=0x50;//串口方式一,允许接收
PCON=0x80; //波特率加倍
TMOD=0x20; //T1定时方式2
TH1=0xf3;
TL1=0xf3;//4800b/s
TR1=1;
ES=1;
EA=1;
}
/******中断服务函数*****/
void rf()interrupt 4
{ RI=0;
dat=SBUF;
switch(dat)
{case 0x00: SBUF=sendbuf[0]; P2=seg[0];break;
case 0x01: SBUF=sendbuf[1]; P2=seg[1];break;
default:break;
}
}
|