请教一个51串口通信的程序 麻烦帮满看一下 谢谢~
[复制链接]
两个单片机的收发程序 简单的把两个单片机输入输出口连起来的,调试的时候成功了一次,然后改了一下程序再调试接收端就怎么都接收不到数据了。。11.0592晶振,9600波特率
发送:
#include
#define uchar unsigned char
#define uint unsigned int
uchar key=123;
void ultra_init(void)
{
TMOD=0X20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1;
SCON=0x40; //方式1
ET1=0;
EA=1;
ES=1;
}
void main()
{
ultra_init();
while(1)
{
SBUF=key;
while(!TI)
{}
TI=0;
}// while(1)end
}
接收程序:(前面一段是定义LED显示的 没问题 直接看下面就好)
#include
#define uchar unsigned char
#define uint unsigned int
sbit wei1=P2^0;//位定义数码管用到的片选,高电平有效
sbit wei2=P2^1;
sbit wei3=P2^2;
sbit wei4=P2^3;
sbit wei5=P2^4;
sbit wei6=P3^3;
uchar key;
uchar code table[]=
{0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0x88,0x83,0xc6,0xa1,0x84,0x8e};
//0-f共阳数码管译码
void delay(uint x)//延时子函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=280;j>0;j--);
}
void show(uchar date,uchar wei)//在哪一个(wei)数码管上显示什么数据(date)
{
P0=table[date];
switch(wei)
{
case 1:wei1=1;wei2=0;wei3=0;wei4=0;wei5=0;wei6=0;break;
case 2:wei1=0;wei2=1;wei3=0;wei4=0;wei5=0;wei6=0;break;
case 3:wei1=0;wei2=0;wei3=1;wei4=0;wei5=0;wei6=0;break;
case 4:wei1=0;wei2=0;wei3=0;wei4=1;wei5=0;wei6=0;break;
case 5:wei1=0;wei2=0;wei3=0;wei4=0;wei5=1;wei6=0;break;
case 6:wei1=0;wei2=0;wei3=0;wei4=0;wei5=0;wei6=1;break;
}
}
void init_wei(void)
{
wei1=0;wei2=0;wei3=0;wei4=0;wei5=0;wei6=0;//初始化片选
}
void ultra_init(void)
{
TMOD=0x20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1; //开定时器1
ET1=0;
SCON=0X40;
REN=1; //接受使能
EA=1; //开中断
ES=1; //设置优先级高
}
void main()
{
init_wei();
ultra_init();
while(1)
{
while(!RI)
{
show(key%10,1); //显示各位
delay(1);
init_wei(); //数码管开一段时间,关闭,消除余晖效应,使数码管亮度均匀
show(key/10%10,2); //显示十位
delay(1);
init_wei();
show(key/100%10,3); //显示百位
delay(1);
init_wei();
}
}
}
void serial() interrupt 4
{
key=SBUF;//从接受缓冲器读数据
RI=0;//清楚标志,等待下次引发串行传送数据
}
请高手帮忙看看 有点急 谢谢~