Sunteți pe pagina 1din 5

PIC PROGRAMMATION ASSEMBLEUR

TP III) Listing programme avec code machine:


; Programme pour faire clignoter une LED sur RB0 ; Version 1.0 temps cycle machine 1s #include <p16f627.inc> TEMPELE NBTEMP

page 1 / 5

TP CLIGNOTEMENT LED 1HZ


I) Prsentation :
L'objectif est de faire clignoter une LED la frquence de 1Hz. Pour cela, il faudra qu'elle soit allume pendant 0,5s, puis teinte pendant aussi pendant 0,5s. La LED utilise est connecte sur le bit 0 du port B.

II)

Algorigramme :
Dbut Temporisation 0,5s Initialiser le nombre de temporisation lmentaire

EQU 0x20 EQU 0x21 __CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ; Configuration obligatoire org bsf movlw movwf bcf bsf call bcf call goto 0x00 STATUS,RP0 B'11000000' H'06' STATUS,RP0 PORTB,0 TEMPO PORTB,0 TEMPO CONT ; Acces a BANK1 ; Ne pas mettre RB6 et RB7 en sortie, RB5 a RB0 en entre ; Programmation du registre TRISB (config port B) ; Acces a BANK0 ; LED1 (RB0) allumee ; Appel au s/prg temporisation ; LED1 (RB0) eteinte ; Appel au s/prg temporisation

Initialiser accs Bank 1 Initialiser RB0 RB5 en sortie Et RB6 et RB7 en entre Initialiser accs Bank 0

CONT

Initialiser la valeur de la temporisation lmentaire

Utilisation de 5 NOP Mettre 1 sur RB0 Dcrmenter la temporisation lmentaire Temporisation 0,5s
NON

; S/prg temporisation de 0,5s TEMPO movlw D'255' movwf NBTEMP CONT1 movlw D'255' movwf TEMPELE CONT2 nop nop nop nop nop

; Initialisation variable nb temporisation elementaire ; Initialisation variable duree temporisation elementaire

Fini ?
OUI

Mettre 0 sur RB0

Temporisation 0,5s
NON

Dcrmenter le nombre de temporisation lmentaire Fini ?


OUI

decfsz TEMPELE=0 goto CONT2 ; Branch inconditionnel a CONT2 decfsz NBTEMP,F ; Decremente de -1 NBTEMP et saute la ligne suivante si NBTEMP=0 goto CONT1 ; Branch inconditionnel a CONT1 return ; temporisation=4s+NBTEMPx(5s+TEMPELEx8s)=521479s environ 0,52s end

; Rajoute 5s pour le calcul de la duree ;de temporisation elementaire TEMPELE,F ; Decremente de -1 TEMPELE et saute la ligne suivante si

RETURN

PIC PROGRAMMATION ASSEMBLEUR

TP III) Listing programme avec code machine:


; Programme pour faire un chenillard 1 sens sur 6 LEDs 0,333Hz ; Version 1.0 temps cycle machine 1s #include <p16f627.inc> TEMPELE NBTEMP MASQUE EQU EQU EQU 0x20 0x21 0x22

page 2 / 5

TP CHENILLARD 0,333HZ
I) Prsentation:
L'objectif est de raliser un chenillard dont la frquence de rotation est de 0,333Hz. La premire LED s'allumer tant la LED1 (port B, bit 0). On allume les LEDs de LED1 LED6 (RB0 RB5). Pour cela, il est demand d'crire le programme suivant les ordinogrammes dcrits ci-aprs (les respecter).

II)

Algorigramme:
Dbut Temporisation 0,5s Initialiser le nombre de temporisation lmentaire

__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ; Configuration obligatoire org 0x00 bsf STATUS,RP0 movlw B'11000000' movwf H'06' bcf STATUS,RP0 movlw H'01' movwf MASQUE movf MASQUE,W movwf PORTB call TEMPO bcf STATUS,C rlf MASQUE btfss MASQUE,6 goto CONT goto DEBUT ; Acces a BANK1 ; Ne pas mettre RB6 et RB7 en sortie, RB5 a RB0 en entre ; Programmation du registre TRISB (config port B) ; Acces a BANK0 ; Initialise la valeur du masque ; Valeur stockee dans la RAM a l'etiquette MASQUE ; Registre W= valeur MASQUE ; LEDx (RBx) allumee ; Appel au s/prg temporisation ; Met le bit CARRY a 0 ; Rotation a gauche du masque ; Test bit 6 du MASQUE. Branch a CONT si bit6<>1

Initialiser accs Bank 1 Initialiser RB0 RB5 en sortie Et RB6 et RB7 en entre Initialiser accs Bank 0

DEBUT

Initialiser la valeur de la temporisation lmentaire

CONT

Utilisation de 5 NOP Initialiser un masque stock en mmoire Dcrmenter la temporisation lmentaire


NON

Mettre le masque sur le port B Temporisation 0,5s

Fini ?
OUI

Dcrmenter le nombre de temporisation lmentaire


NON

Rotation gauche du masque

