用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,但出现勒问题,求大神帮忙

作者&投稿:邴畏 (若有异议请与网页底部的电邮联系)
用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助~

发送函数中,这样写,防止TI还未来得及置为1,就一直在发送,这样写可防止上述情况
#include
#define uint unsigned int
#define uchar unsigned char
sbit D0=P1^0;
uchar flag;
uchar a[30];
uint y, u,c;

/*发送子程序*/
void fasong(uchar dat)
{

ES=0;
SBUF=dat;
while(!TI);
TI=0;
ES=1;
}

/*延时子程序*/
void delay(uint n)
{
uint i,j;
for(i=0;i<n;i++)
{
for(j=0;j<250;j++);
}
}



/*主程序*/
void main()
{

SM0=0;//选择工作方式一
SM1=1;
TR1=1;
REN=1;
TMOD=0X20;//设置定时器1为工作方式2
TH1=0XFD;
TL1=0XFD;//设置波特率为9600
EA=1;//开CPU中断
ES=1;//开串行口中断

delay(1000);
D0=0;
while(1)
{
while(flag)
{
y=0;
while(a[y]!='\0')
{
fasong(a[y]);
a[y]='\0'; //清空字符,方便下次接收
y++;
}
y=0;
flag=0;}
}
}

void jsfs() interrupt 4
{
c=0;
u=1000;
ES=0;
while(u--) //一直接收 直到字符串接收完毕
{
while(RI)
{
a[c]=SBUF;
c++;
RI=0;
u=1000;
}
}
ES=1;
flag=1;
}

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

#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,pget,pput,shu[16];
uint uart;
inits(void)
{ //波特率115200
T2MOD=0x01;
T2CON=0x30;
TH2=0xff;
TL2=0xfd;
RCAP2H=0xff;
RCAP2L=0xfd;
SCON|=0x50;
TR2=1;
EA=ES=1;
}
t1int() interrupt 3
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
uart++;
}
serial() interrupt 4
{
if(RI==1)
{
RI=0;uart=0;
shu[pput]=SBUF;
pput++;
pput&=0x0f;
}
}
main()
{
EA=ET1=TR1=1;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
TMOD=0x10;
pput=pget=0;
inits();
while(1)
{
if(uart>100)
{
if(pput!=pget)
SBUF=shu[pget];
pget++;
pget&=0x0f;
}
}
}

可以先用 proteus 仿真一下


“单片机串口通信,串口助手调试收发都正常,接到一块就不正常”请问您...
但2个单片机合在一起就通信不成功,发送、接受不到数据!很可能是以下原因:1)仔细检查2片单片机的脚,RX TX 交叉接且要共地。2)串口助手通信是采用中断接收触发信号的,反应迅速且准确,你单片机也可采用外部中断作触发,用定时器来读取数据,一般比较迅速准确。3)你可以发送0x55 或 0xAA,这样...

怎么用usb转TTL线给单片机下载程序,线是怎么接的?
2、写好串口的程序,这个网上的教程很多,而且不同的单片机程序不同,这里不再赘述。以下是笔者写好的部分代码,设置波特率为9600,将程序烧录到单片机。3、然后通过USB转TTL线连接好单片机和电脑,打开串口调试助手(这个网上有许多版本可以下载的)。 在串口调试助手中打开串口,设置波特率与软件中相同。然...

串口调试助手的基本功能
串口调试助手,一般都支持:支持以文本或16进制方式接收和显示数据;支持串口,自动寻找系统支持的串口,150~256000常见的波特率,支持自定义任意波特率;支持网络接口,支持UDP、TCP客户端、TCP服务器协议类型;支持自动保存测试数据。支持16进制、字符串、文件3种格式的数据发送;支持循环激励;支持保存为文件...

怎么用51单片机向串口调试助手发送字符串?有程序解释更好啊,求解~_百 ...
ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节发送的...

proteus 怎么实现串口仿真
点击打开 此软件不需安装,直接使用。打开串口调试助手,选择串口号和波特率,注意选择的是以上设置的虚拟串口(COM9)3.打开文件夹 用proteus打开 设置串口输出的物理接口(COM4)和波特率,导入HEX文件进行仿真。通过串口调试助手向单片机发送字符串,单片机每接收到10个字符就把它显示出来并且发送回给PC....

