我的max485单片机程序如下,中断接收数据,主程序中判断收到4个字节数据就转发。
PC串口转485通过MAX485与单片机UART连接。调试助手发送单个字节,发送4次,能正确收到转发回来的数据。一次发送4个字节,则必须发送两次,才能收到转发回来的4个字节数据,不过该数据是两次发送的前2个字节。
用示波器观察MAX485的数据接收端RI,波形很好。无论发送单字节还是4字节,波形都正确!问题应该在程序。请各位帮助我分析一下程序,我可能陷入某个误区。
相信你的 RE 与 DE 是连接在一起的,如果不是,你的电路就成了另类.与 RE/DE 连接在一起的那条单片机I/O, 我命名为 CTRL_PIN ,至于是哪条,你才知道.
其实发送与接收与普通的 232 有 99.9% 的相似, 只是多了两行,看下面
发送程序时:
CTRL_PIN = 1// 输出高电平,允许MAX485输出差分信号.
UART232_SENDCHAR() // 普通232发送函数
CTRL_PIN = 0// 输出低电平,禁止发送,允许接收.
接收程序时: 只要保证 CTRL_PIN = 0 就可以了,无论你是采用中断,还是沦询的方式接收字符,与普通串口用法一样
首先,MAX485是单5V供电的,所以你应当改用MAX3485或其它的3.3V的485收发器。其次,C1、C2两个电容不应该是同一个值,一般一个224和一个222之类,相差两个数量级。
再次,端口的防护一般使用TVS管。普通稳压管的响应速度太慢,两个稳压管反接起不到好的保护效果。
“这个PA0我应该怎么写程序”
PA0拉高电平时,收发器处于发送状态;PA0拉低电平时,收发器处于接收状态。你需要根据自己的通信协议,规划好节点接管总线的时序,平时处于接收状态,拿到令牌或分配到自己的时间片以后就切换到发送状态发送数据包。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)