搜索
bottom↓
回复: 16

单片机与电脑通讯,要设ASCII码通讯吗?

[复制链接]

出0入0汤圆

发表于 2011-6-10 10:57:58 | 显示全部楼层 |阅读模式
我做单片机与电脑通讯实验,两边都设波特率9600,数据位8,停止位1,无校验。电脑超级终端打开显示已连接(左下角有连接时间显示),但电脑与单片机通讯无效,是否要设ASCII码通讯,(电脑与单片机两边都使用VB编程)。

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2011-6-10 12:50:29 | 显示全部楼层
不用,单片机用vb怎么编程???

出0入0汤圆

发表于 2011-6-10 12:56:22 | 显示全部楼层
你的概念还是有点模糊。

通信两边都设波特率9600,数据位8,停止位1,无校验,这个没有问题,问题主要的是传送数据位8bit中数据的格式,原则上任何二进制的格式都是可以的(其实任何的编码格式都是二进制数据)。

但如果你在PC电脑上使用WINDOWS自带的超级终端,由于它只能正确显示符合标准ASCII编码的数据格式,所以此时你就需要使双放发送的数据格式为ASCII码。这个不是通信不能进行的故障,只是受制约于超级终端软件本身的局限。

实际上网上有许多小的专用、免费、在电脑上使用的串口调试软件,都支持二进制数据格式(在我编写的教材光盘中就有),如果你在电脑上使用此类型的串口调试软件,数据格式就没有任何的限制。

等你水平高了,你可以在PC上用VB编写自己的,不受数据传送格式限制的“超级终端”。

出0入0汤圆

 楼主| 发表于 2011-6-10 14:30:00 | 显示全部楼层
回复【2楼】machao
-----------------------------------------------------------------------

我说用超级终端,是想说明电脑与单片机连接没问题,在电脑与单片机通讯实验时,超级终端关掉了,但电脑与单片机通讯无反应。

出0入0汤圆

 楼主| 发表于 2011-6-10 14:40:52 | 显示全部楼层
关于数据的格式,我在电脑上设的是文字形式(默认值),单片机上没设,不知道单片机在通讯时以什么数据格式通讯(文字形式还是二进制形式)?

出0入0汤圆

 楼主| 发表于 2011-6-10 14:43:38 | 显示全部楼层
回复【1楼】tiexin740
不用,单片机用vb怎么编程???
-----------------------------------------------------------------------
BASIC,与VB语法基本一样。

出0入0汤圆

发表于 2011-6-10 16:33:54 | 显示全部楼层
回复【3楼】vbairbus
回复【2楼】machao  
-----------------------------------------------------------------------
我说用超级终端,是想说明电脑与单片机连接没问题,在电脑与单片机通讯实验时,超级终端关掉了,但电脑与单片机通讯无反应。
-----------------------------------------------------------------------

还是先借本我编写的教材学习下,里面会从基本概念开始的介绍,直到实际应用的例子。

出0入0汤圆

发表于 2011-6-10 21:26:16 | 显示全部楼层
回复【3楼】vbairbus
我说用超级终端,是想说明电脑与单片机连接没问题,在电脑与单片机通讯实验时,超级终端关掉了,但电脑与单片机通讯无反应。
-----------------------------------------------------------------------

你这都是什么思路啊!我一时噎住说不出话了,等我缓口气啊……
……
…………
………………
1、超级终端,就算没接单片机,一样可以打开,只能说明电脑的串口是可操作的,不能说明与单片机已经连接,更无法说明连接没问题
2、什么叫“电脑与单片机通讯”?你用超级终端不是通讯?再说什么叫有反应?如果你接了一个没有烧程序的单片机,或者电脑上没有运行什么相应的串口传输数据软件,会有反应吗?你根本都没说你用了什么软件,做了什么操作。
3、更让我吐血的是,你竟然在楼主位说“电脑与单片机两边都使用VB编程”?单片机怎么用VB编程?我相信你不可能知道 .Net Micro Framework

出0入0汤圆

发表于 2011-6-11 10:34:32 | 显示全部楼层
回复【4楼】vbairbus
-----------------------------------------------------------------------

你用串口调试软件试一下不就知道了,你用vb遍单片机程序是用什么软件的?

出0入0汤圆

发表于 2011-6-11 10:39:13 | 显示全部楼层
串口通信我用了很多次,没听说单片机能用vb编程。俺用c编的!莫非俺落伍了!
通信都是ascll码!只是你接受发送是什么模式!感觉字符比较好!起码知道是什么!

出0入0汤圆

发表于 2011-6-11 20:18:13 | 显示全部楼层
回复【9楼】snail_dongbin
串口通信我用了很多次,没听说单片机能用vb编程。俺用c编的!莫非俺落伍了!
通信都是ascll码!只是你接受发送是什么模式!感觉字符比较好!起码知道是什么!
-----------------------------------------------------------------------

支持AVR和51的有BASCOM-AVR和BASCOM-51,是采用BASIC语言的,同VB有类似地方。

串口通信可以采用二进制数据,不一定必须为ASCII格式的数据。标准ASCII码高位为0,这是基本概念。由于WINDOWS中的超级终端只能解析ASCII码,所以许多人使用ASCII格式的数据。