MSP430 串口UART通信 通过串口调式助手接收字符串乱码,接收单个字符...
当你发送一串字符串给单片机的时候,430刚接收到第一个字符于是开始进行回发固定数据给串口助手,可还没发送完毕(发送需要时间,而你尽然在接收中断里发送,这样接受中断就得不到及时响应),你第二个字符串又进来了,于是出错了。(第一件事还没干完,你第二件、第三件。。。全部紧接的来了,要...

PC机与单片机之间的串口通信的程序
单片机为51系列,PC机具有RS-232-C接口,利用芯片MAX232实现电平转换。利用串口通信调试小... 利用汇编语言编写PC机与单片机之间的串口通信的程序,以PC机作为上位机,单片机作为下位机。单片机为51系列,PC机具有RS-232-C接口,利用芯片MAX232实现电平转换。 利用串口通信调试小助手软件验证发送和接收数据的准确性。 展开...

做单片机仿真时,为什么串口调试助手接收区收不到数据?
这个问题很明显,你需要下载一个虚拟串口软件 ,在软件里把“仿真软件里的COM3”和你串口调试助手的COM4连接起来!类似实际2台计算机通信用物理串口线连接一个道理!

上位机用串口调试助手发送十进制数,单片机收到后在数码管显示,并返回...
返回给上位机是没有变化的,只是显示数制不一样了。单片机在收到数据后直接把数据按十进制分成几位再动态显示在数码管上。

单片机发送的数据在串口调试助手接收正常,但是在linux下接收出现乱码...
这一步中,因为使用的是同一个串口,所以串口的设置一定是相同的。这样如果都收不正确,可以确定是linux串口驱动的问题。2、详细设置linux串口的参数,包括波特率,校验,串口位数。将linux和单片机设置相同,看看接受数据是否相同 如果还是不相同。3、在windows中使用串口调试助手设置同单片机串口相同的参数...

连山壮族瑶族自治县15791409481: 求一个“串口调试助手发送字符串到单片机“的程序 -
莫卢除翳: 单片机串口通信的程序? ORG 0000H AJMP MAIN ORG 0023H AJMP RECEIVE ;跳转到接收中断入口 ORG 0030HMAIN: MOV TMOD,#20H ;T1工作方式2 MOV TH1,#0FDH ;波特率9600 MOV SCON,#50H ;传口工作方式1,允许中断接受 ...

连山壮族瑶族自治县15791409481: 用串口调试助手向单片机发送数据 -
莫卢除翳: 串口调试助手一般有两种数据模式,一种是字符,一种是十六进制数 0x31 是1的ASCII 码,你把串口调试助手的发送数据类型改成十六进制就可以了.

连山壮族瑶族自治县15791409481: 用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助 -
莫卢除翳: 当然可以.串口助手里设置好就行.比如这样设置:波特率9600,数据位8,停止位1,校验为:奇校验、偶校验、标志位....任选其一.停止位:1. 单片机里按同样设置就行. 11位是一个字节,加了开始位,停止位,还有一个tb8,多机通信地址...

连山壮族瑶族自治县15791409481: 怎么用51单片机向串口调试助手发送字符串?有程序解释更好啊,求解~
莫卢除翳: ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符).发送一个字符串就是不停的发送直到发送完毕,51单片机...

连山壮族瑶族自治县15791409481: 懂单片机者进:PC机向单片机串口通信问题,如何通过串口助手发送一连串数字给单片机,如0x01,0x02,0x03等 -
莫卢除翳: 你是想问单片机多字节 接收程序怎么写吧 以51单片机为例 51单片机串口接收缓冲区只有一个字节,那么我们可以定义一个数组做为接收缓冲区,每接收到一个字节就把它保存到数组,通过时间间隔来检测一帧数据是否发完,用定时器即可,在串口中断里 复位定时初值,当超过定时时间没有接收到数据,则会触发定时中断,这时单片机就可以处理接收到的数据了

连山壮族瑶族自治县15791409481: 51单片机 ,串口要想从电脑接收到一个字符'1' 用串口调试助手要发送个什么,急急急!!!急急急!! -
莫卢除翳: 取消16进制勾选,发送1就行了

连山壮族瑶族自治县15791409481: pc机与单片机串口通信问题 利用串口通信助手将一个字符串发给单片机 单片机返回一个字符串到串口通信助手 -
莫卢除翳: 问题出在你发送时关掉中断,因为丢掉了数据造成的,解决的办法是:延时一段时间等待接收完毕后再发送,比如检测到有接收数据后,延时10毫秒,之后再发送回PC.

连山壮族瑶族自治县15791409481: 利用PC机串口调试程序发送字符给单片机,单片机将接收到的信息回送到电脑进行显示. -
莫卢除翳: ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV TMOD,#20HMOV TH1,#0FDHMOV TL1,#0FDHMOV SCON,#50HSETB TR1 LOOP:JNB RI,$CLR RIMOV A,SBUFMOV SBUF,AJNB TI,$CLR TISJMP LOOPEND

连山壮族瑶族自治县15791409481: 串口调试助手怎样发送模式三的数据 -
莫卢除翳: 模式三是: 1位起始位,8位数据位,1位程控位(奇偶校验位,就是第9位数据,由用户置SCON的TB8决定),1位停止位.串口调试助手的参数设置里有数据位、停止位的设置,停止位可以选择1或2.因为没有哪种模式是有2为停止位的,所以估计串口调试助手是把程控位当做停止位了,所以应该将停止位选择成2,就是模式三了.因为本人没有用过模式三,所以其他的就不太清楚了.

连山壮族瑶族自治县15791409481: 用单片机串口向电脑串口调试助手发送一个字符串,用C语言编程 -
莫卢除翳: uchar idata SystemBuf[10]; //用于接收 uchar Rx=0; //接收数据条数 uchar code AT[]="YES,IT IS"; void UART_init (void) { TMOD=0x20; //用定时器1 PCON=0x00; //波特率不加倍 SCON=0x50; //串行方式1 TH1=0xFD; //9600 TL1=0xFD; // ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网