當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--);
}
}
}
|