Programació en mpasm 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. La manera més senzilla és emprar la directiva cblock per definir l'adreça de la primera variable i les que definim a continuació es guardaran en adreces successives. Tancarem la definició de variables amb endc.

	cblock 0x20
Memoria			; Aquesta es situarà a 20h
Retard1			; A 21h
Retard2			; A 22h
	endc

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:

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

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:

	cblock 0x20	; Zona de memòria de dades habitual
Resultat:2		; Variable de dos bytes, estarà a 20h i 21h
Vector:8		; Vector de 8 posicions, de la 22h a la 29h
Comptador		; Estarà a 2Ah
	endc
	cblock 0xA0	; Zona de memòria de dades del banc 1
Taula:40		; Vector de 64 posicions (40h = 64)
	endc
	cblock 0x120	; Zona de memòria de dades del banc 2
Valors:.64		; Vector de 64 posicions
	endc
...
	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. Cal tenir present que les adreces de memòria de programa són de 14 bits o sigui que caldrà posar dues parelles de valors per adreça.

	org 0x40
Dada1   db   0,.34   		; Guarda 0022h a la posició 40h de la memòria de programa
Dada2   db   0,.12,0,.11	; Guarda 000Ch a la posició 41h  i 000Bh a la 42h
	org 0
...

També podem definir adreces de la memòria EEPROM. A més la directiva de 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 org) i es codifica sumant 2100h a l'adreça de la memòria EEPROM que ens interessa. Per exemple, el tros de programa següent crea una constant (o variable) de 3 posicions de 00h a 02h de la memòria EEPROM i li assigna ja un contingut (en aquest cas tres caràcters ASCII).

	org 0x2100		; Inici de la memòria EEPROM
Etiqueta  de  "PIC" 		; 3 adreces que contenen els caràcters especificats
	org 0
...

 

 

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