Programació en mpasm del PIC 16F690

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

Programant en assemblador

En assemblador cada instrucció es representa amb el seu mnemònic.

Normalment també donem noms a les variables per no haver d'anar posant les seves adreces. De la mateixa manera, podem posar etiquetes per indicar posicions de programa i així fer els salts sense haver d'anar calculant l'adreça que els correspon. Addicionalment, podem afegir comentaris per deixar clar què fa cada instrucció o tros de programa.

Els valors els introduïm en el format que ens vagi millor (binari, decimal, etc.). El programari compilador s'encarregarà de traduir mnemònics, adreces, variables i valors al codi màquina corresponent.

A continuació tenim un tros de programa en el que es comenten els principals elements:

Tros de programa

Hi ha alguns altres elements que també han d'estar en un programa complet. Anem a veure-ho a partir del programa següent.

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
	cblock 0x20
Valor					; Variable on guardem el que mostraran el valor
	endc
	org 0
Inici
	bsf		STATUS,RP0	; Tria el banc 1
	clrf		TRISC		; Posa tots els bits del port C com a sortida
	bcf		STATUS,RP0	; Tria el banc 0
	movlw		b'00001000'	; Posa el valor al registre W
	movwf		Valor		; Copia el valor de W a la variable Valor
Bucle
	movf		Valor,w		; Copia la variable Valor sobre el registre W
	movwf		PORTC		; Copia el valor de W al port C
	bcf		STATUS,C	; posa a zero el bit d'arrossegament
	rrf		Valor,f		; Fa rodar els bits cap a la dreta
					; el bit d'arrossegament entra per l'esquerra
					; i el bit de la dreta passa a l'arrossegament
	btfsc		STATUS,C	; Comprova si s'ha activat l'arrossegament
					; Si no s'ha activat, salta una instrucció
	bsf		Valor,3		; Si s'ha activat, torna a posar un 1 
	goto		Bucle		; Repetim-ho...
	end

A la primera part (fons groc) fem la configuració general. La primera línia li diu al compilador que inclogui el fitxer de característiques del PIC 16F690. En aquest fitxer hi ha, per exemple, les adreces dels registres específics del processador; així quan nosaltres indiquem PORTC, el compilador sap quina adreça li correspon.

La segona línia fa la configuració general del processador; són uns registres que només poden ser modificats en el moment de programar i que especifíquen la configuració que volem. En aquest cas hem posat la configuració bàsica, amb totes les funcions especials desactivades.

El segon bloc (fons blau) és la definició de les variables. A la primera línia li diem que la primera variable es situï a l'adreça 20h, la primera adreça de memòria de dades disponible. Podeu trobar l'organització de la memòria de dades a la la figura 2-8 del document de característiques del PIC 16F690. En aquest cas definim una sola variable (anomenada Valor) que, per tant, es guardarà a l'adreça 20h. La darrera instrucció d'aquest bloc indicque s'ha acabat la definició de variables.

Al darrer bloc (fons vermell) hi ha el programa pròpiament dit. A la primera línia li diem que el programa comença a l'adreça 0 (primera adreça de la memòria de programa). El programa s'inicia amb l'etiqueta Inici i acaba amb end. L'etiqueta Inici no és necessària (si no hi ha cap goto que hi vagi) però ens ajuda a veure l'estructura del programa. Podeu trobar la llista de les instruccions i la seva descripció a l'apartat 15 del document de característiques del PIC 16F690.

Anem a comentar algunes coses d'aquest programa. La memòria del microcontrolador està estructurada en quatre bancs. Encara que normalment les nostres variables estaran al banc 0, sovint necessitarem accedir a altres bancs (habitualment al banc 1) per poder llegir o escriure registres interns del microcontrolador. En aquest cas hem d'accedir al banc 1 per canviar la configuració d'entrades i sortides del port C (TRISC) que és on tenim connectats els LED.

El registre STATUS conté els dos bits que controlan els bancs de memòria (RP0 i RP1) i els bits d'estat que ens donen informació sobre el resultat d'algunes instruccions.

Els programes molt senzills tenen un codi que només es repeteix un cop, com és el cas de l' exemple EL. Llavors la darrera línia del programa és:

...
	goto		$		; Es bloqueja aquí
	end

El goto indica al programa que salti a una posició concreta i el signe $ indica la posició actual. Així el programa es queda repetint indefinidament aquesta instrucció; fins que desconnectem l'alimentació i la tornem a connectar. Si no hi hagués aquesta línia, el microcontrolador executaria les instruccions que hi pugui haver en les posicions següents i que no sabem quines són; per tant tindríem un funcionament incontrolat.

Els programes més habituals tenen una part que només s'executa quan engeguem el microcontrolador (inicialització) i una part que es repeteix indefinidament. En el programa que hem posat d'exemple més amunt, la part d'inicialització està entre les etiquetes Inici i Bucle. A partir de l'etiqueta Bucle hi ha el tros de programa que es repeteix indefinidament.

 

 

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