Fini ?
OUI

NON

Bit 6 du masque 1 ?
OUI

RETURN

; S/prg temporisation de 0,5s TEMPO movlw D'255' ; Initialisation variable nb temporisation elementaire movwf NBTEMP CONT1 movlw D'255' ; Initialisation variable duree temporisation elementaire movwf TEMPELE CONT2 nop nop nop nop nop ; Rajoute 5s pour le calcul de la duree de temporisation elementaire decfsz TEMPELE,F ; Decremente de -1 TEMPELE et saute la ligne si TEMPELE=0 goto CONT2 ; Branch inconditionnel a CONT2 decfsz NBTEMP,F ; Decremente de -1 NBTEMP et saute la ligne si NBTEMP=0 goto CONT1 ; Branch inconditionnel a CONT1 return ; temporisation=4s+NBTEMPx(5s+TEMPELEx8s)=521479s environ 0,52s end

PIC PROGRAMMATION ASSEMBLEUR

TP III) Listing programme avec code machine:


; Programme pour faire un chenillard 1 sens sur 6 LEDs 0,333Hz ; Version 1.0 temps cycle machine 1s #include <p16f627.inc> 00005 TEMPELE EQU NBTEMP EQU MASQUE EQU

page 3 / 5

TP CHENILLARD 0,167HZ
I) Prsentation:
L'objectif est de raliser un chenillard dont la frquence de rotation est de 0,167Hz. On doit raliser un chenillard qui dfile un coup gauche, puis un coup droite de la LED1 LED6 (RB0 RB5). Pour cela, il est demand d'crire le programme suivant les ordinogrammes dcrits ci-aprs (les respecter).

0x20 0x21 0x22

__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ; Configuration obligatoire org bsf movlw movwf bcf movlw movwf movf movwf call bcf rlf btfss goto bcf rrf bcf rrf movf movwf call btfss goto goto 0x00 STATUS,RP0 B'11000000' H'06' STATUS,RP0 H'01' MASQUE MASQUE,W PORTB TEMPO STATUS,C MASQUE MASQUE,6 CONT STATUS,C MASQUE STATUS,C MASQUE MASQUE,W PORTB TEMPO MASQUE,W CONT3 CONT4 ; Acces a BANK1 ; Ne pas mettre RB6 et RB7 en sortie, RB5 a RB0 en entre ; Programmation du registre TRISB (config port B) ; Acces a BANK0 ; Initialise la valeur du masque ; Valeur stockee dans la RAM a l'etiquette MASQUE ; Registre W= valeur MASQUE ; LEDx (RBx) allumee ; Appel au s/prg temporisation ; Met le bit CARRY a 0 ; Decalage a gauche du masque pour la LED suivante ; Test bit 6 du MASQUE. Branch a CONT si bit6<>1 ; Met le bit CARRY a 0 ; Remet le masque sur la LED6 (bit5 du port B) ; Met le bit CARRY a 0 ; Decalage a droite du masque pour la LED suivante ; Registre W= valeur MASQUE ; LEDx (RBx) allumee ; Appel au s/prg temporisation ; Test bit 0 du MASQUE. Branch a CONT si bit0<>1 ; Fin de l'aller/retour

II)

Algorigramme:
Dbut Temporisation 0,5s Initialiser le nombre de temporisation lmentaire

Initialiser accs Bank 1 Initialiser RB0 RB5 en sortie Et RB6 et RB7 en entre Initialiser accs Bank 0

DEBUT CONT

Initialiser la valeur de la temporisation lmentaire

CONT4

Utilisation de 5 NOP Initialiser un masque stock en mmoire Dcrmenter la temporisation lmentaire


NON

CONT3

Mettre le masque sur le port B Temporisation 0,5s

Fini ?
OUI

Dcrmenter le nombre de temporisation lmentaire


NON

Rotation gauche du masque

Fini ?
OUI

NON

Bit 6 du masque 1 ?
OUI

RETURN

Rotation droite du masque

Rotation droite du masque Mettre le masque sur le port B Temporisation 0,5s


NON

; S/prg temporisation de 0,5s TEMPO movlw D'255' ; Initialisation variable nb temporisation elementaire movwf NBTEMP CONT1 movlw D'255' ; Initialisation variable duree temporisation elementaire movwf TEMPELE CONT2 nop nop nop nop nop ; Rajoute 5s pour le calcul de la duree de temporisation elementaire decfsz TEMPELE,F ; Decre. de -1 TEMPELE et saute la ligne si TEMPELE=0 goto CONT2 ; Branch inconditionnel a CONT2 decfsz NBTEMP,F ; Decre. de -1 NBTEMP et saute la ligne si NBTEMP=0 goto CONT1 ; Branch inconditionnel a CONT1 return ; temporisation=4s+NBTEMPx(5s+TEMPELEx8s)=521479s 0,5ms end

environ

Bit 0 du masque 1 ?
OUI

PIC PROGRAMMATION ASSEMBLEUR

TP III) Listing programme avec code machine:


