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

当P1为高电平串口发送字符串b,低电平发送a。现在要求当接受高低电平信号后只发送一次字符串就停止。等待下次再接收到信号再发送。还有消除单片机上电高电平的影响,就是单片机上... 当P1为高电平串口发送字符串b,低电平发送a。现在要求当接受高低电平信号后只发送一次字符串就停止。等待下次再接收到信号再发送。还有消除单片机上电高电平的影响,就是单片机上电的时候不发送b。程序应该怎样改。
#include<reg52.h>
sbit shuru=P1^0;
unsigned char PuZh[16] = "a";
unsigned char BuZh[16] = "b";
void UsartConfiguration();
void Delay10ms(unsigned int c); //误差 0us
void main()
{
unsigned char i;
UsartConfiguration();
while(1)
{
if(shuru==0)
{
for(i=0; i<16; i++)
{
SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
TR1 = 0;
ES = 0;
EA = 0;
}
Delay10ms(500); //延时一下再发
}
else
for(i=0; i<16; i++)
{
SBUF = BuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
TR1 = 0;
ES = 0;
EA = 0;
}
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>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
展开
 我来答
专注51单片机
2018-07-06 · TA获得超过809个赞
知道小有建树答主
回答量:1150
采纳率:58%
帮助的人:226万
展开全部
修改如下:
#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>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);


}
更多追问追答
追问
first.c(51): error C141: syntax error near 'void'
first.c(52): error C141: syntax error near '{'
first.c(62): error C141: syntax error near 'void'
有错误
追答
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); //延时一下再发   
     }
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式