千家论坛_智能建筑与智能家居技术交流社区

标题: [原创]PD协议互转研究 [打印本页]

作者: dbkdz    时间: 2009-12-23 16:00
标题: [原创]PD协议互转研究

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

 


作者: dbkdz    时间: 2009-12-25 01:00
没人顶。
作者: wzq3714    时间: 2009-12-25 10:11

一堆的汇编代码?

结论是什么?


作者: anita    时间: 2009-12-25 10:24

好帖要顶!分享!


作者: kevin8231    时间: 2009-12-25 10:37
没人顶。





欢迎光临 千家论坛_智能建筑与智能家居技术交流社区 (http://bbs.qianjia.com/) Powered by Discuz! X3.2