vbairbus 发表于 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)。

vbairbus 发表于 2011-10-16 16:55:50

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_685504Q5YFXM.JPG
这就是那个怪码,三条竖线。 (原文件名:20111016358.JPG)

vbairbus 发表于 2011-10-16 17:45:43

接收单片机这边,当接通电源时,LCD就显示有如图怪码,此时发送字符的单片机未与其通讯。ourdev_685523SUPMIM.JPG(文件大小:1.40M,只有400K以内的图片才能直接显示) (原文件名:20111016363.JPG)

vbairbus 发表于 2011-10-16 18:18:37

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

vbairbus 发表于 2011-10-17 17:08:11

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

hzpyl 发表于 2011-10-17 17:14:22

用示波器看看波形。
谁也帮不了你。

machao 发表于 2011-10-17 22:31:58

单片机发送,接收用PC的RS23口,运行一个串口软件,看看收到最后一个是什么东西(看十六进制的数),就可以判断是发送的问题还是接收的问题。

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

vbairbus 发表于 2011-10-26 15:23:18

马老师:串口调试软件打开,端口只显示com1,com2,com3,com4.而我的USB转TTL插入电脑6个USB口,分别显示com9,com10,com11,com12,com13,com14.如何把它改小?

vbairbus 发表于 2011-10-26 16:27:34

我现在找到带com9的串口调试软件,单片机发送“ab"两字符,串口调试软件接收,当勾选十六进制显示时为80 00 80 00 00 80 80 80 00 00 80 00   当不勾选十六进制显示时为 ���   这里请帮我分析一下。

packer 发表于 2011-10-27 00:54:13

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

vbairbus 发表于 2011-10-28 09:17:23

当勾选十六进制显示时 "80 00 80 00 00 80 80 80 00 00 80 00"这一组数字说明什么?我发的是“ab"两字符,不是没事就发00,80 ,这组数字"00,80 "十六进制又说明什么?这些知识我又应该看哪些计算机基础知识的书?

vbairbus 发表于 2011-10-28 21:27:50

十六进制的“00”是空字符,“80”不知是什么?

rphoho 发表于 2011-10-28 21:41:55

................

machao 发表于 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了吗?

vbairbus 发表于 2011-10-31 15:40:02

我只在程序中写上系统8M,实际配置上未去配置,你是指options---compiler----communication 里的frequency吗?书上说程序上写上系统8M与实际配置上去配置8M,是一样的,只要取其中之一。

machao 发表于 2011-10-31 21:48:50

扯淡的理解。


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

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

vbairbus 发表于 2011-11-1 10:20:13

马老师:我把PC的串口调到600时收到正确的信号“ab”,但后面跟着回车换行符,我只让A=ab    AVR熔丝位如何配置(BASIC语言)?书上没说呀。

machao 发表于 2011-11-1 11:05:09

应该是600,上面我说错了,4800/8 = 600。
你的测试说明你的AVR工作时钟为1M,建议

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

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

vbairbus 发表于 2011-11-1 17:05:16

下面就是16进制数显示的内容:后面两个是回车符和换行符吧,但我在程序上只是A = "ab"没有回车和换行。

61 62 0D 0A

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

machao 发表于 2011-11-1 23:50:21

1.这说明BASIC里面的字符串定义是自动加上0d 0a的,如果不要,需要采用二进制的发送方式。建议你还是学C吧。不过至少你编程语言的基础还不行。

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

vbairbus 发表于 2011-11-3 12:22:59

Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms;
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 4 ms;
Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 ms;
马老师:我用AVR Atudio4配置熔丝位,出现上面三种情形,该选择哪一个?SUT=00是什么意思?哪里有这些资料?还有密码锁定又如何锁定?

monkerman 发表于 2011-11-3 21:55:58

俺学习来了! 大家继续!

tearsman520 发表于 2011-11-3 23:08:44

回复【20楼】vbairbus
-----------------------------------------------------------------------

DataSheet里都有,SUT是熔丝位配置。Startup time是指等待的稳定时间。
页: [1]
查看完整版本: 两个单片机通讯,老跟着一个怪字码?