遵义汽车网

为什么这个单片机串口程序接受不到连续数据?

发布时间:2020-09-09

=0x00 满足就会不停发送,需要发送的数据放在这个数组中!
trdata[i]为数据缓冲区只要这个条件 trdata[i],最后一个数据为0

回复:


解决办法,还没退出中断,退出当前中断,发送你的数据,你在中断里发送数据。
当你接收第一次中断的时候,只能接收最近一个字节)明显就不合理,因为你在中断里发送数据,所以再发一次数据,由于之前RI置1了(sbuf被刷新很多次,你清除了中断,发送数据结束后,估计你还是在那里等它发送完:在中断外发送数据,但是还不能被立即中断,此时单片机接收到了n次数据,又响应了一次中断,但此时RI已经置1,并采用循环队列接收方式

回复:

/ 接收
{ RI = 0;
ReceState = 3:
Send_data(temp4);
break;
DataTemp = SBUF;
ReceCount=0; /void MAIN_RS_INT(void) interrupt 4 using 3 /:
temp=0;
break;/
if(TI)TI=0;
case 3;/
if(RI) /
case 1;
ReceState=0;
ReceState = 0;
default;/************************************/串口通讯中断函数
{
uchar DataTemp;
break;
case 2; uchar i:
Send_data(temp5);开始
Send_data(temp3);
ReceState = 2;
break;
break:
Send_data(temp6); switch (ReceState)
{
case 0

回复:

硬件问题

回复:

没有对trdata[i]清零?

回复:

程序是循环执行的呦。。。

回复:

已经收到了串口助手发出的““aa””。

看来。

另外,单片机没有显示出来 aa,也可能是,应该是你的程序有问题,所以虚拟终端,虚拟终端的发送端,并且显示出来了,干扰了单片机的发送

回复:

你发送的方式是什么?16进制方式和默认的发送方式是不同的,发送和接受的数据可能会是不同进制,你仔细看看是不是发送方式选错了

回复:

#include "reg2.h" #include typedef unsigned char uchar; typedef unsigned int uint; bit busy; bit Flag; uchar GetC; void InitUART(void); void SendData(uchar dat); void SendString(uchar *s); void main() { uchar i; InitUART(); Sen...

回复:

程序是循环执行的呦。。。

回复:

明显就不合理,你在中断里发送数据,估计你还是在那里等它发送完。 当你接收第一次中断的时候,你清除了中断,发送你的数据,此时单片机接收到了n次数据,但是还不能被立即中断,因为你在中断里发送数据,还没退出中断,但此时RI已经置1,发送数...

回复:

不会的了 设备与设备之间要有一定的通信协议才能有良好的通信过程 比较明显的就是要配置一样的波特率 如用9600的波特率 那代表1S发送9600位也就是9600/8=1200个字节 也就是1S/1200约为1MS左右的时间发送字节 单片机处理速度都是微秒级别的 在接...

回复:

首先,你的程序没有问题,不能接收数据,从以下几个原因找: 1、这是在实验板上做测试吗,那看一下实验板上单片机的晶振频率是不是11.0592MHz,必须是这个频率,否则就无法接收数据。 2、实验板的单片机要接收数据,你是怎么向单片机发数据的,...

回复:

用我的方法看看,接收到数据在发送出去看看! unsigned char Byte; void Uart_Isr() interrupt 4 { if (RI) { RI=0; Byte = SBUF; SBUF = Byte; while(!TI); TI = 0; } }

上一篇:小米的手机在哪 下一篇:载着中国第三次南极考察队的节选答案 从文中看,“她”平时晕船吗?为什么?

    返回主页:遵义汽车网

    本文网址:http://0852auto.cn/view-52623-1.html
      信息删除