#include<reg52.h>
sbit shuru=P1^0
unsigned char PuZh[16] = "a"
unsigned char BuZh[16] = "b"
bit flaga=0,flagb=0
void UsartConfiguration()
void Delay10ms(unsigned int c) //误差 0us
void main()
{
unsigned char i
UsartConfiguration()
while(1)
{
if(shuru==0 && flaga==0)
{
凳备 for(i=0 i<16 i++)
{
SBUF = PuZh[i] //将要发送的数据放入到发送寄存器
while(!TI) //等待薯掘发送数据完成
TI=0 //清除发送完成标志位
TR1 = 0
ES = 0
EA = 0
}
flaga=1
flagb=0
Delay10ms(500) //延时一下再发
}
else if(shuru==1 && flagb==0)
{
for(i=0 i<16 i++)
{
SBUF = BuZh[i] //将要发送的数据放入到发送寄存器
while(!TI) //等待发送数据完成
TI=0 //清除发送完成标志位
TR1 = 0
ES = 0
EA = 0
}
flaga=0
flagb=1
Delay10ms(500) //延时一下再发
}
}
/*******************************************************************************
* 函 数 名 :UsartConfiguration()
* 函数功能 :设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50 //设置为工作方式1
TMOD=0X20 //设置计数器工作方式2
PCON=0X80 //波特率加倍
TH1=0XFA //计数器初始值设置,注意波特率是4800的
TL1=0XFA
// ES=1 //打开接收中断
// EA=1 //打开枣手毁总中断
TR1=1 //打开计数器
}
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b
for (c>0c--)
{
for (b=38b>0b--)
{
for (a=130a>0a--)
}
}
}
按你这程序,那只能是把:SBUF=receiveData;
while(!TI)
修改成:
SBUF='O'
while(!TI)
SBUF='K'
while(!TI)
如果一定要指定接收‘Y’,那就在这4条语句外括上if条件山滚,if(receiveData=='Y'){xxxxx}
不过本人建议你不要这么搞,这个while(!TI)是潜在死循环,也是N多串口通信导致死机的起因,它可能导逗逗余致系统其他任务无法执行,出现所谓“死机指掘”现象。
另外,标准51单片机,9600bps,其晶振必定得使用非整数晶振,如11.0592MHz。用 12MHz的晶振,会因其误码率过大而导致通信失败。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)