Vous êtes sur la page 1sur 3

Informatique PIC 16F84A

Utilisation des tables instruction retlw Page 1 L'instruction retlw permet de retourner une valeur dans W lors du retour d'un sous-programme. Cette instruction va pouvoir tre utilise pour crer des tables de valeurs. Exemple 1: Vous dsirez sortir sur le PORTB la valeur (0 ou 1) des diffrents segments d'un afficheur 7 segments qui y est branch (segments a g sur PORTB,0 PORTB,6). Le chiffre afficher est contenu dans une variable Affiche. Dans l'exemple suivant, il n'y a rien de branch sur PORTB,7. Programme: movf call Affiche,w Table ;mettre le contenu de Affiche dans W ;appel de la table ;sortie sur le PORTB du code contenu dans W

movwf PORTB Table

addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

PCL,f b'00111111' b'00000110' b'01011011' b'01001111' b'01100110' b'01101101' b'01111101' b'00000111' b'01111111' b'01101111'

;additionner W (Affiche) avec PCL ;chiffre 0 - retour avec dans W le code correspondant Affiche ;chiffre 1 ;chiffre 2 ;chiffre 3 ;chiffre 4 ;chiffre 5 ;chiffre 6 ;chiffre 7 ;chiffre 8 ;chiffre 9

Cette manire de concevoir la table peut avoir parfois de curieux effets. Si l'on se rfre au livre (pages 42 46), l'adresse de l'instruction suivante n'est pas donn que par PCL, mais est une combinaison de PCH et de PCL. Avec l'opration addwf PCL,f , on se trouve dans la situation 1 de la figure 3.4 de la page 45. La nouvelle adresse de PC sera calcule avec la valeur de PCLATH pour PCH et la nouvelle valeur de PCL (aprs addition). Que se passe-t-il si la valeur additionne PCL le fait dborder? PC va alors pointer vers une instruction ailleurs que dans la table.

EPAI Fribourg / Herv Page / Utilisation des tables.odt

Informatique PIC 16F84A


Utilisation des tables instruction retlw Page 2 Comment viter ce problme ? Une solution est de fixer l'adresse de la table par une instruction org et de fixer la valeur de PCLATH, ainsi, on peut additionner des valeurs sans risque de dbordement (si la valeur dans affiche peut tre suprieure 251, il faudrait alors couper la table en plusieurs parties). Table org 0x300 ;place la Table en 300H movlw 0x3 movwf PCLATH ;place PCLATH en 300H movf Affiche,w addwf PCL,f retlw b'00111111' ;chiffre 0 - retour avec dans W le code correspondant Affiche suite de la table inchange

Exemple 2: En fonction de la position sur un affichage, on dsire retourner le code ASCII correspondant une lettre d'un message afficher. Le message sera plac dans une table appele Ligne_1. On va utiliser une directive dt pour dfinir la table en une seule ligne. org 0x300 Ligne_1 movlw 0x3 movwf PCLATH movf Position,w addwf PCL,f dt "EPAI FRIBOURG",0

;place PCLATH en 300H ;car l'adresse se calcule en faisant ;PCLATH+PCL

La ligne dt "EPAI FRIBOURG",0 est quivalente : retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw "E" "P" "A" "I" "" "F" "R" "I" "B" "O" "U" "R" "G" 0

;caractre correspondant un espace vide

;chiffre 0 marquant la fin du message (sans guillemets, sinon on a le code ASCII de 0)

La directive dt peut s'utiliser pour dfinir toutes sortes de tables. Il suffit de sparer les diffrents lments de celle-ci par une virgule. La table de l'exemple 1 aurait alors la forme:
dt b'00111111',b'00000110',b'01011011',b'01001111',b'01100110',b'01101101',b'01111101',b'00000111',b'01111111',b'01101111'

Cette version rendant difficile les commentaires, il n'y aurait pas de grand intrt l'utiliser dans le cas.
EPAI Fribourg / Herv Page / Utilisation des tables.odt

Informatique PIC 16F84A


Utilisation des tables instruction retlw Page 3 Exemple 3: Dans ces diffrents exemples, on est toujours tributaire dun ventuel dbordement de la table sur une autre page. Il existe une solution nous librant de ce problme: call Table ; appel de la table Table pageselw Deb_Table movlw Deb_Table addwf Position,w btfsc STATUS,C incf PCLATH,f movwf PCL ; Positionne PCLATH en fonction de la position du dbut de la table ; Charge les 8 bits de poids faible de ladresse de la table dans W ; Additionne le dcalage ; Test si lon a dbord de la page ; .si oui, on incrmente PCLATH ; On saute dans la table ladresse voulu (ladresse de destination est ; compose de PCL et de PCLATH

Deb_Table dt 0,1,2,3,4,5,6,7,8,9,10

EPAI Fribourg / Herv Page / Utilisation des tables.odt

Vous aimerez peut-être aussi