金沙js5线路(中国)有限公司

技术热线: 4007-888-234

控制霓虹灯闪烁的例程

更新时间: 2019-03-26
阅读量:2012

源程序:

 

;********************************************************
;
;                  LED flash control 2
;
;                                 Device : PIC16F84A
;                                 Clock  : 4MHz
;                                 Author : Seiichi Inoue
;********************************************************

 

        list            p=pic16f84a
        include         p16f84a.inc
        __config _hs_osc & _wdt_off & _pwrte_on & _cp_off
        errorlevel      -302    ;Eliminate bank warning

 

;****************  Label Definition  ********************

cblock  h'0c'
loop_cnt                        ;Loop counter for LED cnt
led_data0                       ;LED data 0
led_data1                       ;LED data 1
led01                           ;LED 01 pattern
led10                           ;LED 10 pattern
led11                           ;LED 11 pattern
port_work                       ;LED data save area
counter                         ;Software timer counter
ptn_save                        ;Pattern number save area
ptn_counter                     ;Pattern counter
w_save                          ;W register save area
s_save                          ;STATUS regi save area
        endc

 

ra0     equ     00              ;RA0 bit
ra1     equ     01              ;RA1 bit
ra2     equ     02              ;RA2 bit

;**************** Speed control data ********************
speed   equ     1               ;100ms (+1=50ms)

 

;*************  Brightness control data  ****************
led1    equ     b'11111110'     ;(01) almost dim
led2    equ     b'11111010'     ;(10) less bright
led3    equ     b'11110000'     ;(11) bright

 

;*************  Pattern Data Definition  ****************
; 1 bright  1 less bright  0 almost dim  0 dim
; 1         0              1             0

 

;******  Pattern 0  ******
p000    equ     b'00000000'
p001    equ     b'00000000'

 

p010    equ     b'10000001'
p011    equ     b'10000001'

 

p020    equ     b'11000011'
p021    equ     b'01000010'

 

p030    equ     b'01100110'
p031    equ     b'10100101'

 

p040    equ     b'00111100'
p041    equ     b'01011010'

 

p180    equ     b'11000000'
p181    equ     b'10100000'

 

p190    equ     b'10000000'
p191    equ     b'01000000'

 

p1a0    equ     b'00000000'
p1a1    equ     b'10000000'

 

;******  Pattern 2  ******
p200    equ     b'00000000'
p201    equ     b'00000000'

 

p210    equ     b'10000000'
p211    equ     b'10000000'

 

p220    equ     b'11000000'
p221    equ     b'01000000'

 

p230    equ     b'01100000'
p231    equ     b'10100000'

 

p240    equ     b'00110000'
p241    equ     b'01010000'

 

p250    equ     b'00011000'
p251    equ     b'00101000'

 

p260    equ     b'00001100'
p261    equ     b'00010100'

 

p270    equ     b'00000110'
p271    equ     b'00001010'

;****************  Program Start  ***********************
        org     0               ;Reset Vector
        goto    init
        org     4               ;Interrupt Vector
        goto    int

 

;******************  Initial Process  *******************
init
;*** Set Port mode
        bsf     status,rp0      ;Change to Bank1
        movlw   b'00000111'     ;RA2-0:IN mode
        movwf   trisa           ;Set TRISA reg
        movlw   b'00000000'     ;RB7-0:OUT mode
        movwf   trisb           ;Set TRISB reg

 

;*** Set Option reg
        movlw   b'10000111'     ;RBPU=OFF,PSA=0,PS=1:256
        movwf   option_reg      ;Set OPTION_REG
        bcf     status,rp0      ;Change to Bank0

 

;*** Set work area
        clrf    led_data0       ;Clear LED data0
        clrf    led_data1       ;Clear LED data1
        movlw   led1            ;Read 01 pattern
        movwf   led01           ;Set  01 pattern
        movlw   led2            ;Read 10 pattern
        movwf   led10           ;Set  10 pattern
        movlw   led3            ;Read 11 pattern
        movwf   led11           ;Set  11 pattern
        clrf    port_work       ;Clear LED data save area
        movlw   speed           ;Read speed data
        addlw   d'1'            ;+1 addition
        movwf   counter         ;Set counter
        movlw   d'1'            ;Set pattern data
        movwf   ptn_save        ;Set pattern 0
        clrf    ptn_counter     ;Clear pattern counter

 

;*** Set TMR0 reg
        movlw   d'61'           ;256-50ms/0.256ms = 61
        movwf   tmr0            ;Set 50msec to TMR0
        movlw   b'10100000'     ;GIE=1,TOIE=1
        movwf   intcon          ;Interruption enable

 