; Programme pour lire les switchs et allumer les LEDs ; Version 1.0 #include <p16f627.inc>

page 4 / 5

TP LECTURE & AFFICHAGE ETATS MICROSWITCHS


I) Prsentation :
L'objectif est de lire l'tat des microswitchs connects sur le port A (RA0 RA3). L'tat de chaque microswitch sera visualis par une LED. Les LEDs sont connectes sur le port B. Nous utiliserons les LEDs 0 3. Pour cela, il est demand d'crire le programme suivant les ordinogrammes dcrits ci-aprs (les respecter).

__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ; Configuration obligatoire org movlw logique movwf bsf movlw movwf movlw movwf bcf movf andlw movwf goto end 0x00 B'00000111' CMCON STATUS,RP0 B'11000000' H'06' B'11111111' H'05' STATUS,RP0 PORTA,W B'00001111' PORTB fin ; Disable Comparator module's pour utiliser le port A en ; Acces a BANK1 ; Ne pas mettre RB6 et RB7 en sortie, RB5 a RB0 en entre ; Programmation du registre TRISB (config port B) ; RA0 a RA7 en entree (port A) ; Programmation du registre TRISA (config port A) ; Acces a BANK0 ; Registre W= lecture port A ; Et logique pour ne garder que les 4 bits de poids faibles ; LEDs (RB0) allumees en fonction des switchs

II)

Algorigramme :
Dbut

Inhiber le comparateur
fin

Initialiser accs Bank 1 Initialiser RB0 RB5 en sortie Et RB6 et RB7 en entre Initialiser RA0 RA7 en entre Initialiser accs Bank 0

Lecture du port A Ne garder que les 4 bits de poids faibles de la lecture Ecriture du rsultat dans le port B

PIC PROGRAMMATION ASSEMBLEUR

TP III) Listing programme avec code machine:


; Programme pour lire les switchs et allumer les LEDs et clignotement LED 5 ; Version 1.0 #include <p16f627.inc> TEMPELE NBTEMP EQU EQU 0x20 0x21

page 5 / 5

TP LECTURE ET CLIGNOTEMENT
I) Prsentation :
L'objectif est de lire l'tat des microswitchs 1 4, c'est dire ceux connects sur les bits 0 3 du port A. La LED5 connecte sur le bit 4 du port B devra clignoter 1Hz alors que les autres LEDs devront indiquer l'tat de chacun des microswitchs (LED1 LED4 sur RB0 RB3). Pour cela, il est demand d'crire le programme suivant les ordinogrammes dcrits ci-aprs (les respecter).

__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ; Configuration obligatoire org movlw logique movwf bsf movlw movwf movlw movwf bcf call movlw xorwf goto CMCON STATUS,RP0 B'11000000' H'06 B'11111111 H'05' STATUS,RP0 TEMPO B'00010000' PORTB,F fin ; Acces a BANK1 ; Ne pas mettre RB6 et RB7 en sortie, RB5 a RB0 en entre ; Programmation du registre TRISB (config port B) ; RA0 a RA7 en entree (port A) ; Programmation du registre TRISA (config port A) ; Acces a BANK0 ; Appel au S/prg temporisation ; Changement etat LED (0->1 ou 1->0) 0x00 B'00000111' ;Disable Comparator module's pour utiliser le port A en

II)

Algorigramme :
Dbut Temporisation 0,5s Initialiser le nombre de temporisation lmentaire

Inhiber le comparateur

Initialiser accs Bank 1 Initialiser RB0 RB5 en sortie Et RB6 et RB7 en entre Initialiser RA0 RA7 en entre Initialiser accs Bank 0 Initialiser la valeur de la temporisation lmentaire

fin
Mmoriser tat LED5 Eteindre LED0 LED4 Lire les switchs Concatner la lecture avec le port B

Temporisation 0,5s Dcrmenter la temporisation lmentaire Changer tat LED5


NON

Fini ?
OUI

Dcrmenter le nombre de temporisation lmentaire


NON

Fini ?
OUI

; S/prg temporisation de 0,5s TEMPO movlw D'255' ; Initialisation variable nb temporisation elementaire Movwf NBTEMP CONT1 movlw D'255' ; Initialisation variable duree temporisation elementaire movwf TEMPELE CONT2 movlw B'00010000' andwf PORTB,F ; Garde LED5. Autres LEDs eteintes. Resultat dans port B movlw B'00001111' ; Et logique pour ne garder que les 4 bits de poids faibles andwf PORTA,W ; Registre W= lecture port A iorwf PORTB,F ; LEDs fonction des switchs et etat LED clignotante decfsz TEMPELE,F ; Decremente de -1 TEMPELE et saute la ligne si TEMPELE=0 goto CONT2 ; Branch inconditionnel a CONT2 decfsz NBTEMP,F ; Decremente de -1 NBTEMP et saute la ligne si NBTEMP=0 goto CONT1 ; Branch inconditionnel a CONT1 return ; temporisation=4s+NBTEMPx(5s+TEMPELEx8s)=521479s environ 0,52s end

RETURN

S-ar putea să vă placă și