Programació en pic-as del PIC 16F690

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

Modificació del comptador de programa

El comptador de programa és un registre intern del microcontrolador que indica a quina adreça de la memòria de programa cal anar a buscar la instrucció següent. Fins ara, hem deixat que el microcontrolador inicialitzés automàticament el comptador de programa i l'hem modificat amb les instruccions goto, call, return, etc.

Però en alguns casos és interessant poder modificar el comptador de programa a partir de les instruccions. Una possible aplicació la trobareu a l'exemple PC.

Com es poden adreçar posicions de memòria de programa des de la 0000h fins a la 1FFFh, cal que el comptador de programa tingui 13 bits; per això el comptador està guardat en dos registres, els vuit bits de menys pes a PCL i els cinc de més pes a PCH. Si el nostre programa és curt, PCH valdrà sempre 00000 i no ens n'haurem de preocupar. En cas contrari, caldrà gestionar els dos registres. Fixem-nos que si modifiquessim PC directament resultaria que en modificar un dels dos registres (PCH o PCL) el programa seguiria en una altra adreça i ja no faria el que volem. El microcontrolador té implementat un sistema per evitar aquest problema. Quan volem canviar el comptador de programa haurem de posar primer els cinc bits superiors a un registre anomenat PCLATH, que és un magatzem temporal. Quan nosaltres escrivim a PCL el microcontrolador, a més de l'escriptura que hem demanat, copia PCLATH sobre PCH i així aconsegueix que l'adreça canviï tota sencera d'un sol cop.

Comptador de programa

Al següent tros de programa, veiem com canviar el comptador de programa:

  ...
  movlw high Adre  ; Carrega la part alta de l'adreça
  movwf PCLATH  ; Ho posa a la part alta de PC
  movlw low Adre  ; Carrega la part baixa de l'adreça
  movwf PCL  ; Modifica el valor de PCL i també el de PCH
  ...

 

 

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