ioca0中断 pic单片机_PLC与单片机(4)

该博客详细介绍了PLC如何通过232串口模块与单片机进行数据通信。内容包括总线驱动电路设计,使用ADM232进行电平转换,LM339比较器和晶体管驱动数据总线,以及单片机的接收和发送数据电路。通信协议采用PLC主动查询,单片机响应的方式,通过串口复位脉冲确保数据同步。此外,还涉及了单片机的A/D转换、地址编码及数据回传,并提供了部分程序代码。
摘要由CSDN通过智能技术生成

上一期讲的是PLC如何通过232串口模块发数据,PLC串口模块与单片机之间还需要一个总线驱动电路,下图是一种非常实用的数据总线驱动电路,图中的P1接9针插口接PLC的串口模块,IC1为ADM232电路是将串口的电平转换为TTL电平,这种IC电路上网一查一大推是常用电路,然后通过LM339比较器和晶体管Q1以及Q2驱动数据总线,这条数据总线是由4个1K电阻(这里是为了增大瓦数,可以用一个250欧姆的大电阻代替)并联上拉到24V,也就是说在没有数据或发数据“1”时总线为24V,数据“0”为8.2V,串口复位脉冲下拉到0V,接收端解码时很简单,判断大于18V为数据“1”,小于18V为“0”,小于8.2V位复位脉冲。

78eba58209ef33f02311564fd2fe5b89.png

(未完待续,下期继续讲单片机如何接收数据)。

PLC与单片机(5)

下面的电路是单片机从总线收发数据电路,单片机选用的是PIC16F882,Q5Q8是射随器为了增大总线的驱动能力,IC3是运放当比较器使用,解出总线复位脉冲到PIC16F882的C2引脚,Q14Q5解出数据到C7引脚,C6引脚通过Q6Q7向232总线回传数据,J2用于单片机地址编码输入(用短路端子接地为0悬空为1),这样一条总线可以带很多单片机,BO~B7引脚内部有上拉电路,J3为程序编程烧写接口。

fb6761e9fc42f809ed6913d6482a65f6.png

PIC单片机的编程还需要MPLAB_IDE 集成开发环境(上网一搜有很多)和KIT3编程下载器(100元左右)。

8e5357e0e7acb8268423013ab47b2f39.png

PLC与单片机的通讯方式是以PLC主动对单片机不断的查询方式进行的,单片机核对地址正确才做应答,这种通讯方式不会出现数据冲突,可靠性很高。在自动化领域单片机一般用于工件的状态监测,分为开关量和模拟量,模拟量要通过单片机内部的A/D转换器转换为数据回传PLC。

关于总线通讯协议,自己随意设定,之前定义的是PLC下行查询指令是双8位结构,例如下图。

2fb17d918f1faa7eb7ae7a99e9a529a6.png

单片机的应答也用双8位结构,因为单片机的A/D结果一般是10位或12位,剩余位用于开关量数据回传。

如何保证单片机100%的从总线接收数据并且应答回传数据,靠的是PLC输出的串口复位脉冲(接入单片机的B0引脚INT外部中断输入)用上升沿关闭串口,下降沿开启串口,这样完成单片机的串口复位。由于这个Y1串口复位脉冲是PLC发出的,所以PLC和单片机是在规定的时间段发送和接收数据,是一种很可靠的总线技术。

747822ced4771a5a7c0d7e0c648eb838.png

下面是串口复位子程序,是用汇编语言写的。

c33fa50f95d41502a35c38536f00c22a.png

PIC单片机的串口可以同时接收和发送2个8位数据,这是由于PIC单片机串口缓存结构决定的,下图是串口接收部分的汇编程序。

a8689934f39d86d7b1582b746df8c2ce.png

首先,判断地址是否相同,如果相同再判断是读还是写,如果是读指令,需要回传数据,先将数据存到TX_WWW_H和TX_WWW_L,这时自己定义的发送数据暂存器,在主程序中始终调用下面这个后台发送数据子程序,总在监测TX_WWW_H和TX_WWW_L是否为零,只要有数据就发送。

25834de5336f98ebcd04cb0a0d476abc.png

到此PLC与单片机的通讯就可以完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值