13.11.2012 Views

Mis primeros programas en assembler - Micros Designs

Mis primeros programas en assembler - Micros Designs

Mis primeros programas en assembler - Micros Designs

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

La parte alta del contador de programa (PCH) no se puede acceder directam<strong>en</strong>te, ella debe cargarse desde los<br />

5 bits más bajos del registro llamado PCLATCH (dirección 0x08).<br />

En la creación de tablas, la posición a leer de la misma se realiza con el control del registro PCL. Este registro<br />

es de 8 bits, por lo que direcciona solo 256 posiciones, por ello se debe t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta:<br />

• La posición de la tabla <strong>en</strong> la memoria de programa.<br />

• El tamaño de la tabla, si nuestra tabla ti<strong>en</strong>e más de 255 posiciones, si o si debemos manejar los bits más<br />

significativos de PC [PCLATCH]).<br />

Para devolver el valor direccionado se utiliza retlw, esta instrucción devuelve un valor <strong>en</strong> el acumulador al<br />

retornar de una subrutina. La creación de la tabla se hará de la sigui<strong>en</strong>te forma:<br />

Código<br />

1. Tabla<br />

2. addwf PCL,f<br />

3. retlw Valor0<br />

4. retlw Valor1<br />

5. retlw Valor2<br />

6. retlw Valor3<br />

7. ; ....<br />

Donde Valor0, Valor1, Valor2... etc. son los valores que queremos almac<strong>en</strong>ar <strong>en</strong> la tabla.<br />

La estrategia a seguir para consultar algún valor de la tabla es cargar <strong>en</strong> el acumulador (W) la dirección de la<br />

tabla donde se <strong>en</strong>cu<strong>en</strong>tra el valor que quieres leer y después llamar a la subrutina TABLA (con un CALL).<br />

Advert<strong>en</strong>cia: la carga de W no puede superar el número de valores de la tabla, sino se estará ejecutando una<br />

instrucción errónea provocando un mal funcionami<strong>en</strong>to del programa.-<br />

Explicado lo necesario pasamos al código del ejemplo:<br />

Código<br />

1. ; **** Encabezado ****<br />

2. list p=16F84A<br />

3. #include P16F84A.inc<br />

4. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC<br />

5. ;**** Definicion de variables ****<br />

6. Contador equ 0x0C ; Registro para almac<strong>en</strong>ar conteo<br />

7. Contador1 equ 0x0D ; Registro utilizado <strong>en</strong> demora.-<br />

8. Contador2 equ 0x0E ; Registro utilizado <strong>en</strong> demora.-<br />

9. Pulsador equ 7 ; Definimos Pulsador como el bit 7, <strong>en</strong> este<br />

caso sera para PORTB<br />

10. ;**** Inicio del Micro ****<br />

11. Reset org 0x00 ; Aqui comi<strong>en</strong>za el micro.-<br />

12. goto Inicio ; Salto a inicio de mi programa.-<br />

13.<br />

14.<br />

15. ;**** Tabla de conversión BCD a 7 Segm<strong>en</strong>tos ****<br />

16. ; Se coloca al inicio para asegurar ubicación <strong>en</strong> Pagina.-<br />

17. org 0x05 ; Orig<strong>en</strong> del código de tabla.-<br />

18. BCD7SEG: ; retlw b'gfedcba' para display cátodo<br />

comun<br />

19. addwf PCL,1 ; Se increm<strong>en</strong>ta el contador del programa.-<br />

20. retlw b'0111111' ; 0<br />

21. retlw b'0000110' ; 1<br />

Autor: Suky Mail: inf.pic.suky@live.com.ar Web: www.micros-designs.com.ar

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!