51单片机串口发送程序修改

51单片机串口发送程序修改,第1张

修改如下:

#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的晶振,会因其误码率过大而导致通信失败。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12411708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存