;****************  LED control Process ******************
loop
        movlw   d'4'            ;Set loop counter data
        movwf   loop_cnt        ;Set loop counter
loop1
        movlw   d'1'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 1 ?
        goto    next2           ;No.
        goto    process4        ;Jump to Process4
next2
        movlw   d'2'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 2 ?
        goto    next3           ;No.
        goto    process3        ;Jump to Process3

next3
        movlw   d'3'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 3 ?
        goto    next4           ;No.
        goto    process2        ;Jump to Process2
next4
        movlw   d'4'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 4 ?
        goto    loop            ;No. illegal
        goto    process1        ;Jump to Process1

 

led_cont
        movfw   port_work       ;Read PORT WORK data
        movwf   portb           ;Set PORTB
next
        decfsz  loop_cnt,f      ;Count down
        goto    loop1           ;Next Process
        goto    loop            ;Next Period

 

process1
;****************** bit0 for process1 *******************
        btfss   led_data0,0     ;1x ?
        goto    p10_0x          ;No.
        btfss   led_data1,0     ;11 ?
        goto    p10_10          ;Jump to 10 process
        goto    p10_11          ;Jump to 11 process
p10_0x
        btfsc   led_data1,0     ;01 ?
        goto    p10_01          ;Jump to 01 process

p10_00
        goto    p10_set         ;LED off

 

p10_01
        btfss   led01,0         ;Data = 1 ?
        goto    p10_clear       ;No.
        goto    p10_set         ;Yes.

 

p10_10
        btfss   led10,0         ;Data = 1 ?
        goto    p10_clear       ;No.
        goto    p10_set         ;Yes.

 

p10_11
        btfss   led11,0         ;Data = 1 ?
        goto    p10_clear       ;No.

p10_set
        bsf     port_work,0     ;Set bit0
        goto    bit1_process1
p10_clear
        bcf     port_work,0     ;Clear bit0

 

bit1_process1
;****************** bit1 for process1 *******************
        btfss   led_data0,1     ;1x ?
        goto    p11_0x          ;No.
        btfss   led_data1,1     ;11 ?
        goto    p11_10          ;Jump to 10 process
        goto    p11_11          ;Jump to 11 process
p11_0x
        btfsc   led_data1,1     ;01 ?
        goto    p11_01          ;Jump to 01 process

 

p11_00

 goto    p11_set         ;LED off

 

p11_01
        btfss   led01,0         ;Data = 1 ?
        goto    p11_clear       ;No.
        goto    p11_set         ;Yes.

 

p11_10
        btfss   led10,0         ;Data = 1 ?
        goto    p11_clear       ;No.
        goto    p11_set         ;Yes.

 

p11_11
        btfss   led11,0         ;Data = 1 ?
        goto    p11_clear       ;No.

p11_set
        bsf     port_work,1     ;Set bit1
        goto    bit2_process1
p11_clear
        bcf     port_work,1     ;Clear bit1

 

bit2_process1
;****************** bit2 for process1 *******************
        btfss   led_data0,2     ;1x ?
        goto    p12_0x          ;No.
        btfss   led_data1,2     ;11 ?
        goto    p12_10          ;Jump to 10 process
        goto    p12_11          ;Jump to 11 process
p12_0x
        btfsc   led_data1,2     ;01 ?
        goto    p12_01          ;Jump to 01 process

 

p12_00
        goto    p12_set         ;LED off

 

p12_01
        btfss   led01,0         ;Data = 1 ?
        goto    p12_clear       ;No.
        goto    p12_set         ;Yes.

 

p12_10

 btfss   led10,0         ;Data = 1 ?
        goto    p12_clear       ;No.
        goto    p12_set         ;Yes.

 

p12_11
        btfss   led11,0         ;Data = 1 ?
        goto    p12_clear       ;No.

 

p12_set
        bsf     port_work,2     ;Set bit2
        goto    bit3_process1
p12_clear
        bcf     port_work,2     ;Clear bit2

 

bit3_process1
;****************** bit3 for process1 *******************
        btfss   led_data0,3     ;1x ?
        goto    p13_0x          ;No.
        btfss   led_data1,3     ;11 ?
        goto    p13_10          ;Jump to 10 process
        goto    p13_11          ;Jump to 11 process
p13_0x
        btfsc   led_data1,3     ;01 ?
        goto    p13_01          ;Jump to 01 process

 

p13_00
        goto    p13_set         ;LED off

 

p13_01
        btfss   led01,0         ;Data = 1 ?
        goto    p13_clear       ;No.
        goto    p13_set         ;Yes.

 

 



XML 地图