我写了一个串口通信的程序,里面有数码管显示数字和串口收发程序,其中数码管显示逐个数字测试过,都没问题,串口收发在串口调试助手上接收到单片机回发的数字是对的,但是:::我把该数字在单片机数码管上显示出来确是错的~~是我十分费解啊~~各位高手帮帮忙啊,程序如下
#include <REG52.H>
#include <intrins.h>
#define NOP() _nop_() /* 定义空指令 */
void delay(unsigned int i); //函数声名
void display(unsigned int i);
// 此表为 LED 的字模
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
sbit BEEP = P1^4;
bit Flag;
unsigned int ReData,SenData;
//void delay(void);
void main (void) {
P2 = 2 ;
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD = 0x20; //定时器工作方式2
PCON = 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
BEEP=1;
// IE = 0x0;
while(1)
{
if (Flag==1)
{
SBUF=SenData; //SUBF接受/发送缓冲器
while(TI==0);
TI=0;
Flag=0;
}
display(SenData);
}
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SenData=ReData;
display(SenData);
Flag=1;
}
}
void display(unsigned char i){
unsigned int LedNumVal=1 ,C ; //定义变量
unsigned int j = 10;
while(j--)
{
// 将字模送到P0口显示
P0 = LED7Code[i%10]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
delay(150); //调用延时程序
}
} |