您现在所在的是:

单片机论坛

回帖:22个,阅读:18976 [上一页] [1] [2] [3] [下一页]
942
ppboy
文章数:13
年度积分:50
历史总积分:942
注册时间:2003/6/24
发站内信
发表于:2003/7/14 22:43:00
#0楼
各位大虾

我应该把inputmode 设置成text还是binary
比如
 buf= mscomm1.input

那么buf里到底读来的是什么
用text1.text=buf

为什么用binary时读总是乱码
如果让他显示出从单片机送出的16进制该怎么办
比如 在单片机中 发送 mov a,#afh
mov sbuf,a
要显示出来 是af字符该怎么办
谢谢  了



[此贴子已经被思南于2003-7-15 17:23:19编辑过]
1173
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:1173
注册时间:2002/8/7
发站内信
发表于:2003/7/15 1:49:00
#1楼
用VAL函数啊。
Val(string)  ‘返回包含于字符串内的数字,字符串中是一个适当类型的数值。
如果确认string是一个十六进制数字字符,则明确告诉VAL函数:

Dim n As Long
n = VAl("&H" & String)
942
ppboy
文章数:13
年度积分:50
历史总积分:942
注册时间:2003/6/24
发站内信
发表于:2003/7/15 10:32:00
#2楼
这位大虾
我的意思是用vb来接受显示单片机送来的16进制字符
比如
单片机发送
aa11ab33445566bb   aabb是开始和结束信号

那如何在vb中能显示
aa11ab33445566bb
我设置
rthreshold是 8

Private Sub comm1_OnComm()
Dim buf1 As Variant
Dim buf$, i%

Select Case comm1.CommEvent
Case comEvReceive
inbyte = comm1.Input


For i = 0 To 7
buf = Hex(inbyte(i))
buf1 = buf1 & buf
Next
Text2.Text = n
comm1.InBufferCount = 0
End Select
End Sub

现在我把rxd和txd短结
用output命令发送
为什么在text2中显示不出来
text2.text=buf1
1173
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:1173
注册时间:2002/8/7
发站内信
发表于:2003/7/15 11:37:00
#3楼
未知"Text2.Text = n" 中的 n 是什么。
其实把 rthreshold置为1(每字符处理一次)则可处理任意长度的字串:

Private Sub comm1_OnComm()
Dim s$,s1$

Select Case comm1.CommEvent
 Case comEvReceive
     s = comm1.Input
    '例: 每一字符都更新一次text2.text
         text2.text = text2.text & s
    '或: 如果"bb" 是通讯协议中固定用的的结束符,则可在收到等它出现时再更新text2.text
        s1 = s1 & s
        If Len(s1) > 2 Then
           Iif Right(s1) = "bb" then
               text2.text = s1
               '建立本串接收结束标志,通知可继续发送等
               ......
            End If
        End If
End Select

End Sub


942
ppboy
文章数:13
年度积分:50
历史总积分:942
注册时间:2003/6/24
发站内信
发表于:2003/7/15 16:02:00
#4楼
多谢了
现在的问题是把从单片机的16进制 在text中显示出来
比如
单片机发送ab16进制字符
能把他在vb上显示出来
用n = VAl("&H" & String)
是什么意思
vb中往单片机里送的是asc码
作为控制字
那单片机接受到的是什么呢

1173
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:1173
注册时间:2002/8/7
发站内信
发表于:2003/7/15 19:30:00
#5楼
搞清楚用ASCII码表示一个数和用字符串(由"0"-"F"字符组成)表示十六进制数两种不同概念:
前一种是机器码,它用一个码就可表示0-255:  171 = ABh = chr(&HAB)
后一种是用字符串String表示数字,它用两字符表示0-255: 171 = ABh = Val("&h" & "ab")
字符串的内容被包含在两引号中.任一字符的的ASCII码可用Asc()函数返回,如:
n = Asc(Mid("1234AB",5,1)   返回 字串中第5个字符"A"的ASCII码值: n = 41h = 65
不知你的单片机用的是那种?
942
ppboy
文章数:13
年度积分:50
历史总积分:942
注册时间:2003/6/24
发站内信
发表于:2003/7/16 11:58:00
#6楼
多谢指教
请问
往单片机送命令ff时
用output命令时
单片机能收到的是什么呢
是16进制的 ff 吗


[此贴子已经被作者于2003-7-16 12:01:35编辑过]
942
ppboy
文章数:13
年度积分:50
历史总积分:942
注册时间:2003/6/24
发站内信
发表于:2003/7/16 12:07:00
#7楼
我用的是2051单片机
我不想把16进制的 ab转换为171
我只想被他在text中显示出ab
是不是我要把单字节变成双字节才能显示出来
1173
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:1173
注册时间:2002/8/7
发站内信
发表于:2003/7/16 15:12:00
#8楼
机器码顾名思义只在机器运算中使用,查ASCII字符表时,你能在字符中理解它所代表的全部码值吗,有的码值根本就不能显示和打印,如chr(0),chr(32),chr(255).....在文本框显示的都是空格,无法分辨,这就是为什么要用两个十六进制字符来表示一个字节的值的原因了。
要将某一个字节的码值以两个十六进制字符表示出来(设Char是待转换的字节):
Text2.text = Right("0" &  Hex(Asc(Char)), 2)
转换流程为:查十进制码值 -> 十六进制转换 -> 双字符定位。
式中用Right()函数是为了保证少于16的码值也用两个字符表示,如:“00”,“0A”....等。
1173
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:1173
注册时间:2002/8/7
发站内信
发表于:2003/7/16 15:23:00
#9楼
to ppboy:
一个学习方法:用一个十六进制文件编辑器如UltraEdit-32,新建一个文件并用它编辑,学习领会一下。祝你成功!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003