51单片机串口发送程序修改
发布网友
发布时间:2022-04-20 04:00
我来回答
共1个回答
热心网友
时间:2022-06-01 21:02
展开3全部修改如下:
#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--);
}
}
}