Documente Academic
Documente Profesional
Documente Cultură
page 1 / 5
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
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
Fini ?
OUI
Temporisation 0,5s
NON
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
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
CONT
Fini ?
OUI
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
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).
__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
CONT4
CONT3
Fini ?
OUI
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 ; 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
page 4 / 5
__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
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
Fini ?
OUI
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