Autor Tema: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.  (Leído 3619 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pengordon

  • PIC10
  • *
  • Mensajes: 15
Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« en: 20 de Junio de 2009, 21:41:42 »
He regresado ahora con otro problema, más bien una duda...

Con el mismo programa anterior me gustaria que en vez de 1 sola matriz de 8x8, hacer 2 de 8x8... Osea 8x16, de manera que el texto que se muestre se mueva de derecha a izquerda pero en 2 matrices.

La pregunta es... cuales partes y cómo debo modificar el programa para que el segundo registro de desplazamiento (74hc164), funcione también?????

Saludos y espero una pronta respuesta...

Gracias.
« Última modificación: 20 de Junio de 2009, 22:13:44 por pengordon »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #1 en: 21 de Junio de 2009, 11:31:30 »
Hola.
Por que no haces la matrix por barrido de columnas?,mira yo tuve las mismas dudas en este hilo, y gracias a BrunoF y a otros amigos del foro pude hacerlo de esa forma y se hace mucho más fácil agregar las columnas que quieras, eso si te recomiendo leer todo desde el inicio para que te quede todo más claro..de verdad que te recomiendo hacerlo asi, ahorras memoria y se hace muy fácil.

Saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #2 en: 21 de Junio de 2009, 13:25:38 »
Hola.

Lo mejores hacerlo por filas ... si lo haces por columnas a medida que aumentas las columnas disminuira el brillo ... ademas el numero que se mantendria fijo es el de las filas no?

Saludos
El papel lo aguanta todo

Desconectado pengordon

  • PIC10
  • *
  • Mensajes: 15
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #3 en: 21 de Junio de 2009, 14:06:29 »

Gracias por las respuestas, no pretendo cambiar la forma del matriz, asi que lo dejare por filas... gracias por las opiniones.

De todas formas, me gustaria saber si alguien me puede ayudar un poco con el programa, ya que no tengo muy claro donde hay que hacer los cambios para que funcione el segundo registro de deplazamiento (74hc164)

Esperando prontas respuestas..

Saludos cordiales.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #4 en: 21 de Junio de 2009, 14:14:48 »
Hola.

Si son 2 registros debes enviar 16 bits, la modificacion en el programa estaria en la seccion en la que se envia los bits a los registros.

El papel lo aguanta todo

Desconectado pengordon

  • PIC10
  • *
  • Mensajes: 15
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #5 en: 21 de Junio de 2009, 16:12:40 »
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...  :)
« Última modificación: 21 de Junio de 2009, 17:27:53 por pengordon »

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #6 en: 21 de Junio de 2009, 20:13:39 »
creo que en esta parte te estas equivocando :shock:

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

no se puede preguntar el estado de un bit 8 o 15 porque no existe....uidado con eso. un registro solo tiene de 0 a 7 bits
recomiendo que estructures mejor el codigo.
creo que hay mejores maneras de hacerlo........seguire chequeando tu codigo

Saludos

Desconectado pengordon

  • PIC10
  • *
  • Mensajes: 15
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #7 en: 21 de Junio de 2009, 21:09:03 »

Gracias... jmcs87 volvere a revisarlo... y tratar de realizar esa parte de nuevo... realmente no se me ocurre como será... pero lo intentare... si logras encontrar algo te lo agradecere mucho...

Saludos...

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Ayuda con PROGRAMA Para Matriz 8 X 16, Por Favor.
« Respuesta #8 en: 25 de Junio de 2009, 15:16:05 »
Hola, mira he estado mirando el código, (POR CIERTO MUY RAPIDO), y creo que la clave para hacer una matriz de 8x16 bits radica en esta parte del código.
Donde pone TX y cargamos a CONTADOR con 8, ¿Por qué crees que se carga con ese valor el CONTADOR?, pues sencillo es, porque el registro 74HC164 es de 8
BITS, si colocas DOS REGISTROS 74HC164 supongo que deberas cargar al CONTADOR con 16. Haz pruebas y cuenta que tal te ha ido. Saludos.


;****************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;****************************************************************************************************************************


TX            movlw     .8              ;pone 8 en W                         (EN VEZ DE 8 PON 16)
              movwf     CONTADOR        ;carga contador con 8      (AQUI DEBES CARGAR 16)

TXLP          bcf       EEPROM,DO       ;a 0 bit DO
              btfsc     ALMACEN,0       ;mira el bit 7 de ALMACEN y salta si es 0
              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