标题:
一个51单片机发送字符串程序
[打印本页]
作者:
759098270
时间:
2018-7-6 21:48
标题:
一个51单片机发送字符串程序
当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--);
}
}
}
作者:
yousunny
时间:
2018-7-6 23:53
这个上电不发送,可以实现的,你别打开串口中断先。加一点延时试一下,
unsigned char i;
P0=0x00;
UsartConfiguration();
作者:
lzts88
时间:
2018-7-7 16:14
本帖最后由 lzts88 于 2018-7-8 11:12 编辑
加一个发送标志(发F_b), 上电置F_b=1(已发)。然后
if(shuru) {if(!F_b){发送b; F_b = 1;} //高电平只发一次
else {发送a; F_b = 0;} //低电平循环发
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1