搜索
bottom↓
回复: 22

两个单片机通讯,老跟着一个怪字码?

[复制链接]

出0入0汤圆

发表于 2011-10-14 16:41:21 | 显示全部楼层 |阅读模式
我在发送字符的单片机里编码如下:
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 4800
Dim A As String * 10
A = ""
A = "ab"
Do
Print A
Waitms 500
Loop
就是每隔半秒发送字符ab
我在接收字符的单片机里编码如下:
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 4800
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Config Lcd = 16 * 2
Config Portb = Output
Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
Dim B As String * 1
Dim W As String * 20
B = ""
W = ""
On Urxc Isr
Enable Urxc
Enable Interrupts
Do
Idle
Loop
Isr:
B = Inkey()
If B = Chr(13) Then
Portb.0 = 0
Cls
Lcd W
Else
W = W + B
Cls
Lcd W
Portb.1 = 0
End If
Return
在接收这边,LCD显示“ab怪码”,每半秒都显示ab+怪码共三个字符,而且接在Portb.0和Portb.1的LED灯都亮了,为什么会有怪码?程序为什么会走过Portb.0 = 0?我并没发送Chr(13)。

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2011-10-16 16:55:50 | 显示全部楼层

这就是那个怪码,三条竖线。 (原文件名:20111016358.JPG)

出0入0汤圆

 楼主| 发表于 2011-10-16 17:45:43 | 显示全部楼层
接收单片机这边,当接通电源时,LCD就显示有如图怪码,此时发送字符的单片机未与其通讯。ourdev_685523SUPMIM.JPG(文件大小:1.40M,只有400K以内的图片才能直接显示) (原文件名:20111016363.JPG)

出0入0汤圆

 楼主| 发表于 2011-10-16 18:18:37 | 显示全部楼层

我在接收单片机的编码里DO的上一行加上CLS,当接通电源时,LCD无怪码显示,但两个单片机通讯时有时出现如图怪码 (原文件名:20111016362.JPG)

出0入0汤圆

 楼主| 发表于 2011-10-17 17:08:11 | 显示全部楼层
看来这个问题到目前为止无人回答就不会有人再回答了。其实这两个单片机通讯基本上算成功,毕竟把字符"ab"传过去了,接收方只要提取左边两个字符,就能实现两个单片机通讯的目的。但是用这两个单片机分别与电脑通讯(电脑里也编好软件,电脑自己发送字符自己接收字符测试已成功),但不管是单片机发电脑收,还是电脑发单片机收,都不能成功。

出90入0汤圆

发表于 2011-10-17 17:14:22 | 显示全部楼层
用示波器看看波形。
谁也帮不了你。

出0入0汤圆

发表于 2011-10-17 22:31:58 | 显示全部楼层
单片机发送,接收用PC的RS23口,运行一个串口软件,看看收到最后一个是什么东西(看十六进制的数),就可以判断是发送的问题还是接收的问题。

如果这个不会的话,请先不要这样学习单片机,先把基础学好。

出0入0汤圆

 楼主| 发表于 2011-10-26 15:23:18 | 显示全部楼层
马老师:串口调试软件打开,端口只显示com1,com2,com3,com4.而我的USB转TTL插入电脑6个USB口,分别显示com9,com10,com11,com12,com13,com14.如何把它改小?

出0入0汤圆

 楼主| 发表于 2011-10-26 16:27:34 | 显示全部楼层
我现在找到带com9的串口调试软件,单片机发送“ab"两字符,串口调试软件接收,当勾选十六进制显示时为80 00 80 00 00 80 80 80 00 00 80 00   当不勾选十六进制显示时为 ���   这里请帮我分析一下。

出0入0汤圆

发表于 2011-10-27 00:54:13 | 显示全部楼层
你计算机知识基础好弱啊。
你传送的是个8bit数据,勾选十六进制时,串口软件直接显示。
不勾选,串口软件转换成ASCII表显示,ASCII没有对应显示符的就是“?”
你怎么没事就发00,80,用示波器看看发送口,是不是总出低电平脉冲

出0入0汤圆

 楼主| 发表于 2011-10-28 09:17:23 | 显示全部楼层
当勾选十六进制显示时 "80 00 80 00 00 80 80 80 00 00 80 00"这一组数字说明什么?我发的是“ab"两字符,不是没事就发00,80 ,这组数字"00,80 "十六进制又说明什么?这些知识我又应该看哪些计算机基础知识的书?

