串口通信问题,有接收没显示。请高手指点
小弟初学单片机,想用AT89C51和计算机通信。程序用c语言,用keil软件仿真正常。但烧到单片机中与计算机通信时,串口调试助手显示有收到数据,但在接收区里没有示。请高手指点。程序想实现功能:P3.2,P3.3接K1,K2。当K1按下时发送0X31,当K2按下时发送0X50。P1接8个灯,当接到不同数据是亮不同的等。程序如下:
#include "reg51.h"
#include "string.h"
#define uchar unsigned char
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P00=P0^0;
void SendData(uchar Dat)
{SBUF=Dat;
while(!TI);
TI=0;
}
void mDelay(unsigned int DelayTime) //延时
{unsigned char j=0;
for(;DelayTime> 0;DelayTime--)
{for(j=0;j <125;j++)
{;}
}
}
uchar Key()
{uchar Kvalue;
P3|=0x3e; //中间4位置高电平
if((Kvalue=P3|0xe3)!=0xff)
{ mDelay(10);
if((Kvalue=P3|0xe3)!=0xff)
{ for(;;)
if((P3|0xe3)==0xff)
return(Kvalue);
}
}
return(0);
}
void Serial() interrupt 4
{if(RI)
{unsigned char ch;
ch=SBUF;
switch(ch)
{case 0x31:P10=0;
mDelay(3000);
P10=1;
break;
case 0x32:P11=0;
mDelay(3000);
P11=1;
break;
case 0x33:P12=0;
mDelay(3000);
P12=1;
break;
case 0x34:P13=0;
mDelay(3000);
P13=1;
break;
case 0x35:P14=0;
mDelay(3000);
P14=1;
break;
case 0x36:P15=0;
mDelay(3000);
P15=1;
break;
case 0x37:P16=0;
mDelay(3000);
P16=1;
break;
case 0x38:P17=0;
mDelay(3000);
P17=1;
break;
case 0x39:P00=0;
mDelay(3000);
P00=1;
break;
}
RI=0;
}
}
void main()
{uchar Keyvalue;
P1=0xff;
SCON=0x50;
TMOD=0x20;
TCON=0x40;
TH1=0xfd;
TL1=0xfd;
PCON=0x80;
RI=0;
TI=0;
TR1=1;
EA=1;
ES=1;
REN=1;
for(;;)
{if(Keyvalue=Key())
{if((Keyvalue|0xfb)!=0xff) //k1按下
SendData(0x31);
if((Keyvalue|0xf7)!=0xff) //k2按下
SendData(0x50);
}
}
}
发表时间:2006年5月6日12:22:07