?1定時器中斷方法 (完整代碼在文末?。。?/strong>
?2.定時的方法(推薦):藍(lán)橋杯單片機(jī)第十四屆第三次模擬題_讓我來瞅一瞅的博客-CSDN博客
- 定時器0——定時功能
? ? ? ?判斷接受數(shù)據(jù)是否完成?
- 定時器1——串口功能
? ? ? ? ? 接受、發(fā)送數(shù)據(jù)
一、主機(jī)接收下位機(jī)(client)-———發(fā)送的字符、字符串
//====================接受函數(shù)===================================
void ServiceUart() interrupt 4
{
if(RI==1)
{
RI=0;
client[R_I++]=SBUF;
}
}
二、定時器0定時、判斷數(shù)據(jù)是否完成接受
if(TF0==1) //10ms溢出接受字符、字符串完成
{
TF0=0;
if(R_I !=6) //R_I計數(shù)超過或者少于6 “return”
{
for(i=0;i<7;i++)
client[i++]=0; //數(shù)組置0
}
}
三、判斷接受到的字符、字符串
if((client[0]=='r')&&(client[1]=='e')&&(client[2]=='t')&&(client[3]=='u')&& (client[4]=='r')&&(client[5]=='n'))
{
Sendstring("點(diǎn)贊收藏老穆雷\r\n"); } //向下位機(jī)發(fā)送字符串
}
?完整代碼
#include <STC15F2K60S2.H>
unsigned char client[6]; //接受數(shù)據(jù)的數(shù)組長度為6 "return"
unsigned char R_I=0; //接受計數(shù){接受到了第幾個}
unsigned char clientflag=0; //接受字符完成標(biāo)志
unsigned char i;
//====================初始化函數(shù)===========================
void Timer0Init() //10ms@12.000MHz(沒有中斷、只定時溢出、16位不自動重裝)
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xF0; //設(shè)置定時器模式
TMOD |= 0x01; //設(shè)置定時器模式
TL0 = 0xF0; //設(shè)置定時初始值
TH0 = 0xD8; //設(shè)置定時初始值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時器0開始計時
}
void Inituart()//串口1定時器1,16位自動重裝
{
Timer0Init();
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR &= 0xBF; //定時器1時鐘為Fosc/12,即12T
AUXR &= 0xFE; //串口1選擇定時器1為波特率發(fā)生器
TMOD &= 0x0F; //設(shè)定定時器1為16位自動重裝方式
TL1 = 0xE6; //設(shè)定定時初值
TH1 = 0xFF; //設(shè)定定時初值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
EA=1;ES=1;
}
//=======================發(fā)送函數(shù)=============================
void SendByte(unsigned char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void Sendstring( unsigned char *str)
{
while(*str !='\0')
{
SendByte(*str++);
}
}
//====================接受函數(shù)===================================
void ServiceUart() interrupt 4
{
if(RI==1)
{
RI=0;
client[R_I++]=SBUF;
}
}
//==================主函數(shù)===================================
void main()
{
Inituart();
Timer0Init();
while(1)
{
if(TF0==1) //10ms溢出接受字符、字符串完成
{
TF0=0;
if(R_I !=6) //R_I計數(shù)超過或者少于6 “return”
{
for(i=0;i<7;i++)
client[i++]=0; //數(shù)組置0
}
else //R_I計數(shù)剛好等于6
{
client[R_I]='\0'; //在return第6位放置‘\0’表示字符串結(jié)束
if((client[0]=='r')&&(client[1]=='e')&&(client[2]=='t')&&(client[3]=='u')&&
(client[4]=='r')&&(client[5]=='n')) //判斷接受的字符串
{
Sendstring("點(diǎn)贊收藏老穆雷\r\n"); } //向下位機(jī)發(fā)送字符串
}
R_I=0; //計數(shù)置0
}
}
}
?
常見問題?
1.接受、發(fā)送 均為文本模式
2.直接發(fā)送數(shù)據(jù)
3.怎么判斷下位機(jī)發(fā)出的回車
?if((client[0]=='\r')? '\r'為回車
4.怎么判斷單個字符
unsigned char client[6]; //接受數(shù)據(jù)的數(shù)組”return為6個字符
數(shù)組位置為 0、1、2、3、4、5、6“ "第6位放置‘\0’表示字符串結(jié)束
unsigned char client[1]; //接受數(shù)據(jù)的數(shù)組”為1個字符
數(shù)組位置為 0、1“ "第1位放置‘\0’表示字符接受
5.下位機(jī)的命令需要區(qū)分大小寫
5.常見題型
文章來源:http://www.zghlxwxcb.cn/news/detail-415976.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-415976.html
到了這里,關(guān)于藍(lán)橋杯單片機(jī) ——接收字符、字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!