vb中串口通讯出现乱码

vb中串口通讯出现乱码,第1张

VB内部是使用Unicode编码的,而串口发过来的数据则是ANSI编码的,要转换后才能在VB中正常显示:

Private Sub Timer1_Timer()
Dim buf() As Byte  '要设为字节数组
buf = MSComm1Input '将缓冲区内的数据读入buf数组中
If UBound(buf) >= 0 Then '判断缓冲区内是否存在数据
    TextReceiveText = TextReceiveText & vbCrLf & StrConv(buf, vbUnicode) '转为Unicode
End If
End Sub

限于条件,此代码未测试,如果有问题再问我

试试这样初始化你的定时器
void UartInit(void) //9600bps@110592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xDC; //设定定时初值
TH1 = 0xDC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}

当你发送一串字符串给单片机的时候,430刚接收到第一个字符于是开始进行回发固定数据给串口助手,可还没发送完毕(发送需要时间,而你尽然在接收中断里发送,这样接受中断就得不到及时响应),你第二个字符串又进来了,于是出错了。(第一件事还没干完,你第二件、第三件。。。全部紧接的来了,要你,你不疯?)这里的问题是你没搞明白整个流程,这个程序框架也不好。这种情况下,你需要建立一个缓存区(FIFO),中断的任务就是把接收到的数据扔到缓存,置标志位,并立马退出!在主程序里发送数据,这样就不会导致接收无法及时响应问题(这个跟蓄水池一样的道理)

又是你啊?和mscomm较上了?
那就在combobox1的onselect事件里面写上
if
mscomm1portopen=true
then
mscomm1portopen:=false;
if
combobox1text='com1'
then
mscomm1commport:=1;
if
combobox1text='com2'
then
mscomm1commport:=2;
mscomm1portopen:=true;
就是判断下mscomm是不是打开的,打开的就先关一下,然后根据选择的内容改变串口号,最后启用mscomm


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/13113807.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-30
下一篇2025-08-30

发表评论

登录后才能评论

评论列表(0条)

    保存