Programació en pic-as del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Variables

Les variables del programa s'emmagatzemen a la memòria de dades; normalment a partir de l'adreça 20h, la primera adreça de memòria de dades disponible. Per a cada variable, indicarem l'adreça on està guardada.

Memoria EQU 0x20  ; Aquesta es situarà a 20h
Retard1 EQU 0x21  ; A 21h
Retard2 EQU 0x22  ; A 22h

Les adreces disponibles per a variables són:

Adreces Banc Posicions Comentaris
 20h -   6Fh 0 80
 A0h -   EFh 1 80
120h - 16Fh 2 80
 70h -   7Fh 0 16 Les variables d'aquesta part són accessibles
indistintament des de qualsevol dels quatre bancs
 F0h -   FFh 1
170h - 17Fh 2
1F0h - 1FFh 3

En total, doncs, podem tenir 256 variables a la memòria de dades. Les 16 adreces compartides entre bancs poden ser útils quan pot interessar poder accedir a la mateixa variable des de bancs diferents. Una aplicació típica són les variables que es fan servir dins de les funcions d'interrupció, ja que així no cal preocupar-se de quin és el banc actiu en el moment de produir-se la interrupció. A l'exemple IT fem la següent declaració de variables:

; Zona de memòria de dades habitual
Visualit EQU 0x20  ; Una variable on guardem el que mostraran els LED
; Zona de memòria de dades que no depèn del banc triat
W_Copia EQU 0x70  ; Guardarà el contingut de W durant la interrupció
ST_Copia EQU 0x71  ; Guardarà STATUS durant la interrupció

També podem definir variables de dos o més bytes, per exemple per fer operacions matemàtiques de 16 bits o per emprar-les com a vectors. A continuació tenim alguns exemples:

; Zona de memòria de dades habitual
Resultat EQU 0x20  ; Variable de dos bytes, estarà a 20h i 21h
Vector EQU 0x22  ; Vector de 8 posicions, de la 22h a la 29h
Comptador EQU 0x2A  ; Estarà a 2Ah
; Zona de memòria de dades del banc 1
Taula EQU 0xA0
; Zona de memòria de dades del banc 2
Valors EQU 0x120
...
  clrf Resultat  ; Esborra la posició 20h
  clrf Resultat+1  ; Esborra la posició 21h
...

També podem definir constants (amb el seu valor) a adreces de la memòria de programa. En aquest cas la directiva DB ens permet assignar-li el contingut.

Gray:  ; Dades a la memòria de programa
  DB  00000000B, 00000001B, 00000011B, 00000010B, 00000110B, 00000111B
  DB  00000101B, 00000100B, 00001100B, 00001101B, 00001111B, 00001110B
  DB  00001010B, 00001011B, 00001001B, 00001000B

També podem definir adreces de la memòria EEPROM. A més la directiva DW ens permet assignar ja el contingut en el moment de programar. L'accés a la memòria EEPROM es fa com si fos programa (amb un PSECT).

PSECT edata  ; Inici de la memòria EEPROM
Gray:
  DW 00000000B, 00000001B, 00000011B, 00000010B, 00000110B, 00000111B, 00000101B, 00000100B
  DW 00001100B, 00001101B, 00001111B, 00001110B, 00001010B, 00001011B, 00001001B, 00001000B
END main

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.