BUENAS, A VER SI ME PUDIERAN AYUDAR EN ESTO.
TENGO UNA MATRIZ DE LED DE 08 COLUMNAS X 07 FILAS, LAS FILAS CONECTADOS AL PORTB DEL PIC, LAS 08 COLUMNAS CONECTADAS AL 74LS373
A SU VEZ ESTA CONECTADA AL 74LS164. CADA 1MILISEG SE ESCANEAN LAS FILAS, Y ASU VEZ POR EL PORTA ENVIO SERIALMENTE AL 74LS164 EL DATO (08 ROTACIONES) Y DESPUES ACTIVO EL 74LS373 PARA CARGAR LAS COLUMNAS. TODO ANDA BIEN AL DESPLAZAR DE ABAJO ARRIBA. QUISIERA QUE ME INDIQUEN COMO PUEDO HACERLOS DESPLAZAR DE IZQUIERDA A DERECHA Y VICEVERSA. PROBE CON HACER ROTAR CADA REGISTRO CON RRF O RLF PERO ME RESULTO MUY ENGORROSO. AQUI LES ENVIO EL PROGRAMA. GRACIAS DE ANTEMANO
;SE DESPLAZA DE ABAJO ARRIBA
list p=16f628
#include <p16f628.inc>
BYTE1 EQU H"20"
BYTE2 EQU H"21"
BYTE3 EQU H"22"
BYTE4 EQU H"23"
BYTE5 EQU H"24"
;
BYTE6 EQU H"25"
BYTE7 EQU H"26"
BYTE8 EQU H"27"
BYTE9 EQU H"28"
BYTE10 EQU H"29"
BYTE EQU H"3E"
;
CONTADOR1 EQU H"3A"
CONTADOR2 EQU H"3B"
COLUMNAS EQU H"3C"
CONT_TABLA EQU H"3D"
COUNT_BIT EQU H"3F"
LINEA EQU H"40"
; DATO Y CK AL 74LS164(REG DE DESPLAZAMIENTO
;CARGO ; AL 74LS373
#DEFINE DATO PORTA,2
#DEFINE CK PORTA,0
#DEFINE CARGO PORTA,1
ORG 0x00
GOTO START
org 4
GOTO INTERRUPCION
Table1 ; LETRA M
ADDWF 02h,1
RETLW h"DD"
RETLW h"C9"
RETLW h"D5"
RETLW h"DD"
RETLW h"DD"
RETLW h"DD"
RETLW h"DD"
;
RETLW h"FF" ;ESPACIO
RETLW h"FF" ;ESPACIO
RETLW h"00"
START
CALL INIT_PORT
CALL INITTIMERS
LOOP
GOTO LOOP ,ESPERA INTERRUP
INIT_PORT
movlw H"07"
MOVWF CMCON
CLRF PORTA
BSF STATUS,RP0
MOVLW 00h
MOVWF TRISA
MOVWF TRISB
BCF STATUS,RP0
INICIAA
MOVLW H"BF"
MOVWF LINEA
MOVLW BYTE1
MOVWF FSR
MOVLW H"FF" ;BORRA
MOVWF BYTE
MOVWF BYTE1
MOVWF BYTE2
MOVWF BYTE3
MOVWF BYTE4
MOVWF BYTE5
;
MOVWF BYTE6
MOVWF BYTE7
MOVWF BYTE8
MOVWF BYTE9
MOVWF BYTE10
CLRF CONT_TABLA
CLRF CONTADOR1
CLRF CONTADOR2
RETURN
;
INITTIMERS
bsf STATUS,RP0
movlw B"10000100"
movwf OPTION_REG
bcf STATUS,RP0
movlw B"00100000"
movwf INTCON
movlw .225
movwf TMR0
RETFIE
INTERRUPCION
btfsc INTCON,T0IF
goto SERICIOTMR0
movlw B"00100000"
movwf INTCON
RETFIE
SERVICIOTMR0
movlw .225
movwf TMR0
bcf INTCON,T0IF
INCF CONTADOR1,1
MOVF CONTADOR1,W
BTFSS STATUS,Z
GOTO SIGUE_1MSEG
CLRF CONTADOR1
INCF CONTADOR2,1
MOVF CONTADOR2,0
XORLW .2
BTFSC STATUS,Z
CALL UNSEG ; CADA 1/2 SEG SE DESPLAZA
SIGUE_1MSEG
MOVF INDF,W
MOVWF BYTE
INCF FSR
MOVLW H"27"
SUBWF FSR,W
BTFSC STATUS,Z
GOTO EMPIEZA_SCANER
PRIMERO
MOVLW H"08"
MOVWF COUNT_BIT
TX_X
BCF DATO
RLF BYTE
BTFSC STATUS, CARRY
BSF DATO
CALL CLOCK ;ADENTRO
decfsz COUNT_BIT,1 ;ES OCHO BIT
goto TX_X ;AUN
; SI OCHO BIT
MOVF LINEA,W ;TOMO LINEA
MOVWF PORTB ; ACTIVO
BSF CARGO ; CARGO LATCH DE 74LS373
NOP
BCF CARGO ; APAGO
NOP
bsf STATUS,CARRY
NOP
RRF LINEA,1 ;LA PROXIMA
BTFSC STATUS,CARRY
RETFIE
MOVLW H"BF"
MOVWF LINEA
RETFIE
EMPIEZA_SCANER
MOVLW BYTE1
MOVWF FSR
GOTO PRIMERO
CLOCK
bsf CK
NOP
NOP
NOP
bcf CK
RETURN
;
UNSEG ; CADA1/2 SEG DE DESPLAZA EL
;CRACTER DE ABAJO ARRIBA
INCF CONT_TABLA,1
MOVF CONT_TABLA,0
CALL Table1
MOVWF BYTE8
MOVF BYTE8,W
XORLW H"00" ;SI EL VALOR DE BYTE10 ES 00 ,EMPIEZA DE NUEVO
BTFSC 03,2
GOTO INICIAA
;
CLRF CONTADOR1
CLRF CONTADOR2
MOVF BYTE2,0
MOVWF BYTE1
MOVF BYTE3,0
MOVWF BYTE2
MOVF BYTE4,0
MOVWF BYTE3
MOVF BYTE5,0
MOVWF BYTE4
;
MOVF BYTE6,0
MOVWF BYTE5
;
MOVF BYTE7,0
MOVWF BYTE6
;
MOVF BYTE8,0
MOVWF BYTE7
RETURN
END