標(biāo)題:
一個(gè)51單片機(jī)發(fā)送字符串程序
[打印本頁(yè)]
作者:
759098270
時(shí)間:
2018-7-6 21:48
標(biāo)題:
一個(gè)51單片機(jī)發(fā)送字符串程序
當(dāng)P1為高電平串口發(fā)送字符串b,低電平發(fā)送a。現(xiàn)在要求當(dāng)接受高低電平信號(hào)后只發(fā)送一次字符串就停止。等待下次再接收到信號(hào)再發(fā)送。還有消除單片機(jī)上電高電平的影響,就是單片機(jī)上電的時(shí)候不發(fā)送b。程序應(yīng)該怎樣改。
#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]; //將要發(fā)送的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
TR1 = 0;
ES = 0;
EA = 0;
}
Delay10ms(500); //延時(shí)一下再發(fā)
}
else
for(i=0; i<16; i++)
{
SBUF = BuZh[i]; //將要發(fā)送的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
TR1 = 0;
ES = 0;
EA = 0;
}
Delay10ms(500); //延時(shí)一下再發(fā)
}
}
/*******************************************************************************
* 函 數(shù) 名 :UsartConfiguration()
* 函數(shù)功能 :設(shè)置串口
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XFA; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XFA;
// ES=1; //打開(kāi)接收中斷
// EA=1; //打開(kāi)總中斷
TR1=1; //打開(kāi)計(jì)數(shù)器
}
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
時(shí)間:
2018-7-6 23:53
這個(gè)上電不發(fā)送,可以實(shí)現(xiàn)的,你別打開(kāi)串口中斷先。加一點(diǎn)延時(shí)試一下,
unsigned char i;
P0=0x00;
UsartConfiguration();
作者:
lzts88
時(shí)間:
2018-7-7 16:14
本帖最后由 lzts88 于 2018-7-8 11:12 編輯
加一個(gè)發(fā)送標(biāo)志(發(fā)F_b), 上電置F_b=1(已發(fā))。然后
if(shuru) {if(!F_b){發(fā)送b; F_b = 1;} //高電平只發(fā)一次
else {發(fā)送a; F_b = 0;} //低電平循環(huán)發(fā)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1