监控行业中往往需要用到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
|