uControl
Enero 23, 2017, 10:01:55 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: funcion del PCL en una tabla, para mostrar el dato en un display  (Leído 445 veces)
0 Usuarios y 1 Visitante están viendo este tema.
johenrod
PIC16F
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 530


El que paga lo que debe .....a pedir se enseña.


« : Noviembre 01, 2015, 02:07:52 »

Rediban un cordial saludo,,,

Aquí les comparto una modesta y breve explicación de cómo trabaja el PCL al llamar una tabla.

Supongamos que deseamos crear una tabla de 4 elementos. Y que estos 4 datos son los caracteres ASCII de las letras H,O,L y A. Para recuperar algún elemento de la tabla, dentro del programa principal existirá una instrucción de “call” que llama a la etiqueta que está al inicio de la tabla, como se muestra en el listado de abajo.
Una vez que el el contador del programa queda posicionado al inicio de la tabla, usamos la instrucción addwf  PCL,f    para sumar a la parte baja del contador del programa, PCL, un número del 0 al 3, que debe de estar almacenado en el registro W desde antes de la ejecución de la instrucción “call”. Como consecuencia de la ejecución de esta misma instrucción (addwf PCL,f), la parte alta del contador del programa PCH, se carga con el contenido del registro PCLATH, según se describe con detalle más abajo, de tal forma que, al final de la ejecución de la instrucción, el contador del programa queda posicionado apuntando al elemento deseado de la tabla.
Ahora, mediante la instrucción “RETLW” (return from subroutine with literal in w), regresamos al programa principal. Ahora el registro W, contiene el dato que aparece a la derecha de la instrucción (alguno de los códigos ASCII de la H,O,L ó A), y los cuales forman parte de la tabla. Es decir que el registro W debe inicializarse, antes de la instrucción de “call”, con el desplazamiento (offset) deseado sobre la dirección de inicio de la tabla.  Dado que W es un registro de 8 bits, podemos accesar hasta 256 elementos en la tabla.

Fuente de lo anterior;  http://www.puntoflotante.net/tablas.htm

Mi ejemplo:

Citar
En el siguiente ejemplo deseamos mostrar el número binario (dato) que se encuentra almacenado en el registro unidades, por ejemplo  ver literal 1 (digamos que unidades contiene el numero 4)  D.4, decimal / 0X04 hexa / 100 binario, este registro lo cargo en W y luego llamo la tabla (ver literal 2 abajo en tabla) aquí al contador de programa PCL se le ha sumado  el 4 y este se encarga de saltar 4 posiciones (ver literal 3) y w es cargado con el binario( B'01100110' ;4 ) correspondiente al número (4 ) para un display ) luego retorna con este valor que luego lo coloca en el puerto B que en este caso son las salidas para el display. A,B,C,D,E,F,G.
En otras palabras el dato almacenado o mejor, sumado al PCL es el numero de posiciones que debe saltar para tomar el valor correspondiente,  para iluminar los segmentos que forman el numero 4.
Este ejemplo está dirigido a una aplicación a la que no queremos agregarle un 74ls48 que es un BCD-7 segmentos y así manejar directamente el display.

Espero sirva de ayuda para aquellos compañeros que al igual que yo han tenido dudas sobre la función del PCL, cuando se crean tablas para enmascarar alguna función que necesitamos.
MOSTRAR
       CLRF       PORTB
1.   MOVF       UNIDADES,W ;cargo el valor de las unidades y lo agrego al pcl
       CALL       TABLA
       BSF       PORTA,3 ;activo el display unidad
       MOVWF    PORTB
       CALL       RET_10MS
       BCF       PORTA,3

       MOVF       DECENAS,W
       CALL       TABLA
       BSF       PORTA,2
       MOVWF       PORTB
       CALL       RET_10MS
       BCF       PORTA,2

       MOVF       CENTENAS,W
       CALL       TABLA
       BSF       PORTA,1
       MOVWF    PORTB
       CALL       RET_10MS
       BCF       PORTA,1
       MOVF       UMIL,W
       CALL       TABLA
       BSF       PORTA,0
       MOVWF    PORTB      
       CALL       RET_10MS
       BCF       PORTA,0
      
       RETURN

TABLA
2.   ADDWF       PCL,F      ; agrego el valor del registro  0-9 y salto
       RETLW       B'00111111'   ;0   binarios para el display
       RETLW       B'00000110'   ;1
       RETLW       B'01011011'   ;2
       RETLW       B'01001111'   ;3
3.   RETLW          B'01100110'   ;4
       RETLW       B'01101101'      ;5
       RETLW       B'01111100'   ;6
       RETLW       B'00000111'   ;7
       RETLW       B'01111111'       ;8
       RETLW       B'01101111'   ;9

[/size][/size][/size][/size][/size][/font][/font][/font][/size][/size]
« Última modificación: Noviembre 01, 2015, 03:02:26 por johenrod » En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.124 segundos con 24 consultas. (Pretty URLs adds 0.005s, 2q)
loggkey