這也是一次單片機練習,我是根據課上講的仿照寫的,但是出錯了,不清楚出錯點,請各位大佬給指點指點。
要求:計算機發送數據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;
}
}
|