打印

PIC16F84单片机DMX接收程序

[复制链接]
2368|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzl|  楼主 | 2007-11-22 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
; 4channel DMX512 receiver
; with adress selection

; Jean-Philippe DOR
; Mei 2001
; checked 20/05/2001
;

    list p=16F84,f=inhx8m
    __config  _XT_OSC & _WDT_OFF & _PWRTE_ON
    #include <p16F84.INC>
o_count        equ     0x1A
offset        equ     0x19
d        equ     0x18
d1        equ    0x10    ; d(ata)
d2        equ     0x11
d3        equ    0x12
d4        equ    0x13
d5        equ    0x14
compt       equ    0x15    ; compteur de temps de break
ch_comp        equ    0x16    ; compteur de frame
ch_assign    equ    0x17    ; canal assigné au μC
status      equ     0x03
porta         equ     0x05
portb         equ    0x06


    org    0x00
    goto    start
    org    0x05
start    bsf    STATUS,RP0    ; Changement de bank
    movlw    0x00        ; port b out
    movwf    TRISB
    movlw    0x1F        ; portA input
    movwf    TRISA
    movlw    b'11011000'
    movwf    OPTION_REG
    movlw    b'00100000'    ; no interupt allowed
    movwf    INTCON
    bcf    STATUS,5
begin    movlw    0x00        ; init a 00 des vars
    movwf    d
    movwf    d1
    movwf     d2
    movwf    d3
    movwf    d4
      movwf    compt
    movwf    ch_assign
    movwf    o_count
    movlw    0xff
    movwf    ch_comp
    movlw     0x0f
    movwf     offset

r_ch    movf porta,0        ; Lit portA
    movwf ch_assign        ; Place le tout dans ch_assign
    rlf ch_assign,1
    movf ch_assign,0    ; rotate droit
    andlw 0x3C
    movwf ch_assign        ; Place tout dasn ch_assign
    
w_idle    btfss porta,0
    goto w_idle    

    
w_brea  btfsc porta,0        ; Attend le passage de idle(1)
    goto w_brea        ; a break(0)
    nop
    nop

    
c_brea    btfsc porta,0        ; Scrutte le break et regarde 
    goto c_time        ; grace au comptreur que c'est 
    incf compt,1        ; bien supérieur à 88μS
    goto c_brea

c_time    movf compt,0        ; check time du break
    sublw 0x10        ; 10h=16d->16x4μs=64μs
    btfsc status,0
    goto begin        ;Ce n'était pas un break

    
w_star    btfsc porta,0        ;C'était un break
    goto w_star        ;Attente du START

    incf ch_comp,1        ;????????NEW
    
w_stop btfss porta,0
    goto w_stop

w_sc1    clrf d    
w_sc    btfsc porta,0        ;Attente SC channel 1
    goto w_sc
    bcf status,0         
    incf ch_comp,1        ;????????NEW c'était NOP ???
    
    
    
    movf porta,0        ;bit 0
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 1
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 2
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 3
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 4
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 5
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 6
    andlw 0x01
    iorwf d,1
    rrf d,1

    movf porta,0        ;bit 7
    andlw 0x01
    iorwf d,1
    rrf d,1

    rrf d,1            ;remise en ordre
        
    movf     offset,0
    addwf     ch_comp,0
    movwf    FSR
    movf     d,0
    movwf    INDF

    incf    o_count,1
    movf    o_count,0
    bcf    status,2
    xorlw    0x04
    btfss    status,2
    goto suite

c_offs    clrf o_count
    movlw 0x04
    subwf offset,1
    
    

suite    bcf status,0        ;Clear bit cy
    movf ch_assign,0    ;w=ch_assign
    subwf ch_comp,0        ;d lww=ch_comp-ch_assign
    btfss status,0        ;test cy    
    goto w_sc1        ;NON
    
ch1    bcf status,2
    movf d1,0
    xorlw 0xff
    btfsc status,2
    goto on1
    goto off1

on1    bsf portb,0
    goto ch2

off1    bcf portb,0
    

ch2    bcf status,2
    movf d2,0
    xorlw 0xff
    btfsc status,2
    goto on2
    goto off2

on2    bsf portb,2
    goto ch3    

off2    bcf portb,2
     

ch3    bcf status,2
    movf d3,0
    xorlw 0xff
    btfsc status,2
    goto on3
    goto off3

on3    bsf portb,4
    goto ch4

off3    bcf portb,4

ch4    bcf status,2
    movf d4,0
    xorlw 0xff
    btfsc status,2
    goto on4
    goto off4

on4    bsf portb,6
    goto fin 

off4    bcf portb,6

fin    bcf portb,1
    bcf portb,3
    bcf portb,5
    bcf portb,7
    goto begin
    
    end

相关帖子

沙发
ayb_ice| | 2007-11-23 08:09 | 只看该作者

这是要干啥

使用特权

评论回复
板凳
ldyeah| | 2007-11-23 13:49 | 只看该作者

是呀,干啥?

让我们欣赏下?
谢谢拉~

使用特权

评论回复
地板
xzl|  楼主 | 2007-11-23 21:20 | 只看该作者

技术交流

使用特权

评论回复
5
gyt| | 2007-11-24 11:57 | 只看该作者

支持一下

使用特权

评论回复
6
hotpower| | 2007-11-24 12:14 | 只看该作者

现在看来是有点晕~~~

使用特权

评论回复
7
兰天白云| | 2007-11-24 13:20 | 只看该作者

hotpower大叔也晕?

使用特权

评论回复
8
xzl|  楼主 | 2007-11-24 21:42 | 只看该作者

是四个通道的接收

不知为什么火狐上传不了图片

使用特权

评论回复
9
snailled| | 2012-4-1 17:03 | 只看该作者
看不懂汇编,:Q

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xzl

183

主题

3259

帖子

8

粉丝