单片机串口接收一串特定字符的程序,用串口调试助手发送命令,可是单片机不回 5

#include"reg52.h"#include"intrins.h"#defineuintunsignedint#defineucharunsignedcharbit... #include "reg52.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
bit flag2;
uchar receive,k;
uchar buf[6],tab[11];
void init();
void wen();
void main()
{
uchar i;
init();
while(1)
{
if(flag2==1)
{
ES=0;
flag2=0;
wen();
SBUF=0X02;
while(!TI);
TI=0;
for(i=0;i<11;i++)
{
SBUF=tab[i];
while(!TI);
TI=0;
}
SBUF=0X03;
while(!TI);
TI=0;
while(1);
ES=1;
}
}
}
void init()
{
TMOD=0X20;
TH1=0XFd;
TL1=0XFd;
SCON=0X50;
PCON=0X00;
ES=1;
EA=1;
TR1=1;
}
void wen()
{
tab[0]=0x32;
tab[1]=0x34;
tab[2]=0x31;
tab[3]=0x30;
tab[4]=0x39;
tab[5]=0x32;
tab[6]=0x34;
tab[7]=0x32;
tab[8]=0x36;
tab[9]=0x37;
tab[10]=tab[0]+tab[1]+tab[2]+tab[3]+tab[4]+tab[5]+tab[6]+tab[7]+tab[8]+tab[9];
}
void rec() interrupt 4
{
bit flag1;
if(RI==1)
{
RI=0;
receive=SBUF;
if(receive==0x02)
{
flag1=1;
}
if(flag1==1)
{
buf[k]=receive;
k++;
if(receive==0X03)
{
flag1=0;
flag2=1;
k=0;
}
}

}
}
不好意思,我只有5分
展开
 我来答
jmhyys
2014-10-22 · TA获得超过524个赞
知道小有建树答主
回答量:1052
采纳率:62%
帮助的人:285万
展开全部
//特定的字符,那就先弄好数据格式
//比如 你要接收4个ASII字符
//那就把帧设计成
//起始符-字节数-有效数据-结束符 等类似这种格式
//起始符一般订为不常用的 ASII 字符 ,结束符号也是比如$,#,@这些
//假设你要发送ASII的1 2 3 4,起始符-$,结束符-@
//那就要发送 $ 4 1 2 3 4 @ 。第一个4就是有效数据的个数。
里面的变量都是要全局变量因为每次进入中断,变量值不应该复位。

bit flag1=0,flag2;
uchar receive,lenth,i,job_flag;
在最开头定义这些变量
//这样你在编程的时候
void Send() interrupt 4
{

if(RI==1)
{
RI=0;
receive=SBUF;
switch(job_flag)
{
case 0:
if(receive=='$')//判断起始符号
{
job_flag=1;
}
break;
case 1: //判断接收数据长度
lenth=receive;
job_flag=2;
break;
case 2: //接收数据
if(i<lenth)//接收数据并保存到buf数组里
{
buf[i]=receive;
i++;
if(i>lenth)//如果接收的有效数据长度超过了说明数据有错误复位接收
{
i=0;
job_flag=0;
}
if(i==lenth)//接收完成,转到接收结束符
{
job_flag=3;
}
}
break;

case 3: //接收数据
if(receive=='@')//判断结束付-复位接收状态
{
i=0;
job_ flag=0;
flag_RI=1;//接收成功标志位
}
break;
default:
i=0;
job_ flag=0;
flag_RI=0;
break;
}

}
if(TI==1)
{
TI=0;
flag_TI=0;
}
}
追问
我用串口调试助手发送02 32 34 31 97 03,还是没有回复
zhongsandaoren
2014-10-22 · TA获得超过298个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:60.3万
展开全部
  1. 确保接收时进入中断了,可以仿真跟踪调试;

  2. 确保没有进入死循环,无法跳出;

  3. 确保接收和发送波特率设置正确,和串口调试助手设置的一致;

  4. 确保硬件正确,如果是RS232的要注意TX和RX没有接反,且一定要接GND线,即TX,RX,GND三根线都要接。

  5. 确保电脑上的串口驱动安装正确了,否则不能识别你的USB转串口线。

追问
谢谢,我再试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式