;-------------------------------------------------------
;Realizado por : allweb
;IDE : PIKLAB 0.16.2
;Sistema Operativo : DEBIAN 8
;Compilador : GPUTILS
;Hardware Programador : Pickit2 - ICSP
;Software programador : pk2cmd
;PIC : 16f873A
;Cristal : 20MHz
;
;Programa que controla matriz de LED's 8x8
;Se define PORTB como salida y control de las filas
;Se define PORTC como salida y control de la columnas
;Palabra a mostrar: HOLA
;-------------------------------------------------------
#include <p16f873a.inc>
__config 0x3f32
; -----------------------------------------------------------------------
;Variables usadas
CONTA1 EQU 0x21
CONTA2 EQU 0x22
CONTA3 EQU 0x23
AUX1 EQU 0x24
TEMP1 EQU 0x25
TEMP2 EQU 0x26
; -----------------------------------------------------------------------
; Declaración DEFINES
#DEFINE C1 PORTC,0
#DEFINE C2 PORTC,1
#DEFINE C3 PORTC,2
#DEFINE C4 PORTC,3
#DEFINE C5 PORTC,4
#DEFINE C6 PORTC,5
#DEFINE C7 PORTC,6
#DEFINE C8 PORTC,7
; -----------------------------------------------------------------------
;Colocación del programa
ORG 0
GOTO INICIO
ORG 5
; -----------------------------------------------------------------------
;Comienzo del programa
INICIO
BSF STATUS,RP0 ; vamos al Banco 1 para configurar los puertos
BCF STATUS,RP1
CLRF TRISB ;limpiamos TRISB, osea PORTB como salidas para las filas
CLRF TRISC ;limpiamos TRISB, osea PORTC como salidas para las columnas
BCF STATUS,RP0 ; regresamos al banco 0
MOVLW d'1' ;VALOR DE LA RAPIDEZ ENTRE COLUMNAS EN ms
MOVWF TEMP1 ;REGISTRA LA RAPIDEZ ENTRE COLUMNAS
MOVLW d'100' ;VALOR DE LA RAPIDEZ ENTRE LETRA Y LETRA EN ms
MOVWF TEMP2 ;REGISTRA LA RAPIDEZ ENTRE LETRA Y LETRA
EJECUCION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF TEMP2,0
MOVWF AUX1
LETRA_H
; COLUMNA 1
MOVLW 0xFF
MOVWF PORTB
MOVLW 0XFE
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
MOVLW 0xFF
MOVWF PORTB
MOVLW 0XFD
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
MOVLW 0x18
MOVWF PORTB
MOVLW 0XFB
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
MOVLW 0x18
MOVWF PORTB
MOVLW 0XF7
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
MOVLW 0x18
MOVWF PORTB
MOVLW 0XEF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
MOVLW 0x18
MOVWF PORTB
MOVLW 0XDF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
MOVLW 0xFF
MOVWF PORTB
MOVLW 0XBF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
MOVLW 0xFF
MOVWF PORTB
MOVLW 0X7F
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
DECFSZ AUX1,1
GOTO LETRA_H
;;;;;APAGA FILAS Y COLUMNAS
CLRF PORTB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVF TEMP2,0
MOVWF AUX1
LETRA_O
; COLUMNA 1
MOVLW 0x3C
MOVWF PORTB
MOVLW 0XFE
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
MOVLW 0x7E
MOVWF PORTB
MOVLW 0XFD
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
MOVLW 0xC3
MOVWF PORTB
MOVLW 0XFB
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
MOVLW 0xC3
MOVWF PORTB
MOVLW 0XF7
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
MOVLW 0xC3
MOVWF PORTB
MOVLW 0XEF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
MOVLW 0xC3
MOVWF PORTB
MOVLW 0XDF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
MOVLW 0x7E
MOVWF PORTB
MOVLW 0XBF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
MOVLW 0x3C
MOVWF PORTB
MOVLW 0X7F
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
DECFSZ AUX1,1
GOTO LETRA_O
;;;;;APAGA FILAS Y COLUMNAS
CLRF PORTB
MOVF TEMP2,0
MOVWF AUX1
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LETRA_L
; COLUMNA 1
MOVLW 0xFF
MOVWF PORTB
MOVLW 0XFE
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
MOVLW 0xFF
MOVWF PORTB
MOVLW 0XFD
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
MOVLW 0xC0
MOVWF PORTB
MOVLW 0XFB
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
MOVLW 0xC0
MOVWF PORTB
MOVLW 0XF7
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
MOVLW 0xC0
MOVWF PORTB
MOVLW 0XEF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
MOVLW 0xC0
MOVWF PORTB
MOVLW 0XDF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
MOVLW 0xC0
MOVWF PORTB
MOVLW 0XBF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
MOVLW 0xC0
MOVWF PORTB
MOVLW 0X7F
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
DECFSZ AUX1,1
GOTO LETRA_L
;;;;;APAGA FILAS Y COLUMNAS
CLRF PORTB
MOVF TEMP2,0
MOVWF AUX1
LETRA_A
; COLUMNA 1
MOVLW 0xFC
MOVWF PORTB
MOVLW 0XFE
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
MOVLW 0xFE
MOVWF PORTB
MOVLW 0XFD
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
MOVLW 0x13
MOVWF PORTB
MOVLW 0XFB
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
MOVLW 0x13
MOVWF PORTB
MOVLW 0XF7
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
MOVLW 0x13
MOVWF PORTB
MOVLW 0XEF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
MOVLW 0x13
MOVWF PORTB
MOVLW 0XDF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
MOVLW 0xFE
MOVWF PORTB
MOVLW 0XBF
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
MOVLW 0xFC
MOVWF PORTB
MOVLW 0X7F
MOVWF PORTC
MOVF TEMP1,0
CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
DECFSZ AUX1,1
GOTO LETRA_A
;;;;;APAGA FILAS Y COLUMNAS
CLRF PORTB
;;;;;Espera 1 segungo para repetir la palabra HOLA
MOVLW d'250'
CALL DELAY_1ms
MOVLW d'250'
CALL DELAY_1ms
MOVLW d'250'
CALL DELAY_1ms
MOVLW d'250'
CALL DELAY_1ms
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
GOTO EJECUCION
;
DELAY_1ms
MOVWF CONTA3
MOVLW d'4'
MOVWF CONTA2
MOVLW d'250'
MOVWF CONTA1
NOP
DECFSZ CONTA1,F ;DECREMENTA UNA UNIDAD EL VALOR DE CONTA1 Y ALMACENALO EN F = CONTA1
GOTO $-.2
DECFSZ CONTA2,F ;DECREMENTA UNA UNIDAD EL VALOR DE CONTA2 Y ALMACENALO EN F = CONTA2
GOTO $-.6
DECFSZ CONTA3,F ;DECREMENTA UNA UNIDAD EL VALOR DE CONTA3 Y ALMACENALO EN F = CONTA3
GOTO $-.10
RETURN
END