?? 4-led-2.asm
字號:
LIST P=16F876A
INCLUDE "P16F876A.INC"
#DEFINE DELAYTIME 0AH ;CONTROL THE cycle number of timer
;***************************************
;定義變量區
;***************************************
COUNT EQU 20H
COUNT1 EQU 21H
COUNT2 EQU 22H
COUNT3 EQU 23H
CYCLE_NUM EQU 24H
DELAY_NUM EQU 25H
FLAG EQU 26H
W_TEMP EQU 71H
STATUS_TEMP EQU 72H
ORG 0X0000
RESET
NOP
GOTO START
;***************************************
;中斷入口程序
;***************************************
ORG 0X0004
GOTO INT_SERVE
;***************************************
;主程序
;***************************************
ORG 0010H
START
BCF STATUS,RP1
BCF STATUS,RP0
BCF INTCON,GIE
CALL INITIO
CALL INITTMR1
CALL INITINT
BSF INTCON,GIE
CLRF FLAG
NO_DISPLAY
CLRF FLAG
CLRF DELAY_NUM
MOVLW 30H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0FH
MOVWF PORTC
TEST_RB0
BTFSC PORTB,0
GOTO A_TEST_RB0
GOTO TEST
A_TEST_RB0
CALL DELAY
GOTO TEST_RB0
TEST CALL LONGDELAY
BTFSC PORTB,0
GOTO TEST_RB0
;The programme test the 0 bit of the flag.
;if the bit 0 is '0',the system will display
;the normal data.if the bit is '1',the register
;of delay1 will subtract 1 when the timer1 interrupt
;the data displayed will not be changed till
;the delay is subtracted to 0.
;****************************************************
;The first time
BEGIN
MOVLW 06H
MOVWF DELAY_NUM
BSF FLAG,0
OUT_1
NOP
TEST_RB0_1
BTFSC PORTB,0
GOTO A_TEST_RB0_1
GOTO TEST_1
A_TEST_RB0_1
CALL DELAY
BTFSC PORTB,0
GOTO NO_DISPLAY
GOTO TEST_RB0_1
TEST_1
CALL DELAY
BTFSC PORTB,0
GOTO TEST_RB0_1
MOVLW 32H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0CH
MOVWF PORTC
CALL DELAY
MOVLW 11H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0DH
MOVWF PORTC
CALL DELAY
MOVLW 23H
MOVWF PORTA
MOVLW 0C2H
MOVWF PORTB
MOVLW 17H
MOVWF PORTC
CALL DELAY
MOVLW 30H
MOVWF PORTA
MOVLW 0ACH
MOVWF PORTB
MOVLW 29H
MOVWF PORTC
;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over
BTFSS FLAG,1
GOTO OUT_1
BCF FLAG,1
;************************************************
;************************************************
;The second time
MOVLW 06H
MOVWF DELAY_NUM
BSF FLAG,0
OUT_2
NOP
TEST_RB0_2
BTFSC PORTB,0
GOTO A_TEST_RB0_2
GOTO TEST_2
A_TEST_RB0_2
CALL DELAY
BTFSC PORTB,0
GOTO NO_DISPLAY
GOTO TEST_RB0_2
TEST_2
CALL DELAY
BTFSC PORTB,0
GOTO TEST_RB0_2
MOVLW 32H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0CH
MOVWF PORTC
CALL DELAY
MOVLW 12H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0DH
MOVWF PORTC
CALL DELAY
MOVLW 27H
MOVWF PORTA
MOVLW 0C2H
MOVWF PORTB
MOVLW 17H
MOVWF PORTC
CALL DELAY
MOVLW 30H
MOVWF PORTA
MOVLW 0AEH
MOVWF PORTB
MOVLW 49H
MOVWF PORTC
;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over
BTFSS FLAG,1
GOTO OUT_2
BCF FLAG,1
;************************************************
;************************************************
;The third time
MOVLW 06H
MOVWF DELAY_NUM
BSF FLAG,0
OUT_3
NOP
TEST_RB0_3
BTFSC PORTB,0
GOTO A_TEST_RB0_3
GOTO TEST_3
A_TEST_RB0_3
CALL DELAY
BTFSC PORTB,0
GOTO NO_DISPLAY
GOTO TEST_RB0_3
TEST_3
CALL DELAY
BTFSC PORTB,0
GOTO TEST_RB0_3
MOVLW 32H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0CH
MOVWF PORTC
CALL DELAY
MOVLW 13H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0DH
MOVWF PORTC
CALL DELAY
MOVLW 21H
MOVWF PORTA
MOVLW 0C2H
MOVWF PORTB
MOVLW 17H
MOVWF PORTC
CALL DELAY
MOVLW 30H
MOVWF PORTA
MOVLW 0B2H
MOVWF PORTB
MOVLW 29H
MOVWF PORTC
;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over
BTFSS FLAG,1
GOTO OUT_3
BCF FLAG,1
;************************************************
;************************************************
;The fourth time
MOVLW 06H
MOVWF DELAY_NUM
BSF FLAG,0
OUT_4
NOP
TEST_RB0_4
BTFSC PORTB,0
GOTO A_TEST_RB0_4
GOTO TEST_4
A_TEST_RB0_4
CALL DELAY
BTFSC PORTB,0
GOTO NO_DISPLAY
GOTO TEST_RB0_4
TEST_4
CALL DELAY
BTFSC PORTB,0
GOTO TEST_RB0_4
MOVLW 32H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0CH
MOVWF PORTC
CALL DELAY
MOVLW 13H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0DH
MOVWF PORTC
CALL DELAY
MOVLW 29H
MOVWF PORTA
MOVLW 0C2H
MOVWF PORTB
MOVLW 17H
MOVWF PORTC
CALL DELAY
MOVLW 30H
MOVWF PORTA
MOVLW 0B0H
MOVWF PORTB
MOVLW 39H
MOVWF PORTC
;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over
BTFSS FLAG,1
GOTO OUT_4
BCF FLAG,1
;************************************************
;************************************************
;The fifth time
MOVLW 06H
MOVWF DELAY_NUM
BSF FLAG,0
OUT_5
NOP
TEST_RB0_5
BTFSC PORTB,0
GOTO A_TEST_RB0_5
GOTO TEST_5
A_TEST_RB0_5
CALL DELAY
BTFSC PORTB,0
GOTO NO_DISPLAY
GOTO TEST_RB0_5
TEST_5
CALL DELAY
BTFSC PORTB,0
GOTO TEST_RB0_5
MOVLW 32H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0CH
MOVWF PORTC
CALL DELAY
MOVLW 12H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0DH
MOVWF PORTC
CALL DELAY
MOVLW 25H
MOVWF PORTA
MOVLW 0C2H
MOVWF PORTB
MOVLW 17H
MOVWF PORTC
CALL DELAY
MOVLW 30H
MOVWF PORTA
MOVLW 0AEH
MOVWF PORTB
MOVLW 29H
MOVWF PORTC
;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over
BTFSS FLAG,1
GOTO OUT_5
BCF FLAG,1
;************************************************
;************************************************
;The sixth time
MOVLW 06H
MOVWF DELAY_NUM
BSF FLAG,0
OUT_6
NOP
TEST_RB0_6
BTFSC PORTB,0
GOTO A_TEST_RB0_6
GOTO TEST_6
A_TEST_RB0_6
CALL DELAY
BTFSC PORTB,0
GOTO NO_DISPLAY
GOTO TEST_RB0_6
TEST_6
CALL DELAY
BTFSC PORTB,0
GOTO TEST_RB0_6
MOVLW 32H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0CH
MOVWF PORTC
CALL DELAY
MOVLW 11H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0DH
MOVWF PORTC
CALL DELAY
MOVLW 29H
MOVWF PORTA
MOVLW 0C2H
MOVWF PORTB
MOVLW 17H
MOVWF PORTC
CALL DELAY
MOVLW 30H
MOVWF PORTA
MOVLW 0ACH
MOVWF PORTB
MOVLW 19H
MOVWF PORTC
;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over
BTFSS FLAG,1
GOTO OUT_6
BCF FLAG,1
GOTO BEGIN
;************************************************
INITIO
BSF STATUS,RP0
MOVLW 00H;
MOVWF TRISA
MOVLW 01H
MOVWF TRISB
MOVLW 00H
MOVWF TRISC
BCF STATUS,RP0
MOVLW 30H
MOVWF PORTA
MOVLW 0E0H
MOVWF PORTB
MOVLW 0EH
MOVWF PORTC
RETURN
INITTMR1
;******************************
;INITIAL TMR1,TMR1=0B DB,WHEN
;THE TIMER OVERFLOW,THE DELAY IS 0.5S
;******************************
MOVLW 01H
MOVWF TMR1L
MOVLW 1FH
MOVWF TMR1H
MOVLW 31H
MOVWF T1CON
RETURN
INITINT
;******************************
;INITIAL THE INTERRUPT
;******************************
BSF INTCON,PEIE
BSF STATUS,RP0
BSF PIE1,TMR1IE
BCF STATUS,RP0
RETURN
DELAY
MOVLW 20H
MOVWF COUNT
DLOOP
DECFSZ COUNT,F
GOTO DLOOP
RETURN
;******************************
;*LONGDELAY 長延時子程序
;******************************
LONGDELAY
CLRF COUNT
CLRF COUNT1
MOVLW 0X03
MOVWF COUNT2
LDLOOP
DECFSZ COUNT,F
GOTO LDLOOP
DECFSZ COUNT1,F
GOTO LDLOOP
DECFSZ COUNT2,F
GOTO LDLOOP
RETURN
INT_SERVE
MOVWF W_TEMP
MOVF STATUS,W
MOVWF STATUS_TEMP
BCF STATUS,RP0
BCF STATUS,RP1
BCF PIR1,TMR1IF
MOVLW 01H
MOVWF TMR1L
MOVLW 1FH
MOVWF TMR1H
MOVLW 31H
MOVWF T1CON
BTFSS FLAG,0
GOTO BACK
DECFSZ DELAY_NUM,F
GOTO BACK
BSF FLAG,1
BCF FLAG,0
BACK
MOVF STATUS_TEMP,W
MOVWF STATUS
MOVF W_TEMP,W
RETFIE
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -