?? source.asm
字號:
LIST P=16F877A
INCLUDE "P16F877A.INC"
;*************************************************
RANDOM EQU 20H
CLOCK1 EQU 21H
CLOCK2 EQU 22H
COUNTERL EQU 23H
COUNTERH EQU 24H
CNT1 EQU 25H
CNT2 EQU 26H
CNT EQU 27H
TEMP1 EQU 28H
TEMP2 EQU 29H
TEMP3 EQU 2AH
RLT EQU 2BH
LED0 EQU 2CH
LED1 EQU 2DH
LED2 EQU 2EH
LED3 EQU 2FH
;*************************************************
ORG 00H
GOTO START
; nop
START
BSF STATUS,RP0
BCF STATUS,RP1
CLRF TRISB
CLRF TRISC
CLRF TRISD
MOVLW 0FFH
MOVWF TRISA
MOVLW 06H
MOVWF ADCON1
BCF STATUS,RP0
LOOP2
MOVLW 00H
MOVWF PORTC
MOVWF PORTD
MOVWF COUNTERL ;計數位初始化,清零
MOVWF COUNTERH
LOOP1
INCF RANDOM,1 ;得隨機數,共256種可能性
BTFSS PORTA,0
GOTO LOOP1 ;掃描按鈕開關
MOVLW 0FFH ;按鍵后燈滅
MOVWF PORTD
MOVLW 00H
MOVWF PORTB
CALL DELAY ;延時隨機時間
MOVLW 00H
MOVWF PORTD ;重新發光
;***************************************************
LOOP3
BTFSC PORTA,0
GOTO LOOP4 ;從loop4跳出到LED輸出
INCFSZ COUNTERL,F
GOTO TIME
INCF COUNTERH,F
TIME
CALL TIMER
GOTO LOOP3
LOOP4
CALL BCD
CALL GETLED
LOOP5
MOVLW 01H ;led輸出
MOVWF PORTC
MOVF LED0,0
CALL TABLE
MOVWF PORTB
CALL TIMER
MOVLW 02H
MOVWF PORTC
MOVF LED1,0
CALL TABLE
MOVWF PORTB
CALL TIMER
MOVLW 04H
MOVWF PORTC
MOVF LED2,0
CALL TABLE
MOVWF PORTB
CALL TIMER
MOVLW 08H
MOVWF PORTC
MOVF LED3,0
CALL TABLE
MOVWF PORTB
CALL TIMER
; BTFSC PORTA,0
; GOTO LOOP2
GOTO LOOP5
;**************************************************
; 子程序
;**************************************************
;*******************隨機時間產生*******************
DELAY
D2 MOVLW 0FFH
MOVWF CLOCK2
D1 MOVLW 05FH
MOVWF CLOCK1 ;first TURN
D3 DECFSZ CLOCK1
GOTO D3
DECFSZ CLOCK2
GOTO D1
decfsz RANDOM
goto D2
RETURN
;*******1ms延時程序**************
TIMER
MOVLW D'09'
MOVWF CNT2
LO2
MOVLW D'33' ;1ms延時
MOVWF CNT1
LO1
DECFSZ CNT1,1
GOTO LO1
DECFSZ CNT2,1
GOTO LO2
RETURN
;********BCD轉換*****************
BCD
MOVF COUNTERL,W
MOVWF TEMP2
MOVF COUNTERH,W
MOVWF TEMP3
CLRF COUNTERL
CLRF COUNTERH
CLRF RLT
BCF STATUS,C
MOVLW 10H
MOVWF CNT
LOOPC
RLF TEMP2,F
RLF TEMP3,F
RLF COUNTERL,F
RLF COUNTERH,F
RLF RLT,F
DECFSZ CNT,F
GOTO ADJDEC
RETLW 0
ADJDEC
MOVLW COUNTERL
MOVWF FSR
CALL ADJBCD
MOVLW COUNTERH
MOVWF FSR
CALL ADJBCD
MOVLW RLT
MOVWF FSR
CALL ADJBCD
GOTO LOOPC
ADJBCD
MOVLW 03H
ADDWF INDF,W
MOVWF TEMP1
BTFSC TEMP1,3
MOVWF INDF
MOVLW 30H
ADDWF INDF,W
MOVWF TEMP1
BTFSC TEMP1,7
MOVWF INDF
RETLW 0
;********獲得LED片選偏移****************
GETLED
MOVF COUNTERL,W
MOVWF LED0
MOVWF LED1
SWAPF LED1,F
MOVF COUNTERH,W
MOVWF LED2
MOVWF LED3
SWAPF LED3,F
MOVLW 0FH
ANDWF LED0,F
ANDWF LED1,F
ANDWF LED2,F
ANDWF LED3,F
RETURN
;**************數碼管編碼********************
TABLE
addwf PCL,F ;相對尋址法
retlw 3FH
retlw 06H
retlw 5BH
retlw 4FH
retlw 66H
retlw 6DH
retlw 7DH
retlw 07H
retlw 7FH
retlw 6FH
;*************LED片選編碼*********************
;TABLE2
; ADDWF PCL,F
; RETLW 0EH
; RETLW 0DH
; RETLW 0BH
; RETLW 07H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -