1定时器中断方法 (完整代码在文末!!)
2.定时的方法(推荐):蓝桥杯单片机第十四届第三次模拟题_让我来瞅一瞅的博客-CSDN博客
- 定时器0——定时功能
判断接受数据是否完成
- 定时器1——串口功能
接受、发送数据
一、主机接收下位机(client)-———发送的字符、字符串
//====================接受函数===================================
void ServiceUart() interrupt 4
{
if(RI==1)
{
RI=0;
client[R_I++]=SBUF;
}
}
二、定时器0定时、判断数据是否完成接受
if(TF0==1) //10ms溢出接受字符、字符串完成
{
TF0=0;
if(R_I !=6) //R_I计数超过或者少于6 “return”
{
for(i=0;i<7;i++)
client[i++]=0; //数组置0
}
}
三、判断接受到的字符、字符串
if((client[0]=='r')&&(client[1]=='e')&&(client[2]=='t')&&(client[3]=='u')&& (client[4]=='r')&&(client[5]=='n'))
{
Sendstring("点赞收藏老穆雷\r\n"); } //向下位机发送字符串
}
完整代码
#include <STC15F2K60S2.H>
unsigned char client[6]; //接受数据的数组长度为6 "return"
unsigned char R_I=0; //接受计数{接受到了第几个}
unsigned char clientflag=0; //接受字符完成标志
unsigned char i;
//====================初始化函数===========================
void Timer0Init() //10ms@12.000MHz(没有中断、只定时溢出、16位不自动重装)
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xF0; //设置定时初始值
TH0 = 0xD8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void Inituart()//串口1定时器1,16位自动重装
{
Timer0Init();
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xE6; //设定定时初值
TH1 = 0xFF; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA=1;ES=1;
}
//=======================发送函数=============================
void SendByte(unsigned char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void Sendstring( unsigned char *str)
{
while(*str !='\0')
{
SendByte(*str++);
}
}
//====================接受函数===================================
void ServiceUart() interrupt 4
{
if(RI==1)
{
RI=0;
client[R_I++]=SBUF;
}
}
//==================主函数===================================
void main()
{
Inituart();
Timer0Init();
while(1)
{
if(TF0==1) //10ms溢出接受字符、字符串完成
{
TF0=0;
if(R_I !=6) //R_I计数超过或者少于6 “return”
{
for(i=0;i<7;i++)
client[i++]=0; //数组置0
}
else //R_I计数刚好等于6
{
client[R_I]='\0'; //在return第6位放置‘\0’表示字符串结束
if((client[0]=='r')&&(client[1]=='e')&&(client[2]=='t')&&(client[3]=='u')&&
(client[4]=='r')&&(client[5]=='n')) //判断接受的字符串
{
Sendstring("点赞收藏老穆雷\r\n"); } //向下位机发送字符串
}
R_I=0; //计数置0
}
}
}
常见问题
1.接受、发送 均为文本模式
2.直接发送数据
3.怎么判断下位机发出的回车
if((client[0]=='\r') '\r'为回车
4.怎么判断单个字符
unsigned char client[6]; //接受数据的数组”return为6个字符
数组位置为 0、1、2、3、4、5、6“ "第6位放置‘\0’表示字符串结束
unsigned char client[1]; //接受数据的数组”为1个字符
数组位置为 0、1“ "第1位放置‘\0’表示字符接受
5.下位机的命令需要区分大小写
5.常见题型
文章来源:https://www.toymoban.com/news/detail-415976.html
文章来源地址https://www.toymoban.com/news/detail-415976.html
到了这里,关于蓝桥杯单片机 ——接收字符、字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!