在许多应用中,采用ASCII码格式的数据通信,其效率是非常低的。比如传送一个AD转换的电压数据234,采用ASCII码需要3个字节,而采用二进制方式,只需要1个字节。另外收到ASCII码的“2”“3”“4”,还需要额外程序将其转换成数字234,又多了不必要的代码。

出0入0汤圆

发表于 2011-6-11 20:35:55 | 显示全部楼层
basic语言在单片机上的分支不能叫Visual Basic。

出0入0汤圆

发表于 2011-6-11 20:57:20 | 显示全部楼层
回复【9楼】snail_dongbin  
-----------------------------------------------------------------------
终于遇到我能解答的问题了。数字通讯在运行时只有两个数据,0和1,所有数字通讯无论是简单还是复杂都是从0,1上演变出来的。
所以串口通讯不论你发送ASCII还是火星文,统统都是二进制发送和接收的,不可能说你从超级终端发个“A”终端就用人类语言的形式传给下位机一个“A”,他只能传2进制数据到下位机,但是这个A总不能我规定发1000 0001代表A,另外一个人规定发1111 0001代表A,第三个人规定。。。。。。于是米国人出了个标准就定义0x41才是A,其他的都不是A,于是就有了ASCII码。

出0入0汤圆

发表于 2011-6-12 16:03:44 | 显示全部楼层
回复【12楼】muzheyun
回复【9楼】snail_dongbin   
-----------------------------------------------------------------------
终于遇到我能解答的问题了。数字通讯在运行时只有两个数据,0和1,所有数字通讯无论是简单还是复杂都是从0,1上演变出来的。
所以串口通讯不论你发送ascii还是火星文,统统都是二进制发送和接收的,不可能说你从超级终端发个“a”终端就用人类语言的形式传给下位机一个“a”,他只能传2进制数据到下位机,但是这个a总不能我规定发1000 0001代表a,另外一个人规定发1111 0001代表a,第三个人规定。。。。。。于是米国人出了个标准就定义0x41才是a,其他的都不是a,于是就有了ascii码。
-----------------------------------------------------------------------

这种回答不能算错,概念都是对的,但无助LZ理解和解决实际问题。只从表面文字是不能真正理解和掌握概念的,更不要说解决实际的问题了。

关于UART串口通信,在实际应用中并不是那么简单,它包含了2个层面上的问题。

第一个是低层的,包括硬件连接、电平转换、通信的帧格式,波特率。这个是有标准的,只要按标准设置,就能建立通信的通道。当然在这个层面上出问题,整个通信也就瘫痪了。出了问题应该先检查这个层面,用最简单的测试,验证通信通道正常后再考虑上层的东西。在这个层面中的通信的帧格式,通常使用1/8/1的格式,其中数据位为8位,数据就是二进制的01,规定中没有指定一定必须是符合ASCII码表的二进制数据,任何二进制数都可以。

第二层面在UART的规范中是没有规定的,需要用户自己制定和选择。这里包括,8位数据位的格式,一个数据包的定义,数据流的控制,以及出错处理。所有都需要用户自己规定的。

LZ的问题,是对于传送8位数据位格式的不理解。由于他使用WINDOWS中的超级终端,这个超级终端把收到的数据字节认为是ASCII标准格式的数字,因此你传给它的二进制数据如果不是标准ASCII码表中的数据,它就不认识,显示也不正常。但不能说明是低层出问题的。

在控制类的应用中,通常不建议采用ASCII文本格式定义数据包,这样的效率太低,处理起来也麻烦。
比如在PC上送一个数字123到单片机中,作为温度的上限,如果你在超级终端中下发123,其实是传送了3个字节:“1”“2”“3”,这三个字节是1/2/3的ASCII编码的二进制数值(31H、32H、33H),而不是一个简单的一个字节的二进制数据123(7bH)。
问题在于你单片机如何知道和解析出是123呢?!

就是你知道收到的数据都是ASCII码,那么你怎么知道是应该收1个,还是3个,还是5个,才是上面下发的一个完整数据?因此应用中,这个数据包格式的定义就非常重要的。它也是通信双方解析通信数据的“码表”。

假定每个数据确定为3个字节的ASCII码,单片机的程序还要把这3个ASCII码表示的数字转换成一个一字节的二进制数据,再写入相应的变量中,这些都是增加了程序的工作,效率也低。

在我编写的教材中,使用了2个章节介绍UART的应用,认真学习一下,会大有帮助的。

基本概念和基础知识的掌握,不再与你背住了多少,只有通过实际应用,才能知道你是否真的掌握和理解透了。

出0入0汤圆

发表于 2014-10-2 05:30:04 | 显示全部楼层
老师,上个例子吧.

出0入0汤圆

发表于 2014-10-3 22:20:41 | 显示全部楼层
我编写的教程有2章介绍USART接口和应用的。头像图就是该书封面。现在市场上还是有的。

出0入0汤圆

发表于 2014-10-11 19:43:38 | 显示全部楼层
单片机有没有发数据先
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 15:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表