我用了两个晚上的时刻查阅一些材料,使用三菱PLC的扩展RS485通讯板与其51单片机衔接通讯,可写PLC恣意的地址。长度可达1000米,看见网上写的都很烦且对三菱和单片机不是很熟的朋友来说有必定的阅览难度,今日将它与我们共享。期望在此基础上我们能扩展出自己想要的功用,过些时刻有空我在写个半双工的程序。
硬件部分:
我用的是天祥单片机试验板,因为没有RS485接口,我使用ADM485芯片克己了一个485接口与三菱PLC的扩展RS485通讯如图,但假如要进行半双工通讯,须将P3.0口到下载程序的RS232芯片的线断开可用一个跳线,用RS485的时分断开RS232,用RS232的时分插上跳线帽。硬件衔接如图
PLC程序:
通讯我用单片机做主机(只发送指令),PLC做从机(只接纳指令),单工单向,以便初学着把握。
格局:1位启始,8位数据,一位中止。
所以PLC寄存器D8120:0C81.
plc程序很简单不明白的能够看下三菱PLC的通讯手册。如下图:
三:单片机程序:
#include
unsigned char code tab[]={0x17,0xff};/*PLC输出的Y点数,PLC输出Y灯0125678亮*/
sbit led=P1^1; /*将RS485置为发送数据形式*/
unsigned char i;
void init()
{
SCON=0x50; /*串口中止开*/
TMOD=0x20; /*守时器设置*/
TH1=0xfd; /*守时时刻的高位*/
TL1=0xfd; /*守时时刻的低位,速度为9600BPS*/
TR1=1; /*守时器开*/
EA=1; /*开总中止*/
TI=0; /*复位串口中止*/
led=1; /*将RS485置为发送数据形式*/
}
void main()
{
init(); /*调用子程序*/
for(i=0;i<2;i++)
{
SBUF=tab[i]; /*将数据发送到串口*/
while(!TI); /*等候串口数据发送完毕*/
TI=0; /*复位串口中止*/
}
}
四:留意点。
1:RS485的线不能接反,不然数据将不正确。
2:单片机的晶振要挑选11.0592MHZ,不然PLC接纳到数据也不正确。
3:RS485芯片的电源不能接反,不然要烧坏芯片。