;**************************************************** ; 5:L 6:R 7:BR ; DOTMATRIX LED CONTROL ; PROSESSOR1 ; ;**************************************************** LIST P=PIC16F628 INCLUDE "P16F628.INC" __CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _WDT_OFF & _LVP_OFF ; ; Data Define ; BITC EQU 020H CNT1 EQU 021H CNT2 EQU 022H CNT3 EQU 023H CNT4 EQU 024H PHASE EQU 025H TEMP EQU 026H TEMP2 EQU 027H MES1 EQU 028H MES2 EQU 029H MES3 EQU 02AH MES4 EQU 02BH CNT EQU 02CH INDEX EQU 02DH W_TEMP EQU 02EH STATUS_TEMP EQU 02FH LCNT EQU 030H RCNT EQU 031H DELAY EQU 032H DELAY2 EQU 033H GO_STATUS EQU 034H GO_RFLCNT EQU 035H ;PORTA LATCH SET 1 S1 SET 7 S2 SET 6 S3 SET 3 CLK SET 2 STROBE SET 0 ;PORTB YL SET 3 YR SET 2 RED SET 0 WK1 SET 7 WK2 SET 6 ; ; Initialize Routine ; ORG 0 START BSF STATUS,RP0 movlw 0F0h movwf TRISB CLRF TRISA BSF STATUS,RP1 movlw 080h movwf OPTION_REG BCF STATUS,RP1 BCF STATUS,RP0 movlw 0ffh movwf CMCON CLRF PORTA CLRF PORTB BSF PORTA,LATCH MOVLW 030h MOVWF DELAY MOVWF DELAY2 ;--------------------------------------- Main Routine ---------------------------------- MAIN BTFSC PORTB,WK1 CALL LEFT BTFSC PORTB,WK2 CALL RIGHT CALL LED2 DECFSZ DELAY,F goto MAIN BTFSS DELAY2,0 GOTO GODOWN GOTO GOUP GOUP DECF RCNT,F MOVFW RCNT ADDLW 01h BTFSC STATUS,Z CALL NEXTDOWN MOVFW RCNT ANDLW 0fh MOVWF RCNT MOVLW 030h MOVWF DELAY goto MAIN NEXTDOWN INCF DELAY2,F MOVLW 01h MOVWF RCNT RETURN GODOWN INCF RCNT,F MOVFW RCNT ANDLW 0fh BTFSC STATUS,Z CALL NEXTUP MOVWF RCNT MOVLW 030h MOVWF DELAY goto MAIN NEXTUP INCF DELAY2,F MOVLW 0ffh MOVWF RCNT RETURN LEFT NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BTFSS PORTB,WK1 RETURN BTFSC PORTB,WK2 GOTO HAZARD bsf PORTB,YL call L1_DISP bcf PORTB,YL call S1_DISP return RIGHT NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BTFSS PORTB,WK2 RETURN BTFSC PORTB,WK1 GOTO HAZARD bsf PORTB,YR call R1_DISP bcf PORTB,YR call S1_DISP return GOTO MAIN HAZARD NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BTFSS PORTB,WK1 RETURN BTFSS PORTB,WK2 RETURN CLRF MES1 CLRF MES2 CLRF MES3 CLRF MES4 CALL LED bsf PORTB,YR bsf PORTB,YL call T1SEC call T1SEC call T1SEC call T1SEC call T1SEC bcf PORTB,YR bcf PORTB,YL call T1SEC call T1SEC call T1SEC call T1SEC call T1SEC return GOTO MAIN ;------------------------------- LED DISPLEY Subrountines ------------------------- ;MES1 ... first 8bit ;MES2 ... last 8bit ;CNT ... the number of row ;------------------------------------------------------------------------------------ LED ;-----------------------0 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,7 BSF TEMP,S2 BTFSC MES1,7 BSF TEMP,S3 MOVFW CNT SUBLW 00h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------1 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,6 BSF TEMP,S2 BTFSC MES1,6 BSF TEMP,S3 MOVFW CNT SUBLW 01h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------2 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,5 BSF TEMP,S2 BTFSC MES1,5 BSF TEMP,S3 MOVFW CNT SUBLW 02h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------3 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,4 BSF TEMP,S2 BTFSC MES1,4 BSF TEMP,S3 MOVFW CNT SUBLW 03h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------4 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,3 BSF TEMP,S2 BTFSC MES1,3 BSF TEMP,S3 MOVFW CNT SUBLW 04h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------5 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,2 BSF TEMP,S2 BTFSC MES1,2 BSF TEMP,S3 MOVFW CNT SUBLW 05h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------6 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,1 BSF TEMP,S2 BTFSC MES1,1 BSF TEMP,S3 MOVFW CNT SUBLW 06h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------7 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES3,0 BSF TEMP,S2 BTFSC MES1,0 BSF TEMP,S3 MOVFW CNT SUBLW 07h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------8 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,7 BSF TEMP,S2 BTFSC MES2,7 BSF TEMP,S3 MOVFW CNT SUBLW 08h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------9 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,6 BSF TEMP,S2 BTFSC MES2,6 BSF TEMP,S3 MOVFW CNT SUBLW 09h BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------10 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,5 BSF TEMP,S2 BTFSC MES2,5 BSF TEMP,S3 MOVFW CNT SUBLW 0Ah BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------11 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,4 BSF TEMP,S2 BTFSC MES2,4 BSF TEMP,S3 MOVFW CNT SUBLW 0Bh BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------12 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,3 BSF TEMP,S2 BTFSC MES2,3 BSF TEMP,S3 MOVFW CNT SUBLW 0Ch BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------13 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,2 BSF TEMP,S2 BTFSC MES2,2 BSF TEMP,S3 MOVFW CNT SUBLW 0Dh BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------14 bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,1 BSF TEMP,S2 BTFSC MES2,1 BSF TEMP,S3 MOVFW CNT SUBLW 0Eh BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;-----------------------15bit------------------------- CLRF TEMP BSF TEMP,LATCH BTFSC MES4,0 BSF TEMP,S2 BTFSC MES2,0 BSF TEMP,S3 MOVFW CNT SUBLW 0Fh BTFSC STATUS,Z BSF TEMP,S1 MOVFW TEMP MOVWF PORTA BSF PORTA,CLK NOP BCF PORTA,CLK ;------------------LATCH-------------------------- BCF PORTA,LATCH NOP BSF PORTA,LATCH RETURN R1_DISP MOVLW 060H ;249回 MOVWF CNT1 ;ここまでで2サイクル R1_LOOP CALL RIGHT_MES1 DECFSZ CNT1,F ;このループは4サイクル GOTO R1_LOOP ;2+4*249-1=997 RETURN ;997+1=998*0.4usec=0.4msec L1_DISP MOVLW 060H ;249回 MOVWF CNT1 ;ここまでで2サイクル L1_LOOP CALL LEFT_MES1 DECFSZ CNT1,F ;このループは4サイクル GOTO L1_LOOP ;2+4*249-1=997 RETURN ;997+1=998*0.4usec=0.4msec S1_DISP MOVLW 060H ;249回 MOVWF CNT1 ;ここまでで2サイクル S1_LOOP CALL SIMA_MES1 DECFSZ CNT1,F ;このループは4サイクル GOTO S1_LOOP ;2+4*249-1=997 RETURN ;997+1=998*0.4usec=0.4msec RIGHT_MES1 CLRF INDEX MOVLW 0fh MOVWF CNT R_LOOP CALL R1 MOVWF MES1 CALL R2 MOVWF MES2 CALL R3 MOVWF MES3 CALL R4 MOVWF MES4 CALL LED NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF INDEX,F DECF CNT,F MOVFW INDEX SUBLW 010h BTFSS STATUS,Z GOTO R_LOOP RETURN LEFT_MES1 CLRF INDEX MOVLW 0fh MOVWF CNT L_LOOP CALL L1 MOVWF MES1 CALL L2 MOVWF MES2 CALL L3 MOVWF MES3 CALL L4 MOVWF MES4 CALL LED NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF INDEX,F DECF CNT,F MOVFW INDEX SUBLW 010h BTFSS STATUS,Z GOTO L_LOOP RETURN SIMA_MES1 CLRF INDEX MOVLW 0fh MOVWF CNT S_LOOP CALL SI1 MOVWF MES1 CALL SI2 MOVWF MES2 CALL SI3 MOVWF MES3 CALL SI4 MOVWF MES4 CALL LED NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF INDEX,F DECF CNT,F MOVFW INDEX SUBLW 010h BTFSS STATUS,Z GOTO S_LOOP RETURN ;------------------------------- Interruput Subroutine ---------------------------- LED2 CLRF INDEX MOVLW 0fh MOVWF CNT INCF GO_STATUS,F GO_LOOP CALL GO1 MOVWF MES1 CALL GO2 MOVWF MES2 CALL GO3 MOVWF MES3 CALL GO4 MOVWF MES4 RLF GO_STATUS,W MOVWF TEMP2 SWAPF TEMP2,W ANDLW 0fh MOVWF GO_RFLCNT ADDLW 0h BTFSC STATUS,Z GOTO CALLLED BTFSS GO_RFLCNT,2 GOTO RLF_LOOP CLRF MES3 CLRF MES4 RLF_LOOP MOVFW GO_RFLCNT CLRF TEMP2 RLF MES1,F RLF MES2,F RLF TEMP2 MOVFW TEMP2 IORWF MES1,F DECFSZ GO_RFLCNT GOTO RLF_LOOP CALLLED CALL LED NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF INDEX,F DECF CNT,F MOVFW INDEX SUBLW 010h BTFSS STATUS,Z GOTO GO_LOOP RETURN ;------------------------------- Timer Subroutine---------------------------------- TIM1 MOVLW 08H ;249回 MOVWF CNT1 ;ここまでで2サイクル TIMLP1 NOP DECFSZ CNT1,F ;このループは4サイクル GOTO TIMLP1 ;2+4*249-1=997 RETURN ;997+1=998*0.4usec=0.4msec TIM10 MOVLW 0ffH ;249回 MOVWF CNT2 TIMLP2 CALL TIM1 ;2+(1000+3)*249-1=249748 DECFSZ CNT2,F ;このループは1回1003サイクル GOTO TIMLP2 RETURN ;+1=249749サイクル T1SEC MOVLW 0AH ;10回 MOVWF CNT3 ;100msec * 10 T1LP CALL TIM10 DECFSZ CNT3,F ;このループは100msec GOTO T1LP RETURN ;-----------------------------LED DATA---------------------------- R1 movf INDEX,0 movwf TEMP movlw low(T_R1) addwf TEMP,F movlw high(T_R1) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_R1 retlw b'00100000' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'10100001' retlw b'01110001' retlw b'00101101' retlw b'00100011' retlw b'00100001' retlw b'00100000' retlw b'00100000' retlw b'00100000' retlw b'00000000' R2 movf INDEX,0 movwf TEMP movlw low(T_R2) addwf TEMP,F movlw high(T_R2) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_R2 retlw b'00000000' retlw b'11111100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'11111100' retlw b'00000000' retlw b'10000000' retlw b'01000000' retlw b'00100000' retlw b'00000000' R3 movf INDEX,0 movwf TEMP movlw low(T_R3) addwf TEMP,F movlw high(T_R3) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_R3 retlw b'10000010' retlw b'01000010' retlw b'01000011' retlw b'01000010' retlw b'00100010' retlw b'00100010' retlw b'00100010' retlw b'00111111' retlw b'00000000' retlw b'00000000' retlw b'00010001' retlw b'00010001' retlw b'11111111' retlw b'00010000' retlw b'00010000' retlw b'00000000' R4 movf INDEX,0 movwf TEMP movlw low(T_R4) addwf TEMP,F movlw high(T_R4) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_R4 retlw b'00000000' retlw b'00000000' retlw b'11111110' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11110000' retlw b'00001100' retlw b'00000010' retlw b'00000000' retlw b'00000000' retlw b'11111110' retlw b'10000010' retlw b'10000000' retlw b'00000000' L1 movf INDEX,0 movwf TEMP movlw low(T_L1) addwf TEMP,F movlw high(T_L1) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_L1 retlw b'00100000' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'00100001' retlw b'10100001' retlw b'01110001' retlw b'00101101' retlw b'00100011' retlw b'00100001' retlw b'00100000' retlw b'00100000' retlw b'00100000' retlw b'00000000' L2 movf INDEX,0 movwf TEMP movlw low(T_L2) addwf TEMP,F movlw high(T_L2) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_L2 retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'11111100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'00000100' retlw b'10000000' retlw b'01000000' retlw b'00100000' retlw b'00000000' L3 movf INDEX,0 movwf TEMP movlw low(T_L3) addwf TEMP,F movlw high(T_L3) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_L3 retlw b'10000010' retlw b'01000010' retlw b'01000011' retlw b'01000010' retlw b'00100010' retlw b'00100010' retlw b'00100010' retlw b'00111111' retlw b'00000000' retlw b'00000000' retlw b'00010001' retlw b'00010001' retlw b'11111111' retlw b'00010000' retlw b'00010000' retlw b'00000000' L4 movf INDEX,0 movwf TEMP movlw low(T_L4) addwf TEMP,F movlw high(T_L4) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_L4 retlw b'00000000' retlw b'00000000' retlw b'11111110' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11110000' retlw b'00001100' retlw b'00000010' retlw b'00000000' retlw b'00000000' retlw b'11111110' retlw b'10000010' retlw b'10000000' retlw b'00000000' SI1 movf INDEX,0 movwf TEMP movlw low(T_S1) addwf TEMP,F movlw high(T_S1) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_S1 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000011' retlw b'00000001' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11111111' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' SI2 movf INDEX,0 movwf TEMP movlw low(T_S2) addwf TEMP,F movlw high(T_S2) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_S2 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00001001' retlw b'10001001' retlw b'11001001' retlw b'01001001' retlw b'01011111' retlw b'01001001' retlw b'01001001' retlw b'10001001' retlw b'00001001' retlw b'00001001' retlw b'00000000' retlw b'00000000' retlw b'00000000' SI3 movf INDEX,0 movwf TEMP movlw low(T_S3) addwf TEMP,F movlw high(T_S3) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_S3 retlw b'00000000' retlw b'00000000' retlw b'00000001' retlw b'00001001' retlw b'00010001' retlw b'00100001' retlw b'00100011' retlw b'11110001' retlw b'01001001' retlw b'01001001' retlw b'01001001' retlw b'00101001' retlw b'00010001' retlw b'00000001' retlw b'00000000' retlw b'00000000' SI4 movf INDEX,0 movwf TEMP movlw low(T_S4) addwf TEMP,F movlw high(T_S4) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_S4 retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'11111110' retlw b'01001010' retlw b'01001011' retlw b'01001001' retlw b'00110001' retlw b'00000001' retlw b'00000000' retlw b'00000000' retlw b'00000000' retlw b'00000000' GO1 movf INDEX,0 movwf TEMP movlw low(T_GO1) addwf TEMP,F movlw high(T_GO1) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_GO1 retlw b'00000000' retlw b'00000001' retlw b'00000011' retlw b'00000111' retlw b'00001111' retlw b'00011111' retlw b'00111111' retlw b'01111111' retlw b'01111111' retlw b'00111111' retlw b'00011111' retlw b'00001111' retlw b'00000111' retlw b'00000011' retlw b'00000001' retlw b'00000000' GO2 movf INDEX,0 movwf TEMP movlw low(T_GO2) addwf TEMP,F movlw high(T_GO2) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_GO2 retlw b'10000000' retlw b'10000000' retlw b'10000000' retlw b'10000000' retlw b'10000000' retlw b'11111111' retlw b'11111111' retlw b'11111111' retlw b'11111111' retlw b'11111111' retlw b'11111111' retlw b'10000000' retlw b'10000000' retlw b'10000000' retlw b'10000000' retlw b'10000000' GO3 movf INDEX,0 movwf TEMP movlw low(T_GO3) addwf TEMP,F movlw high(T_GO3) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_GO3 retlw b'00000000' retlw b'00111111' retlw b'00000000' retlw b'00001111' retlw b'00010000' retlw b'00100000' retlw b'00100000' retlw b'00010000' retlw b'00001111' retlw b'00000000' retlw b'00001100' retlw b'00010000' retlw b'00100000' retlw b'00100000' retlw b'00010000' retlw b'00001111' GO4 movf INDEX,0 movwf TEMP movlw low(T_GO4) addwf TEMP,F movlw high(T_GO4) movwf PCLATH addcf PCLATH,1 movf TEMP,0 movwf PCL T_GO4 retlw b'00000000' retlw b'11110010' retlw b'00000000' retlw b'11111000' retlw b'00000100' retlw b'00000010' retlw b'00000010' retlw b'00000100' retlw b'11111000' retlw b'00000000' retlw b'01111110' retlw b'01000100' retlw b'01000010' retlw b'00000010' retlw b'00000100' retlw b'11111000' END