; LIST P=12F509 #INCLUDE P12F509.INC __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC ; --- work address for wait routine wcount EQU 0x10 wloop1 EQU 0x11 wloop2 EQU 0x12 soft EQU 0x13 off EQU 0x14 ; ledsel EQU 0x15 ; count EQU 0x16 ORG 0x000 MOVWF OSCCAL MOVLW 0x00 TRIS GPIO MOVLW 0xDF OPTION ; ------------------------------------------- ; --- Main loop ; ------------------------------------------- MAINLOOP ; ; --- 5 movlw 06h movwf count repeat5 call slow_light decfsz count,f goto repeat5 ; ; --- 3 movlw 020h movwf count repeat3 call repeat_line decfsz count,f goto repeat3 ; ; --- 4 movlw 040h movwf count repeat4 call flash_line decfsz count,f goto repeat4 ; ; --- 2 movlw 020h movwf count repeat2 call single_line decfsz count,f goto repeat2 ; ; --- 1 movlw 008h movwf count repeat1 movlw 0x25 movwf ledsel call PWMFlash movlw 0x12 movwf ledsel call PWMFlash decfsz count,f goto repeat1 ; goto MAINLOOP ; ------------------------------------------- ; --- wait waitloop movwf wloop1 waitloop_1 movlw 0ffh movwf wloop2 waitloop_2 nop decfsz wloop2,f goto waitloop_2 decfsz wloop1,f goto waitloop_1 retlw 0 ; ------------------------------------------- ; --- single line flash (a to b) ; ------------------------------------------- single_line movlw b'00000001' movwf GPIO movlw 0c0h call waitloop movlw b'00000010' movwf GPIO movlw 0c0h call waitloop movlw b'00000100' movwf GPIO movlw 0c0h call waitloop movlw b'00010000' movwf GPIO movlw 0c0h call waitloop movlw b'00100000' movwf GPIO movlw 0c0h call waitloop retlw 0 ; ------------------------------------------- ; --- repeat line flash ; ------------------------------------------- repeat_line movlw b'00000001' movwf GPIO movlw 080h call waitloop movlw b'00000010' movwf GPIO movlw 080h call waitloop movlw b'00000100' movwf GPIO movlw 080h call waitloop movlw b'00010000' movwf GPIO movlw 080h call waitloop movlw b'00100000' movwf GPIO movlw 080h call waitloop movlw b'00010000' movwf GPIO movlw 080h call waitloop movlw b'00000100' movwf GPIO movlw 080h call waitloop movlw b'00000010' movwf GPIO movlw 080h call waitloop retlw 0 ; ------------------------------------------- ; --- repeat line flash ; ------------------------------------------- flash_line movlw b'00100101' movwf GPIO movlw 040h call waitloop movlw b'00010010' movwf GPIO movlw 040h call waitloop retlw 0 ; ------------------------------------------- ; --- slow flash ; ------------------------------------------- slow_light movlw b'00010000' movwf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop clrf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop movlw b'00000001' movwf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop clrf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop movlw b'00000100' movwf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop clrf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop movlw b'00100000' movwf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop clrf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop movlw b'00000010' movwf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop clrf GPIO movlw 0ffh call waitloop movlw 0ffh call waitloop retlw 0 ; ------------------------------------------- ; --- PWM fader routine ; ------------------------------------------- PWMFlash movlw 0x08 movwf wcount movlw 0x00 movwf soft FADEIN movf wcount, w movwf wloop1 ; --- disp wait waitloop1 call DISP_PWM_LED decfsz wloop1,f goto waitloop1 ; --- count up incfsz soft,f goto FADEIN decf soft,f FADEOUT movf wcount, w movwf wloop1 ; --- disp wait waitloop2 call DISP_PWM_LED decfsz wloop1,f goto waitloop2 ; --- count up decfsz soft,f goto FADEOUT ; retlw 0 ; ------------------------------------------- ; --- PWM fader subroutine ; ------------------------------------------- DISP_PWM_LED ; -- PWD param movlw 0xff movwf off movf soft, w btfsc STATUS,Z goto pwm_skip_on movwf wloop2 subwf off, f ; -- led on movf ledsel, w movwf GPIO pwm_on decfsz wloop2, f goto pwm_on ; -- led off pwm_skip_on movf off, w btfsc STATUS,Z goto pwm_done ; LED off movlw 0 movwf GPIO pwm_off decfsz off, f goto pwm_off pwm_done retlw 0 end