出0入0汤圆

 楼主| 发表于 2011-10-28 21:27:50 | 显示全部楼层
十六进制的“00”是空字符,“80”不知是什么?

出0入0汤圆

发表于 2011-10-28 21:41:55 | 显示全部楼层
................

出0入0汤圆

发表于 2011-10-29 17:18:11 | 显示全部楼层
回复【7楼】vbairbus
马老师:串口调试软件打开,端口只显示com1,com2,com3,com4.而我的usb转ttl插入电脑6个usb口,分别显示com9,com10,com11,com12,com13,com14.如何把它改小?
-----------------------------------------------------------------------

1.点击PC我的电脑的属性,查看硬件,找到这个USB转USART的硬件,在属性的高级选项中可以设置该口的端口号的。这个多摸一下,不会损坏电脑的。

2.PC上使用的串口调试助手,也需要设置波特率的,应该同你下位机相同为4800。你的现象说明能收到东西,物理连接上应该没有问题,可能双方的波特率不匹配。如果PC上的助手已经设置为4800了,那么你的下位机就不是4800。尽管程序中是4800,(系统8M),你实际配置单片机的熔丝位为8M了吗?

出0入0汤圆

 楼主| 发表于 2011-10-31 15:40:02 | 显示全部楼层
我只在程序中写上系统8M,实际配置上未去配置,你是指options---compiler----communication 里的frequency吗?书上说程序上写上系统8M与实际配置上去配置8M,是一样的,只要取其中之一。

出0入0汤圆

发表于 2011-10-31 21:48:50 | 显示全部楼层
扯淡的理解。


具体AVR工作在几兆是需要配置AVR熔丝位的。你根本没有配置AVR的熔丝位,你的系统工作在缺省的1M吧,所以你的输出不是4800,而是1200.

把PC的串口调到1200,看收到的是什么?

出0入0汤圆

 楼主| 发表于 2011-11-1 10:20:13 | 显示全部楼层
马老师:我把PC的串口调到600时收到正确的信号“ab”,但后面跟着回车换行符,我只让A=ab    AVR熔丝位如何配置(BASIC语言)?书上没说呀。

出0入0汤圆

发表于 2011-11-1 11:05:09 | 显示全部楼层
应该是600,上面我说错了,4800/8 = 600。
你的测试说明你的AVR工作时钟为1M,建议

1. 用600测试,显示16进制数,检查为什么后面有东西,以及是什么东西,然后修改程序。

2. 在本栏下载我编写教程前2篇的电子稿,里面有对熔丝位的介绍好配置方法。

出0入0汤圆

 楼主| 发表于 2011-11-1 17:05:16 | 显示全部楼层
下面就是16进制数显示的内容:后面两个是回车符和换行符吧,但我在程序上只是A = "ab"  没有回车和换行。

61 62 0D 0A

你编写的教程是不是《AVR单片机嵌入式系统原理与应用实践》,这本书我有,是C语言的,熔丝位配置没有BASIC语言的吗?BASCOM-AVR能用C语言与BASIC语言混编吗?

出0入0汤圆

发表于 2011-11-1 23:50:21 | 显示全部楼层
1.这说明BASIC里面的字符串定义是自动加上0d 0a的,如果不要,需要采用二进制的发送方式。建议你还是学C吧。不过至少你编程语言的基础还不行。

2。AVR配置熔丝位于语言编程无关的。我的教程中有详细的操作介绍。

出0入0汤圆

 楼主| 发表于 2011-11-3 12:22:59 | 显示全部楼层
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms; [CKSEL=0100 SUT=00]
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 4 ms; [CKSEL=0100 SUT=01]
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 ms; [CKSEL=0100 SUT=10]
马老师:我用AVR Atudio4配置熔丝位,出现上面三种情形,该选择哪一个?SUT=00是什么意思?哪里有这些资料?还有密码锁定又如何锁定?

出0入0汤圆

发表于 2011-11-3 21:55:58 | 显示全部楼层
俺学习来了! 大家继续!

出0入0汤圆

发表于 2011-11-3 23:08:44 | 显示全部楼层
回复【20楼】vbairbus
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-4-24 05:12

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

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