vb串口通信,每次从单片机发回的都是同样的一串字母,请问怎么确定接收数据的次数啊
我最近正好也做了个相关的,我把VB的程序给你参考下吧,希望对你有帮助,就是用VB的MSCOMM来控制的,注释我都写上了,你应该能看懂,根据你自己的需要改下就可以了,我调试过的,没问题
MSCOMM1.COMMPORT1=1 '设置端口号为1
MSCOMM1.SETTINGS="19200,N,8,1" '设置波特率等通信协议
MSCOMM1.INPUTLEN=6 '设置一次从串口读取6个字节
MSCOMM1.PORTOPEN=TRUE '打开串行口
MSCOMM1.INPUTMODE=COMINPUTMODEBINARY '从串行口读取二进制数据
MSCOMM1.OUTPUT=SENDDAT '发送数据
DO UNTIL MSCOMM1.INBUFFERCOUNT>=6 '查询方式,等待收到6个字节
DOEVENTS
LOOP
DATTEMP=MSCOMM1.INPUT '从串口读取数据至变体变量
RCVDAT=DATTEMP '数据送至接收二进制数组
TXTRCV.TEXT=""
FOR I=0 TO 5 '接收数据送至接收文本框TXTRCV显示
TXTRCV.TEXT=TXTRCV.TEXT&RIGHT("0"&HEX(RCVDAT(I)),2)
NEXT I
MSCOMM1.PORTOPEN=FALSE '关闭串行口
CMDCOMM.ENABLED=TRUE '使能CMDCOMM按钮
END SUB
下面是我做的一个测试程序:
'TextReceive =
' 初始化程序:主要完成对串口的设置,包括选择串口、设置波特率、设置数据格式、打开串口等。
' 注意:在程序开始之前,必须清空发送和接收缓冲区,以免出错。
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1" ' 设置波特率和发送字符格式
MSComm1.CommPort = 1 ' 设置通讯串口
MSComm1.InputLen = 0 ' 设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据
MSComm1.InBufferSize = 2 ' 设置接收缓冲区2Byte
MSComm1.InBufferCount = 0
MSComm1.OutBufferSize = 2 ' 设置发送缓冲区2Byte
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1 ' 每个字符到接收缓冲区都触发接收事件
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.PortOpen = True ' 打开串口
End Sub
Private Sub Command1_Click()
Dim number As Integer
Dim outbyte(0) As Byte
number = Val(170)
outbyte(0) = CByte(number)
MSComm1.Output = outbyte
Label4 = outbyte(0)
Print outbyte(0)
End Sub
方法根据具体情况而定。
比如:
做一个接收次数寄存器,串口接收都是有中断的,中断有效,就去判断接收数据,数据正确,就将接收次数寄存器中的值增加1次。
如果没有中断,就不要去管它,防止重复计数。
每次从单片机发回的都是同样的一串字母?程序 设计 如此?
单片机与电脑串口通信问题:单片机会不停的发送给电脑
这是你的全部程序吗?如果是这样,程序执行过程是这样的:首先程序执行完这一段后,会发数据出来.然后程序一直执行,但后面没有程序,也就是程序空间全是FF,执行的指令是MOV R7,A.因为这条指令不会让程序跳转,所以程序一直执行到程序存储器结尾(如89C51为0FFFH,89C52为1FFFFH等),由于后面没有实际的程序...
51单片机通过串口不断连续发送两次数据(一次发送8位,先发A,再发B...
想非常安全,那就要有接收确认机制。1,发送A 2,接收单片机接收到后返回相同值,3,发送单片机接收到返回的A,完成一次发送。4,再发送B,5,接收单片机接收到B返回相同值,6,发送单片机接收到返回的B,完成一次发送。其实就是1,2,3步骤的重复。如果返回的数据不是发送的数据那就再回到1 ...
51单片机串口通信是全双工的,但是为什么又说它的发送和接受不可以同时进...
51单片机串口通信是全双工的,发送和接受可以同时进行。不可以同时进行的是半双工。全双工方式分别由两根不同的传输线传送数据时,通信双方都能在同一时刻进行发送和接收操作,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在发送和接受两个方向上传送。半双工使用同一根传输线既作接收又...
单片机串口通信,发送了无法收到数据(新手求教 )
看下了程序,应该是没什么问题的,虽然波特率设置成4800后,在时钟12MHz情况下有3%误差,但不至于影响通信,尤其只是做实验的前提下。如果使用串口调试助手调试,检查一下波特是否设置为4800,数据格式是否为8-N-1,即无校验位,8位数据和1位停止位。看看调试助手是否勾选了自动清除功能。同时可以查看Rx...
C# 串口接收数据单片机发回总是8位8位接收,如何将他们整合一起?_百 ...
我没看你的程序只想提醒你,接受字符串也可以转化成任何类型的的数据,包括数组等等!关键是单片机发回的数据的格式够用就可以了!
单片机发送一次数据,为什么我的串口调试小助手在不断的接受数据啊
估计你的程序里只有一条发送指令,最后结束时没有终止。换句话说,最大的可能是编译结果变成,程序执行完main以后,重新回到0地址执行,最后变成不断循环。尝试改一下 int main(void){ ...send_data();...while (1) {};return 0;}
单片机串口通信,发送数据感觉不对,请大佬帮看看?
你的主循环转得太快,前一个数据还没发送完就把SBUF又填充新数值,这样很容易破坏发送的帧。既然你不开中断,就应当采用查询工作方式,查询TI标志位确认发送完成之后再进行下一步工作。
...问题2:使用串口调试发数据,为什么单片机发回来的数据偶尔会出现乱码...
在STM32中判断串口接收完成,通常采用超时计数的方法。通过设定一个定时器,当超时计数到达预设值时,即认为接收未完成。此方法适用于接收数据量不确定的情况。如果遇到串口接收数据时偶尔出现乱码的问题,首先要检查是否存在干扰信号。干扰信号可能会导致数据错误。此外,还需确认接收程序是否运行正常,避免因...
两个单片机之间串口通信
在两个单片机之间进行串口通信时,需要遵循一定的数据传输协议。发送方负责将数据编码,而接收方则负责解码。一个常见的协议结构如下:首先,协议开头通常是两个特定的起始标志字节,比如“AA 55”。接着是实际的数据部分,比如“DATA1 DATA2 DATA3 DATA4 DATA5”。数据部分通常包含需要传输的具体信息。...
单片机和串口助手通信,通过单片机发送0x31,但是串口助手一直显示31,怎 ...
你的显示器端的数据0x31还存在啊,,不是说PC跑到while里面去了 ,显示器端就没数据了。其实数据还是保存在显示器的内存中的。不信,你在while里面 把 显示器给清零,,31就没有了 。