监控行业中往往需要用到PELCO-P与PLEOC-D协议互相转换,在研究PELCO协议需要用1颗mcu来收取外部PELCO-P\D码,要求自动识别PD代码收进来,在RS485通信中,收取命令的波特率要求可以通过硬件更改。由于输入是PD自动识别,输出必须可选P还是D输出,故在硬件设置2位开关来输出PD协议,输出波特率也一样通过波特率来选择。
在MCU软件里,用过读取P0口拨码引脚可得到以下设置波特率与选择PD输出代码。
mov a,p0
cpl a
mov savep0,a
anl a,#11000000b
cjne a,#01000000b,top1
setb tod
clr top
ajmp baudd
top1: cjne a,#10000000b,baudd
setb top
clr tod
baudd: mov a,savep0
anl a,#00000011b
cjne a,#00000000b,baud1;1200 输入波特率,拨码第一,第二位为选择输入波特率
mov tl1,#98h
mov th1,#98h
ljmp baudend
baud1: cjne a,#00000001b,baud2;2400
mov tl1,#0cch
mov th1,#0cch
ljmp baudend
baud2: cjne a,#00000010b,baud3;4800
mov tl1,#0e6h
mov th1,#0e6h
ljmp baudend
baud3: cjne a,#00000011b,err1;9600
mov tl1,#0f3h
mov th1,#0f3h
ljmp baudend
err1: ajmp init
baudend:
mov t2con,#00010100b
baud5: mov a,savep0
anl a,#00001100b ;以下XTAL为24M赋值
cjne a,#00001100b,baud6;9600 输出波特率,拨码第三,第四位为选择输出波特率
mov rcap2l,#0b2h;#0efh
mov rcap2h,#255
ajmp proto5
baud6: cjne a,#00001000b,baud7;4800
mov rcap2l,#64h
mov rcap2h,#255
ajmp proto5
baud7: cjne a,#00000100b,baud8;2400
mov rcap2l,#0c8h
mov rcap2h,#0feh
ajmp proto5
baud8: cjne a,#00000000b,err1;1200
mov rcap2l,#08fh
mov rcap2h,#0fdh
proto5: setb tr1
clr ie1
clr ie0
setb es
setb ea
PD自动识别协议代码如下:
sinform: jb headp,informp ;D协议接收
informd: cjne r0,#sbuf4,formd9
cjne a,sum,formpr1
ljmp formp5
formd9: inc r0
mov @r0,a
add a,sum
mov sum,a
ljmp srintr0
informp: cjne r0,#sbuf4,formp2 ;P协议接收
cjne a,#0afh,formpr1
inc r0
ljmp srintr0
formpr1: clr addrf
ljmp srintr0
formp2: jnc formp3
inc r0
mov @r0,a
xrl a,sum
mov sum,a
ljmp srintr0
formp3: xrl a,#0a0h
xrl a,#0afh
cjne a,sum,formpr1
formp5: clr addrf
接收完的字节保存在SBUF0-SBUF8缓冲里。
此时可用JB命令逐一判断PAN/TILT与camera动作命令。
mov a,sbuf2
jb acc.1,tright
jb acc.2,tleft0
jb acc.3,tup0
jb acc.4,tdown0
jb acc.5,ttele0
jb acc.6,twide0
jb acc.7,tfar0
mov a,sbuf1
jb acc.0,tnear0
jb acc.1,topen0
jb acc.2,tclose0
mov buf4,#0
jb upf,toupstop
jb downf,todownstop
jb leftf,toleftstop
jb rightf,torightstop
jb openf,toopenstop
jb closef,toclosestop
jb nearf,tonearstop
jb farf,tofarstop
jb widef,towidestop
jb telef,totelestop
ljmp srintr0 退出串口中断
由于用到了P协议,如果控制设备地址和终端球机地址设置一样情况下,球机仍不受控,则要把终端地址加1,即若控制端地址1号,则球机地址要2号!
转换器输入为自动识别P\D两种协议!
码转内部有一只8位拨码开关,其定义如下:
拨码开关ON有效 注意:每次更改拨码开关,均需要重新给码转上电才有效!
输入波特率 第1位 第2位
1200bit/S OFF OFF
2400bit/S ON OFF
4800bit/S OFF ON
9600bit/S ON ON
输出波特率 第3位 第4位
1200bit/S OFF OFF
2400bit/S ON OFF
4800bit/S OFF ON
9600bit/S ON ON
拨码开关第5、6位为空,预留用
输出协议 第7位 第8位
PELCO-D协议 ON OFF
PELCO-P协议 OFF ON
一堆的汇编代码?
结论是什么?
好帖要顶!分享!
欢迎光临 千家论坛_智能建筑与智能家居技术交流社区 (http://bbs.qianjia.com/) | Powered by Discuz! X3.2 |