Bonjour a tous, je dois faire un projet de licence en genie electrique , c'est la gestion de feux tricolors avec micro controleur
(16f877), en gros c'est une intérsection qui contient 4 feux tricolors ( qui marche 2 à 2 ) + 2 feux bicolore pour les piétons
je dois programmer tout ça en assembleur ( MPLAB ) et j'ai du mal car c'est tout nouveau pour moi :-( si quelqu'un peut m'aider, en
m'indiquant juste des liens ou je pourais apprendre des le debut , ou carrement ou je peux trouver ce programme :-p merci bien
RB7-RB6-RB5-RB4-RB3-RB2-RB1-RB0
R2-O2-V2-R1-O1-V1-RP1/VP2-VP1/RP2
list p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Définition des constantes ---------------
#define inter0 0 ; bouton marche
#define inter1 1 ; bouton clignotement orange
;------------ Définition des registres temporaires ---------------
retard1 EQU 0x0C ; le registre temporaire retard1 se trouve à l' adresse 0C
retard2 EQU 0x0F ; le registre temporaire retard2 se trouve à l' adresse 0F
retard3 EQU 0x10 ; le registre temporaire retard3 se trouve à l' adresse 10
;------------ Init des ports A et B ---------------
ORG 0
bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder
; à la 2eme page mémoire ( pour trisa et trisb )
MOVLW 0x00 ; on met 00 dans le registre W
MOVWF TRISB ; on met 00 dans le port B il est programmé en sortie
MOVLW 0x1F ; on met 1F dans le registre W
MOVWF TRISA ; on met 1F dans le port A il est programmé en entrée
bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status pour accéder
; à la 1eme page mémoire
;------------ Init des feux ROUGE1 et ROUGE2 ---------------
MOVLW B'00001001' ; on met 0C dans le registre W ( Rouge1 et Rouge2 )
MOVWF PORTB ; on met W sur le port B ( led )
;-------------------- Programme principal ----------------------
debut
; MOVLW 0x00 ; on met 0C dans le registre W ( Rouge1 et Rouge2 )
; MOVWF PORTB ; on met W sur le port B ( led )
; btfss PORTA,inter0 ; interrupteur 0 ( marche ) appuyé ? si oui on continu sinon
;va à debut
; goto debut
btfsc PORTA,inter0 ; interrupteur 1 ( clignotant ) appuyé ? si oui on
;va à clignote
goto clignote
; MOVLW B'00001001' ; on met 0C dans le registre W ( Rouge1 et Rouge2 )
; MOVWF PORTB ; on met W sur le port B ( led )
;--------------- Chargement de la temporisation ---------------------
; CALL tempo ; on appel la temporisation 1 ( longue )
MOVLW 0x86 ; on met 0C dans le registre W ( Vert1 et Rouge2 )
MOVWF PORTB ; on met W sur le port B ( led )
CALL tempo ; on appel la temporisation 1 ( longue )
MOVLW 0x8A ; on met 0A dans le registre W ( Orange1 et Rouge2 )
MOVWF PORTB ; on met W sur le port B ( led )
CALL tempo2 ; on appel la temporisation courte
MOVLW 0x31 ; on met 0C dans le registre W ( Rouge1 et Rouge2 )
MOVWF PORTB ; on met W sur le port B ( led )
CALL tempo ; on appel la temporisation courte
MOVLW 0x51 ; on met 24 dans le registre W ( Rouge1 et Vert2 )
MOVWF PORTB ; on met W sur le port B ( led )
CALL tempo2 ; on appel la temporisation longue
GOTO debut ; retour au début du programme
;------------ Programme de temporisation longue ---------------
tempo
MOVLW 0xFF ; on met ff dans le registre W
MOVWF retard1 ; on met W dans le registre retard1
MOVWF retard2 ; on met W dans le registre retard2
MOVLW 0x12 ; on met 12 dans le registre W
MOVWF retard3 ; on met W dans le registre retard3
attente
DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction si
GOTO attente ; le registre retard1 = 0 sinon retour à attente
movlw 0xFF ; on recharge retard1
movwf retard1
DECFSZ retard2,F ; on décrémente retard2 et on saute la prochaine instruction si
GOTO attente ; le registre retard2 = 0 sinon retour à attente
movlw 0xFF ; on recharge retard2
movwf retard2
DECFSZ retard3,F ; on décrémente retard3 et on saute la prochaine instruction si
GOTO attente ; le registre retard3 = 0 sinon retour à attente
RETURN ; retour au programme principal après l 'instruction CALL
;------------ Programme de temporisation courte ---------------
tempo2
MOVLW 0xFF ; on met ff dans le registre W
MOVWF retard1 ; on met W dans le registre retard1
MOVWF retard2 ; on met W dans le registre retard2
MOVLW 0x07 ; on met 7 dans le registre W
MOVWF retard3 ; on met W dans le registre retard3
attente2
DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction si
GOTO attente2 ; le registre retard1 = 0 sinon retour à attente2
movlw 0xFF ; on recharge retard1
movwf retard1
DECFSZ retard2,F ; on décrémente retard2 et on saute la prochaine instruction si
GOTO attente2 ; le registre retard2 = 0 sinon retour à attente2
movlw 0xFF ; on recharge retard2
movwf retard2
DECFSZ retard3,F ; on décrémente retard3 et on saute la prochaine instruction si
GOTO attente2 ; le registre retard3 = 0 sinon retour à attente2
RETURN
clignote
MOVLW 0x48 ; on met 12 dans le registre W ( Orange1 et Orange2 )
MOVWF PORTB ; on met W sur le port B ( led )
CALL tempo2 ; on appel la temporisation courte
MOVLW B'00000000' ; on met 00 dans le registre W ( aucune led )
MOVWF PORTB ; on met W sur le port B ( led )
CALL tempo2 ; on appel la temporisation courte
goto debut
END