完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

|
`我做这个项目的目的:主机一个,从机数目小于8个,从机地址在1-250之间不重复。从机采集AD值发给主机显示。主机上电一开始发送1-255地址码给从机,从机接收到和自己相符的地址码后发回主机,主机保存在数组里。然后从机轮流向主机发送数据。
我的问题: 开始焊了8个从机,一个主机能很好的工作。主机采用stc12C5A08AD从机用的是stc12C5604AD。晶振都是 11.0592.12pf电容。但是后来焊接的几个从机出现了很多问题,
问题一:主机的串口是和485芯片前的光耦相连的,这时不能通过串口给单片机下载程序。串口必须断开光耦才能下载程序。(这个问题在第一次焊接的板子上不存在)。 问题二:接着问题一,下载程序后,如果不断开串口和光耦额定连线,程序运行到一个子函数后就一直运行该子函数,该子函数功能是发送地址1-250到从机(具体程序看下面)。但是有时候也可能只运行该子函数一次(我的要求就是一次)。 我用过的办法。 1.以为12pf电容太小,结果换了30pf的也不行。 2.把没有问题的板子上的单片机和有问题的板子的单片机互换。结果有问题的还是照旧,。没问题的还是没问题。就是排除了单片机问题。 3.测量电源正常,光耦换了N个。还不行。我直接把光耦去掉,用串口直接485芯片还是不行。貌似必须串口悬空才能下载程序。只有悬空才能不循环执行那个子函数。 下面是函数: void get_num(void) { uchar temp=16; uint N=0; uchar k=0; Uartinit(); Delay1ms(200); TB8=1;RED=1; for(N=1;N<251;N++) { //if(N==253) // {break;} Delay1ms(200); EN=0; //使能发送 Delay1ms(10); SBUF=N; while(TI==0); TI=0; Delay1ms(100); EN=1; //使能接受 Delay1ms(10); if(RI==1) { RI=0; temp=SBUF; pot_address[k]=temp; //从机发来的地址保存数组里 k++; } } RED=0; } void main() { uchar i,j,n,temp,addr1,k; uint m; P2=0xff; UartInit(); Tim0_init(); S119=1; RED=0; get_num(); //我用串口连接电脑,查看运行情况 //程序执行到子函数,就一直循环执行这个子函数。 for(i=0;i<8;i++) { if(pot_address==0) { bbb=i+1; break; } else bbb=9; } ++++++++++++++下面还有程序,我只贴出这些。 我认为应该是硬件的问题。但是我极其认真的比较了有问题的板子和没问题的板子实在找不出差别。 ` |
|
相关推荐
15个回答
|
|
|
|
|
|
|
|
|
针对你给的信息,总结几点:
1.这电路里光耦是费力不讨好,等于没加。 2.发现带着光耦下不了程序,应该用示波器来看串口上的信号而不是瞎猜。而且提示你,光耦次级在这个时候是不是有输出?会不会跟程序下载的串口波形打架。 3.程序是最简单的东西,只有自己写错得份,不安静下来不要想找到问题。 4.楼主看似不会调试软硬件,建议在论坛里搜索相关资料学习下。 |
|
|
|
|
|
以前遇到过光耦的问题,光耦输出到74HC164,结果传输时总有问题,费了些时间,最后发现原来是光耦的速度不够快,导致光耦输出信号的上升沿不够陡,不得已又加了整形电路后解决的。
之后明白应该直接使用高速光耦更合适。 不知道楼主也是这问题不? |
|
|
|
|
|
批判下楼主
不知道你搞研发时候到底看没看过芯片资料,485芯片在输入断开的情况下,RXD是输出高电平的。这个问题拿脑袋想都想得通—— 如果一个485设备,在不插电缆的时候,RXD输出为低或者有信号,单片机不是要疯了{:50:} |
|
|
|
|
|
再给你点教训:
运行某个你不希望的函数,是软件上的问题,不要去找借口说这个单片机可以对,那个不能对,芯片出问题的概率小于你买彩票中奖的概率,你现在应该静下心来找,这个函数为什么被运行了,也许在硬件和软件设计上有你根本没有考虑到的漏洞或者边界情况!没有经过这样历练出来的工程师,始终只是一个模仿者而不是开发者! |
|
|
|
|
|
我经验太少了。以前没做过通信,都是单机小产品。这次真是见笑了。
|
|
|
|
|
|
LZ万用表量一下,能否告诉我你的485总线的电阻值是多少?。
标准是大于50欧姆,按照你的(错误)电路,如果接入8个从站,总线电阻值为120/8 = 15 欧姆!从站越多,阻值越小;485还怎么传输? 所以,当你接入2个从站时,总线阻值为60欧姆,一切正常;接多了,总线阻抗不正常了。工作异常。 |
|
|
|
|
|
三个120并联等于40欧姆,近距离没什么问题,30欧姆以上实验都没问题。实验结果而已。产品可不行,算设计错误,最后原因查出来评不上工程师。
我的系统接了80个从机,最远800米。只需要在800米双绞线两端焊2个120欧姆即可;板子上无需加电阻。 |
|
|
|
|
|
下载程序时,必须保证半双工485芯片 75176 处于输出状态,也就是第2/3管脚RE/DE 必须为低电平! 如图,这只要在2个红色X 之一位置焊接一个短路块即可;——下载程序时拔掉短路块,工作时短接短路块。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
楼主你有福了 俺翻箱倒柜就弄出这么3个自动布线的破板子...既然有485就凑合了......软件几乎没什么改动,没有对应硬件的模块程序空转就是了... 接着么就这样子,互发带有多重校验的封包,单播/组播/广播虽为变长帧,但只各加了一个参数,即7/7/6字节,内容么就是发送一个随机数,让从机根据这个随机数改变边上LED的状态...
|
|
|
|
|
|
都是大牛啊 蛋定路过 偷偷学习
|
|
|
|
|
|
好好读datasheet,我以前读资料总觉得小字无所谓,结果后来遇到问题后才发现小字有时候才是问题的关键也是致命的
|
|
|
|
|
|
看看大家的讨论,学习学习
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16907 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 21:57 , Processed in 1.137330 second(s), Total 98, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
15645