ya hice todos los cambios al programa, y tambien la conexion entre los 74hc164, y NADA... no funciona... les dejo el programa modificado por si tienen algun tiempo libre y me ayudan, por favor...
;****************************************************************************************************************************
; MATRIZ 8x16 con scroll de mensaje para PIC 16F84A, reloj a 4Mhz, registro de desplazamiento 74HC164
;****************************************************************************************************************************
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
count ;usado en rutinas de salto
count1 ;used in delay routine
counta ;used in delay routine
countb ;used in delay routine
tmp1 ;almacenamiento temporal
tmp2
p_temp ;save register
s_temp ;save register
w_temp ;save register
offsetL ;registros de la tabla
offsetH
;registros de rutina transmisión bits a registro de desplazamiento
EEPROM
ALMACEN
CONTADOR
;registros para matriz
row_pos ;posicion en fila
FILA1 ;almacenamiento 1
FILA2 ;almacenamiento 2
FILA3 ;almacenamiento 3
FILA4 ;almacenamiento 4
FILA5 ;almacenamiento 5
FILA6 ;almacenamiento 6
FILA7 ;almacenamiento 7
FILA8 ;almacenamiento 8
FILA9
FILA10
FILA11
FILA12
FILA13
FILA14
FILA15
FILA16
FILA19 ;almacenamiento 19
FILA22 ;almacenamiento 22
FILA33 ;almacenamiento 33
FILA44 ;almacenamiento 44
FILA55 ;almacenamiento 55
FILA66 ;almacenamiento 66
FILA77 ;almacenamiento 77
FILA88 ;almacenamiento 88
FILA90
FILA100
FILA110
FILA120
FILA130
FILA140
FILA150
FILA160
ENDC
DO EQU 6 ;bit de control
ORG 0x00
goto INICIO
;****************************************************************************************************************************
; SERVICIO DE INTERRUPCION AL QUE SE ATIENDE CUANDO TMR0 SE DESBORDA
;****************************************************************************************************************************
ORG 0x04 ;vector de interupción
INT movwf w_temp ;Salva registro W
swapf STATUS,W ;Swap status con registro W
movwf s_temp ;Salva registro STATUS
movfw PCLATH
movwf p_temp ;Salva PCLATH
btfss row_pos,0 ;mira que fila ha sido la última
goto Al_Dos
btfss row_pos,1 ;mira que fila ha sido la última
goto Al_Tres
btfss row_pos,2 ;mira que fila ha sido la última
goto Al_Cuatro
btfss row_pos,3 ;mira que fila ha sido la última
goto Al_Cinco
btfss row_pos,4 ;mira que fila ha sido la última
goto Al_Seis
btfss row_pos,5 ;mira que fila ha sido la última
goto Al_Siete
btfss row_pos,6 ;mira que fila ha sido la última
goto Al_Ocho
btfss row_pos,7 ;mira que fila ha sido la última
goto Al_Nueve
btfss row_pos,8 ;mira que fila ha sido la última
goto Al_Diez
btfss row_pos,9 ;mira que fila ha sido la última
goto Al_Once
btfss row_pos,10 ;mira que fila ha sido la última
goto Al_Doce
btfss row_pos,11 ;mira que fila ha sido la última
goto Al_Trece
btfss row_pos,12 ;mira que fila ha sido la última
goto Al_Catorce
btfss row_pos,13 ;mira que fila ha sido la última
goto Al_Quince
btfss row_pos,14 ;mira que fila ha sido la última
goto Al_Diezyseis
btfss row_pos,15 ;mira que fila ha sido la última
goto Al_Uno
Al_Uno movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;apaga todas las filas poniendo 1 en todas las salidas del PORTB
movwf row_pos ;carga registro con B'11111111'
movf FILA1,w ;cargo dato extraido de tabla a W
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,0 ;borro bit 0 de registro previamente cargado con B'11111111'
bcf PORTB,0 ;borro bit 0 de salida PORTB
goto INTX ;salto incondicional a subrutina
Al_Dos movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;apaga todas las filas poniendo 1 en todas las salidas del PORTB
movwf row_pos ;carga registro con B'11111111'
movf FILA2,w ;cargo dato extraido de tabla a W
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,1 ;borro bit 1 de registro previamente cargado con B'11111111'
bcf PORTB,1 ;borro bit 1 de salida PORTB
goto INTX ;salto incondicional a subrutina
Al_Tres movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA3,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,2 ;
bcf PORTB,2 ;
goto INTX ;
Al_Cuatro movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA4,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,3 ;
bcf PORTB,3 ;
goto INTX ;
Al_Cinco movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA5,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,4 ;
bcf PORTB,4 ;
goto INTX ;
Al_Seis movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA6,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,5 ;
bcf PORTB,5 ;
goto INTX ;
Al_Siete movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA7,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,6 ;
bcf PORTB,6 ;
goto INTX ;
Al_Ocho movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA8,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,7 ;
bcf PORTB,7 ;
goto INTX ;
Al_Nueve movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA9,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,8 ;
bcf PORTB,0 ;
goto INTX ;
Al_Diez movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA10,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,9 ;
bcf PORTB,1 ;
goto INTX ;
Al_Once movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA11,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,10 ;
bcf PORTB,2 ;
goto INTX ;
Al_Doce movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA12,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,11 ;
bcf PORTB,3 ;
goto INTX ;
Al_Trece movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA13,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,12 ;
bcf PORTB,4 ;
goto INTX ;
Al_Catorce movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA14,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,13 ;
bcf PORTB,5 ;
goto INTX ;
Al_Quince movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA15,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,14 ;
bcf PORTB,6 ;
goto INTX ;
Al_Diezyseis movlw 0xFF ;carga W con B'11111111'
movwf PORTB ;
movwf row_pos ;
movf FILA16,w ;
movwf ALMACEN ;registro donde se almacena el dato
call TX ;llama a rutina para meter dato a registro desplazamiento
bcf row_pos,15 ;
bcf PORTB,7 ;
goto INTX ;
INTX movfw p_temp
movwf PCLATH ;Restaura PCLATH
swapf s_temp,W
movwf STATUS ;Restaura registro STATUS
swapf w_temp,F
swapf w_temp,W ;Restaura registro W
MOVLW D'240' ;cargo w con 240
MOVWF TMR0 ;y lo paso a TMR0
bcf INTCON,T0IF ;pone a 0 flag afectado antes de regresar de interrupción
bsf INTCON,T0IE ;pone a 1 flag afectado antes de regresar de interrupción
retfie ;retorno de la interrupción
;****************************************************************************************************************************
; INICIALIZACIÓN DEL PROGRAMA Y RUTINA DE INTERRUPCIÓN POR DESBORDAMIENTO DEL TMR0
;****************************************************************************************************************************
INICIO bsf STATUS,RP0 ;voy a banco 1
MOVLW B'00000110' ;cargo w con 00000110
MOVWF OPTION_REG ;el Divisor = 128
clrf TRISA ;puertas A todo salida
clrf TRISB ;puertas B todo salida
bcf STATUS,RP0 ;voy a banco 0
movlw 0xFF ;carga B'11111111'
movwf PORTB ;y lo meto en PORTB
clrf PORTA ;limpio registro puerta A
movlw 0XFF ;meto 255 a los registros para evitar que la primera
;pantalla esté encendida
movwf FILA1
movwf FILA2
movwf FILA3
movwf FILA4
movwf FILA5
movwf FILA6
movwf FILA7
movwf FILA8
movwf FILA9
movwf FILA10
movwf FILA11
movwf FILA12
movwf FILA13
movwf FILA14
movwf FILA15
movwf FILA16
movlw 0x01 ;cargo con 1 el registro
movwf row_pos ;de las filas
MOVLW D'240' ;cargo w con 240
MOVWF TMR0 ;para que el TMR0 se desborde cada 2 ms aprox
;T = (256 - 240) x 128 x 1 us = 2048 us = 2,048 ms
movlw 0XA0 ;cargo w con 10100000 para
movwf INTCON ;habilitar GIE y T0IE
;****************************************************************************************************************************
;Aquí se controla que empiece en la dirección 00x0 de la tabla al empezar, y que vayan saliendo el nº de caracteres
;establecidos en la tabla para que una vez salgan todos volver a empezar desde 0x00.
;****************************************************************************************************************************
PRINCIPAL movlw 0x00 ;desplega todos los caracteres de nuevo
movwf tmp1
SALTO movf tmp1,w ;cargo contenido del tmp1 a W
call CARACTER
call ScrollL16 ;scroll para buffer del display
incf tmp1,f
movf tmp1,w
sublw D'24' ;controla el nº de caracteres del texto
;24 en este caso
btfsc STATUS,C
goto SALTO
goto PRINCIPAL ;final del SALTO
;****************************************************************************************************************************
;Cada caracter tiene 8 bytes de almacenamiento, nosotros multiplicaremos el index value por 8
;****************************************************************************************************************************
CARACTER movwf offsetL
clrf offsetH
bcf STATUS,C ;borra carry
rlf offsetL,f ;multiply index value by 16 (2x2x2x2=16)
rlf offsetH,f
bcf STATUS,C ;borra carry
rlf offsetL,f
rlf offsetH,f
bcf STATUS,C ;borra carry
rlf offsetL,f
rlf offsetH,f
bcf STATUS,C ;borra carry
rlf offsetL,f
rlf offsetH,f
call Tabla1
movwf FILA19
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA22
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA33
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA44
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA55
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA66
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA77
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA88
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA90
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA100
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA110
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA120
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA130
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA140
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA150
incf offsetL,f ;incrementa 16 bit el puntero
btfsc STATUS,Z
incf offsetH,f
call Tabla1
movwf FILA160
return
Tabla1 ;reformada la lectura para tablas largas, mas de 255 bytes.
movlw High(Tabla)
addwf offsetH,W
movwf PCLATH
movlw Low(Tabla)
addwf offsetL,w
btfsc STATUS,C
incf PCLATH,f
MOVWF PCL
;****************************************************************************************************************************
;Llamada a rutina y temporización de scroll a izquierdas, el texto pasa de derechas a izquierdas
;****************************************************************************************************************************
ScrollL16 call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
call ScrollL
call ScrollDelay
return
;****************************************************************************************************************************
;Llamada a temporización de la velocidad a la que el texto irá pasando
;****************************************************************************************************************************
ScrollDelay call Delay20 ;cambiando aquí el dato podemos pasar mas rapido o mas lento el texto
return
;****************************************************************************************************************************
;Rutina de scroll a izquierdas, el texto pasa de derechas a izquierdas
;****************************************************************************************************************************
ScrollL bcf STATUS,C
rlf FILA11,f
rlf FILA1,f
bcf STATUS,C
rlf FILA22,f
rlf FILA2,f
bcf STATUS,C
rlf FILA33,f
rlf FILA3,f
bcf STATUS,C
rlf FILA44,f
rlf FILA4,f
bcf STATUS,C
rlf FILA55,f
rlf FILA5,f
bcf STATUS,C
rlf FILA66,f
rlf FILA6,f
bcf STATUS,C
rlf FILA77,f
rlf FILA7,f
bcf STATUS,C
rlf FILA88,f
rlf FILA8,f
bcf STATUS,C
rlf FILA90,f
rlf FILA9,f
bcf STATUS,C
rlf FILA100,f
rlf FILA10,f
bcf STATUS,C
rlf FILA110,f
rlf FILA11,f
bcf STATUS,C
rlf FILA120,f
rlf FILA12,f
bcf STATUS,C
rlf FILA130,f
rlf FILA13,f
bcf STATUS,C
rlf FILA140,f
rlf FILA14,f
bcf STATUS,C
rlf FILA150,f
rlf FILA15,f
bcf STATUS,C
rlf FILA160,f
rlf FILA16,f
return
;****************************************************************************************************************************
;Rutina de tiempos
;****************************************************************************************************************************
Delay1Sec call Delay250
call Delay250
call Delay250
call Delay250
Return
Delay255 movlw 0xff ;delay 255mS
goto d0
Delay250 movlw d'250' ;delay 250mS
goto d0
Delay100 movlw d'100' ;delay 100mS
goto d0
Delay50 movlw d'50' ;delay 50mS
goto d0
Delay20 movlw d'20' ;delay 20mS
goto d0
Delay10 movlw d'10' ;delay 10mS
goto d0
Delay1 movlw d'1' ;delay 1mS
goto d0
Delay5 movlw 0x05 ;delay 5ms
d0 movwf count1
d1 movlw 0xE7
movwf counta
movlw 0x04
movwf countb
Delay_0 decfsz counta,f
goto $+2
decfsz countb,f
goto Delay_0
decfsz count1,f
goto d1
retlw 0x00
;****************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;****************************************************************************************************************************
TX movlw .16 ;pone 16 en W
movwf CONTADOR ;carga contador con 16
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0 (ACA TENGO DUDAS!!!! *****###)
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
;****************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;****************************************************************************************************************************
CLOCK bcf PORTA,2 ;pone a 0 CLOCK
nop ;espera 1 micros
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,2 ;pone a 1 CLOCK
nop ;1 micros
return
;****************************************************************************************************************************
; TABLA DE CARACTERES
;****************************************************************************************************************************
Tabla
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'255' ;SPACE
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'51' ;letra H
retlw D'3'
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'207'
retlw D'51'
retlw D'51'
retlw D'51' ;letra O
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'207'
retlw D'63'
retlw D'63'
retlw D'63'
retlw D'63' ;letra L
retlw D'63'
retlw D'63'
retlw D'63'
retlw D'3'
retlw D'207'
retlw D'135'
retlw D'51'
retlw D'51' ;letra A
retlw D'3'
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'255' ;SPACE
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'147'
retlw D'41'
retlw D'41'
retlw D'57' ;letra M
retlw D'57'
retlw D'57'
retlw D'57'
retlw D'57'
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'51' ;letra U
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'135'
retlw D'59'
retlw D'27'
retlw D'43'
retlw D'43' ;letra N
retlw D'43'
retlw D'51'
retlw D'51'
retlw D'59'
retlw D'15'
retlw D'55'
retlw D'51'
retlw D'51' ;letra D
retlw D'51'
retlw D'51'
retlw D'55'
retlw D'15'
retlw D'207'
retlw D'51'
retlw D'51'
retlw D'51' ;letra O
retlw D'51'
retlw D'51'
retlw D'51'
retlw D'207'
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'255' ;SPACE
retlw D'255'
retlw D'255'
retlw D'255'
retlw D'255'
END
////////////////////////////////////////////////////////////////////////
Saludos y espero su ayuda... gracias...