完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大虾,最近我在做个单片机与PC机通信,用VB作上位机,然后想让上位机发送16个字节的字符串到51上,再从51发回PC机,操作如下:
上位机 rivate Sub Command1_Click() //发送字符Dim pp As Variant, a As Variant, Cstring() As Variant, i As Variant, j As Variantif Timer1.Enabled = True Then Timer1.Interval = Val(text_dingshi.Text)If text_send = "" Then pp = MsgBox("发送字符区不为空!", vbCritical)If MSComm1.PortOpen = False Then pp = MsgBox("串口没有打开!", vbCritical) Exit SubEnd Ifa = Len(text_send.Text)ReDim Cstring(a)For i = 0 To a Cstring(i) = Mid(text_send.Text, i + 1, 1)NextFor j = 0 To a MSComm1.Output = Cstring(j) Sleep 20NextEnd Sub 下位机 //波特率9600 unsigned char getptr,putptr,buf[16]; //开辟16个字节的缓冲区,一个取数指针一个存数指针 void USART_Interrupt() interrupt 4{if(RI){RI=0;buf[putptr]=SBUF;putptr++;} void main(){unsigned char i,mydat[16],j;USART_INit();getptr=0;putptr=0;while(1){if(getptr!=putptr) //两个指针不同证明存数多余取数,可以取数{mydat=buf[getptr];getptr++;i++;i%=8;if(i==0){for(j=0;j<16;j++){send_byte(mydat[j]);}}} }} 但问题出现了,我在调试的时候有时候能接收到正确数据,有时候却数据的顺序倒换了,例如我输入“12345678”,接收时却会出现“78123456”,“56781234”这些情况,敢问大虾门这是什么原因造成的呢,有什么办法解决呢 |
|
相关推荐
3个回答
|
|
你的putptr都没有清零。。。
|
|
|
|
果然是这个原因,已经解决了,谢谢原子哥了哦
|
|
|
|
单片机和VB通信。。。。。。这名字起的
|
|
|
|
只有小组成员才能发言,加入小组>>
3288 浏览 9 评论
2960 浏览 16 评论
3465 浏览 1 评论
9010 浏览 16 评论
4054 浏览 18 评论
1127浏览 3评论
579浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
573浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1864浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 15:32 , Processed in 1.284525 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号