list p=16f887 ; list directive to define processor
#include <p16f887.inc> ; processor specific variable definitions
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
DATO EQU 0X05 ;D5 PARA DATOS
ENTER EQU 0X06 ;D6 PARA CLOCK
RESET EQU 0X07 ;D7 PARA RESET DE REGISTROS
CBLOCK H'20'
CONTADATOS ;8 FILA POR LETRA 0X20
CONTAROTAR ;8 BITS POR FILA 0X21
FILA ;NUMERO DE FILA A MOSTRAR B07 A B00 0X22
DATOSALIDA ;BIT A SACAR POR DATA 0X23
Contador1 ;temporizador5ms 0X24
Contador2 ;temporizador5ms 0X25
ENDC
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO
BCF STATUS,RP0 ;Pone a cero el RP0 del STATUS
BCF STATUS,RP1 ;Pone a cero el RP1 del STATUS y selecionamos banco 0
BSF STATUS,RP0 ;Pone a 1 el bit RP0 del STATUS , se selecciona el banco 1
MOVLW B'01100000' ;Carga el valor 0X70 en el registro W p/ config la frec a 4 MHz
MOVWF OSCCON ;Carga lo que hay en W a OSCCON osea que pasa el valor de W hacia OSCCON
BANKSEL ANSEL ;
CLRF ANSEL ;digital I/O pines bajos (0:5)
CLRF ANSELH ;digital I/O pines altos (6:7)
BANKSEL TRISA
MOVLW B'00000000' ;Config. de entradas y salidas
MOVWF TRISB
MOVLW B'00000000' ;Config. de entradas y salidas
MOVWF TRISC
MOVLW B'00000100'
MOVWF TRISD
MOVLW B'00000000'
MOVWF TRISE
BCF STATUS,RP0 ;VUELVO A BANK0
MOVLW B'11111111' ;APAGO FILAS
MOVWF PORTB ;
INICIA bsf PORTD,7 ;HABILITO RESET
CLRF CONTADATOS ;PARA INDICAR PRIMER BIT 0X20
CLRF CONTAROTAR ;PARA INDICAR CANT DE ROTACIONES 0X21
CLRF FILA ;PARA MUESTREO DE FILAS 0X22
LLAMATABLA MOVF CONTADATOS,W ;INDICO POSICION TABLA DATOS 0X20
CALL TABLADATOS
MOVWF DATOSALIDA ;GUARDO EL VALOR DE LA TABLA 0X23
SIGUEROTANDO BTFSC DATOSALIDA,0 ;PREGUNTO SI EL PRIMER BIT ES 0 - 1
GOTO SETEADATO ;SETEO SI ES 1 CALL 0X06A
GOTO RESETEADATO ;RESETEO SI ES 0
HABILITA CALL CLOCK ;ENVIO DATO A LA SALIDA
RRF DATOSALIDA,1 ;ROTO BITS 0X23
INCF CONTAROTAR ; 0X21
MOVLW .8
SUBWF CONTAROTAR,W ;PREGUNTO SI ROTO 8 VECES
BTFSC STATUS,2
GOTO YAROTO ;YA ROTO, VA A MUESTREO DE FILAS
GOTO SIGUEROTANDO ;TODAVIA NO, SIGUE ROTANDO BITS
YAROTO
CLRF CONTAROTAR
MOVF FILA,W ;SELECCIONO FILA A MOSTRAR
CALL TABLAFILAS
MOVWF PORTB ;ACTIVO FILA
CALL Demora_5ms
MOVLW 0XFF ;APAGO TODAS
MOVWF PORTB ;
INCF FILA ;0X22
INCF CONTADATOS ;0X20
MOVLW .8
SUBWF CONTADATOS,W ;PREGUNTO SI YA MOSTRO LAS 8 FILAS
BTFSC STATUS,2
GOTO INICIA ;SI, REPITE TODO EL PROGRAMA
GOTO LLAMATABLA ;NO, VUELVE A ROTAR BITS Y CONTINUA CON OTRA FILA GOTO 0X020
TABLADATOS ADDWF PCL,F
RETLW B'11111111'
RETLW B'00111001'
RETLW B'01010101' ;DIBUJA LAS COLUMNAS
RETLW B'01101101'
RETLW B'01111101'
RETLW B'01111101'
RETLW B'01111101'
RETLW B'01111101'
TABLAFILAS ADDWF PCL,F
RETLW B'01111111'
RETLW B'10111111'
RETLW B'11011111'
RETLW B'11101111' ;MUESTREO DE FILAS
RETLW B'11110111'
RETLW B'11111011'
RETLW B'11111101'
RETLW B'11111110'
goto INICIA
SETEADATO BSF PORTD,DATO
GOTO HABILITA
RESETEADATO BCF PORTD,DATO
GOTO HABILITA
;...............................
CLOCK NOP
BSF PORTD,ENTER
NOP
BCF PORTD,ENTER
RETURN
;..............................
Demora_5ms
movlw 0xA0 ; 200
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0x05 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
ENDpodria hacer que en vez de preguntar siempre por ese ultimo bit, hacer un "btfsc,rot" y que ese rot sea mi indice?La instruccion BTFSC registro, bit... No permite cambiar el bit en un loop, es decir NO puedo hacer algo asi:
ntonces una vez que haya mostrado toda la letra, incremento rot para que en una segunda vuelta todo el ciclo en vez de comenzar a enviar al registro el bit 0, arranque desde el bit 1 y luego los 7 restantes... finalizada esa vuelta incremento rot y en la 3er vuelta el dato comienza a enviarse desde btfsc,2 y asi las 8 veces? de esta manera usando siempre la misma tabla el envio de datos se va desplazando hacia izquierda...?