Vous êtes sur la page 1sur 2

Université Sultan Moulay Slimane Année Universitaire 2016/2017

FST Béni Mellal


Département de Physique

LST IETel – F.I. Génie Physique – F.I. Productique-Mecatronique

Examen (2H)
Module : Microcontrôleurs
(Informatique industrielle)

Exercice 1 (10pts)
On désire réaliser un compteur modulo 60 (00, 01, 02, 03, …, 59, 00, ...) en utilisant un
microcontrôleur PIC 16F84, comme le montre le schéma ci-dessous (Le circuit 7448 est un
décodeur binaire/7segments). Pour cela on utilisera deux variables une pour les unités
« unite » et l’autre pour les dizaines « dizaine », et on affichera les unités sur le PORTA et les
dizaines sur le PORTB. Le comptage se fera au rythme d’une demi-seconde.
1. Comment doit-on configurer les ports du PIC ?
2. Donner l’organigramme du programme sans utilisation d’interruption, donner une
explication en quelques lignes.
3. Donner le programme en assembleur avec initialisation et temporisation.
4. Facultatif : Donner l’organigramme du programme utilisant l’interruption du Timer.

Exercice 2 (10pts)
Le programme ci-dessous permet de changer l’état d’une Led branchée sur la broche RA2 à
l’aide d’un bouton poussoir PB branché sur RB0. Donner l’organigramme du programme.
Quelle est la durée de la temporisation « tempo ». Que signifient les valeurs des registres
OPTION_REG et INTCON ? Quelle est le rôle de la variable ‘’var’’ ?
On veut modifier le programme pour que le premier appui sur PB change l’état de la Led
rouge branchée sur RA0, le second appui sur PB change l’état de la Led verte branchée sur
RA1 et le 3ème appui sur BP change l’état de la Led orange branchée sur RA2. Le 4ème appui
change la Led rouge, etc …
Donner l’organigramme du programme et expliquer son fonctionnement ;
Donner le programme complet en assembleur pour le PIC 16F84.

LIST p=16F84A
#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
;********************************* BANK1
OPTIONVAL EQU H'00' movlw OPTIONVAL
INTERMASK EQU H'90' movwf OPTION_REG
;********************************* movlw 0x0c
#DEFINE Bouton PORTB , 0 movwf FSR
init1
#DEFINE LED PORTA , 2 clrf INDF
;******************************* incf FSR,f
BANK0 macro btfss FSR,6
bcf STATUS,RP0 goto init1
endm btfss FSR,4
BANK1 macro goto init1
bsf STATUS,RP0 bcf LED
endm BANK0
;******************************* movlw INTERMASK
CBLOCK 0x0C movwf INTCON
w_temp :1 return
status_temp : 1 ;******************************
cmpt1 : 1 tempo
cmpt2 : 1 movlw 0xF0
var : 1 movwf cmpt2
ENDC boucle2
;***************************** clrf cmpt1
org 0x000 boucle1
goto start decfsz cmpt1,f
;****************************
org 0x004 goto boucle1
movwf w_temp decfsz cmpt2,f
swapf STATUS,w
movwf status_temp goto boucle2
movlw B'00000100' return
BANK0 ;**********************************
xorwf PORTA , f start
bcf INTCON , INTF call init
bcf INTCON , INTE start1
incf var,f movf var,f
swapf status_temp,w btfsc STATUS, Z
movwf STATUS goto start1
swapf w_temp,f call tempo
swapf w_temp,w clrf var
retfie bcf INTCON,INTF
;****************************** bsf INTCON,INTE
init goto start1
clrf PORTA END
clrf EEADR

Vous aimerez peut-être aussi