|
| 采购元器件好去处--维库电子市场网推荐 |
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
两个89s52通过串行交换数据的问题,困扰很久 |
| 来源:21ic 作者:hubo450 栏目:新手园地 |
| 两个89S52.html">89S52通过串行交换数据的问题,困扰很久 我做的东西里面用到两个89S52通过串行来交换数据,但是用仿真器(伟福V5/s)调试怎么也不对,主要问题是发#10H之下的数字都变成#0F×,比如发#00H,收到的是#0f0h. 昨天用另外一台仿真器(伟福 E51/s)调试的时候,发现发的数字在接收端都变成发送的数字+8,而低4位在8~F之间的一般都正确。实在困扰不已,没找到毛病所在。请高手指点一下。 我的测试程序: ////发数字,用仿真器来仿真////////// ORG 0000H LJMP MAIN ORG 0100H MAIN: LCALL INIT START: MOV A,#1fh MOV SBUF,A CLR RI WAIT: JNB RI,WAIT MOV A,SBUF LJMP START INIT: MOV TMOD,#20H;24M晶振,设置波特率为9600 MOV TH1,#0FDH MOV TL1,#0FDH MOV SCON,#50H MOV PCON,#80H SETB TR1 RET END ///////接收收到的数字,并发回来,烧到89S52中/////// ORG 0000H LJMP MAIN ORG 0100H MAIN: LCALL INIT START: CLR RI WAIT: JNB RI,WAIT MOV A,SBUF MOV SBUF,A LJMP START INIT: MOV TMOD,#20H;24M晶振,设置波特率为9600 MOV TH1,#0FDH MOV TL1,#0FDH MOV SCON,#50H MOV PCON,#80H SETB TR1 RET END 电路图如下:../uploadfile/200705160413296097.jpg 我试过把74LS08的第8脚和第10脚短掉,但是问题依旧。实在想不出来了 请高手指点一下,多谢。
|
| 1楼: | >>参与讨论 |
| 作者: coldra 于 2006-12-30 15:59:00 发布:
74LS08的第8脚和第10脚为什么要短掉 干脆去掉这个片子,或去掉488,74LS08的8/9脚短路。两个单片机直接收发试试。 可以用计算机串口对一个单片机收发检验一下,没问题后再两个片子一块调。 |
|
| 2楼: | >>参与讨论 |
| 作者: laden 于 2006-12-30 16:05:00 发布:
可能是你的波特率高了点。 降低点试试 |
|
| 3楼: | >>参与讨论 |
| 作者: hubo450 于 2006-12-30 21:27:00 发布:
还是没有解决 图上画的和我实际中的不一样 ,是我画错了,74LS08的引脚号码我标错了。我已经试过拔掉74LS08,短掉8/9脚让两个单片机直接相连(如电路中画的标号),结果还是不行; 我烧在89S52中的程序用计算机串口通信试过,是可以的; 我把程序波特率降低到9600(帖子中注释错了,是38400)发现收到的错误数更多,不知道怎么回事,另外,我根据网友的建议修改程序,加上了发送完毕的判断,也还是不行。现在还没有找到毛病所在,请高手们指点一下,还可能是什么地方的问题,谢谢。 |
|
| 4楼: | >>参与讨论 |
| 作者: dai_weis 于 2007-1-3 23:23:00 发布:
给点提示 不同的晶振导致的累计误差码率不同,你可以采用例如6250bps的通信频率,试试 我没有用汇编写过,不用中间的芯片,可以直接把TXD / RXD连在一起,或者改变一下思虑,例如发送八位,两个停止位,看看可不可以,如果可以在增加其他内容 |
|
| 5楼: | >>参与讨论 |
| 作者: hubo450 于 2007-1-4 12:30:00 发布:
多谢,问题解决了 仿真头上的晶振和板子上的晶振不一样的缘故 |
|
|
|
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |