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

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-02
串口调试助手向单片机发送一串数字,单片机只显示最后一位,该怎么解决?

你好!!
你每次串口中断的时候都会 uint m=0;
那你 m++ 还有什么意义,把 uint m=0; 拿到中断的外面;中断结束后 m 清零
还有,别用 while 循环,用 if 判断

这是改已有串口属性;
另外,你也可以在设备管理器“通用串行总线控制器下”找到你的USB转232设备,修改它的属性。

//特定的字符,那就先弄好数据格式
//比如 你要接收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;
}
}

  1. 确保接收时进入中断了,可以仿真跟踪调试;

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

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

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

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



  • 单片机串口接收一串特定字符的程序,用串口调试助手发送命令,可是单片机...
    答://比如 你要接收4个ASII字符 //那就把帧设计成 //起始符-字节数-有效数据-结束符 等类似这种格式 //起始符一般订为不常用的 ASII 字符 ,结束符号也是比如$,#,@这些 //假设你要发送ASII的1 2 3 4,起始符-$,结束符- //那就要发送 $ 4 1 2 3 4 @ 。第一个4就是有效数据的个数。
  • 串口通信时 如何让单片机接收以特定字符开头的字符串,比如“a 10 11...
    答:你可以开辟一个缓冲区,Buf[100],做成一个循环队列,串口中断里面接收到一个字符,就往队列里面添加接收到的新字符。主程序里面查询是否连续几个字符为你定义的包头:“a 10 11 12 13 ff ” ,如果是,就开始处理以下的字符。
  • 串口通信时 如何让单片机接收以特定字符开头的字符串,比如“aa 03 11...
    答:break;case 1: *RecBuf++=SBUF; //接收定长字符串。RI=0;if(Length++==LENGTH){接收缓冲处理;return;} } gg是个啥?如果是字符串,增加若干状态。define HEAD1 ‘a'define HEAD2 ‘a'另外,考虑超时重置status为0。
  • 求单片机高手编写一个串口通信接受字符程序,用汇编语言. 急急急...
    答:AJMP URT ;串口中断 ORG 30H MAIN:MOV SP,#60H MOV R0,#50H MOV TMOD,#20H ; T1工作方式2 SETB EA ;开总中断 ACALL URTINIT ;串口初始化 AJMP $ ;等待串口中断 URT: ;串口中断每次只收1 个字节,未完继续进入中断,接收。PUSH ACC JNB RI,URT1 URT0:CLR ES CLR R...
  • 51单片机串口用数组接收字符串程序怎么写?
    答:可以通过顺序判断来识别用if或switch语句来判决即可通过串口中断,每次进入把SBUF的值赋给T,通过判决、累加NUM的值最终取得冒号后面的数值(不知楼主是否是要最后的数值)void UART_Int(void) interrupt 4{static uchar NUM = 0;uchar T;if(RI == 1){RI = 0;T = SBUF;//接收串口数据switch(T...
  • C51单片机如何从PC机串口接收字符串?
    答:ES = 1; //串行接口中断 EA = 1; //系统中断允许 TR0 = 1; //启动定时器0 TR1 = 1;...//串口接收中断处理程序 //发送采用查询处理 void SerialComm(void) interrupt 4 { _pReceive[_cReceive] = SBUF;_cReceive ++;if(_cReceive >= RecBuffSize) _cReceive = 0;RI =...
  • 如何在串口中接收一个字符串
    答:在51单片机中,我们使用上下位机时,我们通常会发送一串字符串,将它作为信号发给单片机处理。因为串口通信时,发送信息是以一个个字符的形式发送过来的,所以接收的就是一个个字符,通常我们是一个字符数组保存,在进行下一步处理,同时字符数组长度固定有限,但是如果上位机发送的字符不满足我们想要处理的...
  • C51单片机如何从PC机串口接收字符串?
    答:1、单片机串口不管从哪接收数据都是遵循串口协议的。字符串就是一个挨一个的ASKII码,中间没有加任何东西。2、不发字符串结束标志。3、回车符可以发送,但具体发不发送看你程序了。
  • 如何用c语言编程实现c51单片机中从串口接收一个字符串?
    答:四位字符,接收 用串口中断 void ck_js() interrupt 4 { unsigned char i;for(i=0;i<4;i++){ while(RI==0);//等待数据接收 RI=0;//手动清零 DAT[i]=SBUF;//接收到的字符存放 } } 多位字符 接收函数 void seri_int() interrupt 4 { count1=0;if(RI){ unsigned ...
  • STC 52 单片机 从串口接收字符串
    答:假设收到的数据存在单片机temp里面。char temp[4] ={'5','1','6','8'};a = (temp[0] - '0') * 10 + (temp[1] - '0');b = (temp[2] - '0') * 10 + (temp[3] - '0');这样就可以了。