单片机串口通信,上位机发送一串字符,单片机判断字符串 是否相符如果相符就点亮一个LED灯。最好能有实例

如题所述

第1个回答  2013-03-18
看你也是新手,也没有分,花5分钟给你写一个参考程序,自己慢慢研究,这个程序你可以直接拿去用。
#include "REG52.H"
unsigned char MAIN_FLG;
unsigned char MAIN_BUF;
unsigned char Cverrput[5]; //温度显示数组
/*
* 配置USART串口波特率初始化
*/
void SysemInit(void)
{
TMOD = 0x20;
TH1 = 0xFD; //定时器装入初值9600波特率
TL1 = 0xFD;
TR1 = 1; //启动定时器
REN = 1; //REN = 1允许串口接收数据否则停止接收
SM0 = 0; //模式选择
SM1 = 1; //模式选择 SM0 = 0; SM1 = 1; 10位异步收发8位数据
ES = 1; //开启串口中断
EA = 1; //开启总中断
}

/*
* 程序主函数
*/
int main(void)
{
SysemInit();

while(1)
{
switch (MAIN_BUF)
{
case 0xAA: //接收数据符合点亮LED1
P1 = 0xFE;
break;

case 0xBB:
P1 = 0xFD; //接收数据符合点亮LED2
break;

case 0xDD:
P1 = 0xFB; //接收数据符合点亮LED1
break;

case 0xCC:
P1 = 0xFB; //接收数据符合点亮LED1
break;

default:P1 = 0xFF; //接收数据不符合关闭所有LED
break;
}

}
}

/*
* 串口中断服务程序,单片机开启串口中断
*/
void USART_TI(void) interrupt 4
{
while(RI == 1) //判断接收标志,如果有数据接收RI被置位
{
MAIN_BUF = SBUF; //下位机把接收到上位机数据赋值给MAIN_BUF变量
RI = 0; //RI被硬件置位必须软件清除标志
}
}本回答被提问者采纳

请问单片机串行口同信中,若从上位机向单片机发送一字符串,单片机如何...
单片机接收数据,无论是中断接收,还是查询接收,通常都是根据接收标志位,来判断接收一个字节。写程序之前,都会根据接收数据长度建立一个接收数组,比如根据协议,应该接收25个字节,那就建立一个大于等于25个字节的数组,根据判断条件(可以根据长度判断,可以根据特定字节判断),完成25个字节的接收后,再...

利用LabVIEW的串口通信,为什么上位机发送一个字符串,而单片机只接收到前...
我做过labvIEW的编程,我做的是USB通讯,首先你可以用串口调试助手发送一串字符,看下位机是否接收正常,如果不正常,那么就一定是你的程序出错;如果一切正常,那么你再看labvIEW的发送命令程序,因为发送的时候应该是字符串格式(看你的描述),那么你要确定字符串的长度,如果有buffer的话还要确定它的长...

单片机串口通信时,当发送第一串字符时第一个字符总会显示两次,以后就正 ...
在while发送数据那里,发送函数之后加个break;你这种情况有可能是第一次发送硬件跟不上,标志位来不及改变,导致第一开始那个字节多进一次while,然后再发一次。

求单片机串口通信协议,做设计要求:上位机通过串口实现点亮和灭3盏LE...
void Uart_SendChar(unsigned char dat){ SBUF = dat; \/\/待发送的数据写入缓冲区 while(!TI); \/\/等待发送完成 TI = 0; \/\/清零发送标志位 } \/*---*\/ \/\/串口发送一个字符串 void Uart_SendString(){ uchar i=0;while(trdata[i]!=0x00){ SBUF=trdata[i];while(!TI);TI=0;i++...

飞思卡尔HC08单片机不断向上位机发送数据停不下来,串口助手写入不进去...
好像是单片机没有收到反馈信号,是通讯线路问题还是协议问题只能自己查了。

如何在串口中接收一个字符串
在51单片机中,我们使用上下位机时,我们通常会发送一串字符串,将它作为信号发给单片机处理。因为串口通信时,发送信息是以一个个字符的形式发送过来的,所以接收的就是一个个字符,通常我们是一个字符数组保存,在进行下一步处理,同时字符数组长度固定有限,但是如果上位机发送的字符不满足我们想要处理的...

单片机与上位机进行串口通信,pc连续给单片机发oxbb直到收到0xaa,单片...
代码没写好嘛,当你的单片机接收到0xbb,发送一个0xaa给PC,这时应该清除你的单片机接收缓存,不然单片机接收的缓存一直是0xbb,当上位机还没接收代码的时候,单片机接收到0xbb的这个语句一直在执行嘛,单片机里代码执行了2遍了嘛。上位机的代码也是如此。看的懂?一句话就是应该用了就清除缓存。

假设51单片机要接收一个上位机发送的字符串012345,要怎么样才可以判断这...
参考:http:\/\/hi.baidu.com\/do_sermon\/item\/c2db620200031af4a110340b

串口通讯,上位机每正常发送10次,单片机正常接收一次
程序好像没有什么问题 看看上位机每帧是不是多发了2两个数,即每帧22个字节

上位机与单片机串口通信控制继电器
单片机串口通讯通常是这样的:设备上电-关闭所有中断-配置串口参数-开中断-进入主循环 当串口有信息传来时会触发串口接收中断,因此要编写接收中断函数,对接收寄存器读操作,对读出的数据进行处理-清空接收寄存器同时再打开中断 你的 if udr=0000001 什么的是不行的,应该这样 int temp; temp=udr; if...

相似回答