Vous êtes sur la page 1sur 3

AU: 2018/2019

Département d’Electronique 2ème Semestre


TD2 Microprocesseurs & Microcontrôleurs
Exercice 1:

On considère les codes assembleurs du PIC16F84 (sachant que T=4*Tosc):

1) Avec une fréquence d'oscillation Fosc = 400 KHz. Calculer approximativement le délai d'exécution de
chacun du code suivant (sachant que T=4*Tosc)::
MOVLW 0ff 1T
MOVWF var1 1T
btfss var1,0 2T
sublw 10 skipped

F=Fosc/4 = 400Khz/4 = 100Khz


T=1/F = 1/100 000 = 10 sec.
Time = 10*(1+1+2)= 40 sec.

2) Avec une fréquence d'oscillation Fosc = 8 MHz. Calculer approximativement le délai d'exécution de
chacun du codes suivant (sachant que T=4*Tosc)::
MOVLW D'200'
MOVWF counter
L1 NOP
NOP
DECFSZ counter, 1
GOTO L1
A) 1000s B) 125 s C) 0,5 ms D) 1s

Exercice 2:

1) On considère le code assembleur suivant du PIC16F84


MOVLW 00
MOVWF porta
MOVWF portb
btfss porta,3 ; Supposons que A[3]= '0'
goto label1
bsf porta,3
bcf portb,4
label1 bsf portb,3
bcf porta,4
une fréquence d'oscillation Fosc = 8 MHz. Calculer approximativement le délai d'exécution de chacun du
codes suivant (sachant que T=4*Tosc):

TD2 processeurs & contrôleurs.


2) Ecrire le code assembleur permettant de configurer le timer TMR0 (à l'adresse 01h) pour déclencher une
interruption après 20 impulsions externes. Les registres INTCON (à l'adresse 0bh) et OPTION_REG (à
l'adresse 81h).
Solution:

TMR0 = 256-20 = 236 (to overflow après 20 impulsions)


OPTION_REG=B'xx1x1xxx (selectioner une horloge externe pour
INTCON= B'1x1x00xx (GIE=1, T0IE=1, T0IF=0)

MOVLW D'236'
MOVWF TMR0
BSF STATUS, RP0
MOVLW 0x28
MOVWF OPTION_REG
bsf INTCON, T0IE
bsf INTCON, GIE

3) Pour le code assembleur suivant, trouver la valeur de k donnant un délai approximative de 240
microsecondes. Supposons que la fréquence de l'horloge de l'oscillateur Fosc=4Mhz.

Delay MOVLW k
D_loop ADDLW -1
btfss STATUS,Z
goto D_loop
return

TD2 processeurs & contrôleurs.


Jeux d'instructions du PIC16F84

Opérande Description Détail Variables Cycle Flag affectés


ADDLW k Add literal and k (W) + k  (W) 1 C,DC,Z
ADDWF f,d Add W and k (W) + (f)  (destination) d[0,1] 1 C,DC,Z
ANDLW k AND literal with W (W).AND.k (W) 1 Z
ANDWF f,d AND W with f (W).AND.(f)(destination) d[0,1] 1 Z
BCF f,b Bit clear f 0 (f<b>) 0b7 1
BSF f,b Bit set f 1 (f<b>) 0b7 1
BTFSS f,b Bit test f, skip if set Skip (sauter) if (f<b>)=1 0b7 1(2)
BTFSC f,b Bit test f, skip if clear Skip (sauter) if (f<b>)=0 0b7 1(2)
CALL k Call subroutine K PC 2
CLRF f Clear f 00h (f) 1 Z
CLRW Clear W 00h  (W) 1 Z
CLRWDT Clear watchdog timer 00h  WDT 1 Z
COMF f,d Complement f (f)  (destination) d[0,1] 1 Z
DECF f,d Decrement f (f)-1 (destination) d[0,1] 1 Z
DECFSZ f,d Decrement f, skip if 0 (f)-1 (destination), skip if d[0,1] 1(2)
result =0
GOTO k Unconditional branch k PC 2
INCF f,d Increment f (f)+1 (destination) d[0,1] 1 Z
INCFSZ f,d Increment f, skip if 0 (f)+1 (destination), skip if 1(2)
result =0
IORLW k IOR literal with W (W) .OR. k  (W) 1 Z
IORWF f,d IOR W with f (W) .OR.(f)  (destination) d[0,1] 1 Z
MOVF f,d Move f (f) (destination) 1 Z
MOVLW k Move literal to W k (W) 1
MOVWF f Move W to f (W ) (f) 1
NOP No operation 1
RETURN Return from Subroutine 2
RLF f,d Rotate Left f through Carry 1 C
RRF f,d RotateRight f through Carry 1 C
SUBLW Substract f from literal k - (W)  (W) 1 C,DC,Z
SUBWF Substract W from f (f) - (W)  (destination) 1 C,DC,Z
XORLW k XOR Literal with W (W) .XOR. k  (W) 1 Z
XORWF f,d Exclusive OR W with f (W).XOR.(f) destination) d[0,1] 1 Z

Note: destination = W si d=0 et 0 f 127


= f si d =1

TD2 processeurs & contrôleurs.

Vous aimerez peut-être aussi