Gestion d'un feu tricolore avec pieton prioritaire - Solution par XIRQ
* fichier PIETON2.asc * gestion d'un feu tricolore * Gestion D'un seul feu avec pieton * Le pieton appui n'importe quand le feu passe au orange et puis rouge. * La coherence de la realite fait que l'on appui seulement quand le feu est vert * Interruption par XIRQ * Feu tricolore sur portB Feu rouge bit 2, orange bit 1 et vert bit 0. * R O V * 7 6 5 4 3 2 1 0 *Equivalences registres portb equ $1004 * Constantes dureet equ 10 *Variables org $0000 duree rmb 1 *Début du programme implantation en EEPROM org $F800 ******************** * Configuration ******************** * Pile start lds #$00ff *L'interruption XIRQ n'est pas demasquable par cli donc on doit faire passer le bit de masque X * du CCR a 0 par une autre instruction *Le bit X du CCR est le Bit 6. clra *bit 6 à 0 tap * Transfert a vers CCR ******************** *Programme principal ******************** * allumage du feu rouge et extinction du feu orange debut ldaa #$04 staa portb * tempo de 36 secondes bsr tempo36 * allumage du feu vert et extinction du feu rouge ldaa #$01 staa portb * tempo de 32 secondes bsr tempo32 * alumage du feu orange et extinction du feu vert ldaa #$02 staa portb * tempo de 4 secondes bsr tempo4 * Retour bra debut ******************** * Sous Programmes ******************** *SP Tempo36 *********** * tempo de 36 secondes tempo36 ldaa #dureer staa duree bsr tempo rts *SP Tempo32 *********** * tempo de 32 secondes tempo32 ldaa #dureev staa duree bsr tempo rts *SP Tempo4 *********** * tempo de 4 secondes tempo4 ldaa #dureeo staa duree bsr tempo rts *SP Tempo10 *********** * tempo de 10 secondes tempo10 ldaa #dureep staa duree bsr tempo rts *Sous programme tempo* ******************** * lecture du paramètre duree determinant la duree de la tempo en seconde tempo ldaa duree * on effectue 10 boucles de 100 ms tduree ldab #10 * Duree de base de 100ms par decrementation de X qui dure 3µs*33333=99999µs t1s ldx #33333 t100ms dex bne t100ms * fin de la boucle 100ms decb bne t1s *fin de la boucle 1s deca bne tduree *fin de la duree fois 1s rts ******************************** * Sous programmes Interruption * ******************************** *SP XIRQ ******* * Sauvegarde des feux car on utilise le portb pieton ldaa portb staa buffer * Passage du feu au Orange ldaa #$02 staa portb * Tempo feu orange bsr tempo4 * Passage du feu au Rouge pour que le pieton puisse travailler ldaa #$04 staa portb * Tempo feu rouge pendant 10s bsr tempo10 * Restitution de l'etat du portb avant l interruption ldaa buffer staa portb rti *************************** * Vecteurs d'interruptions *************************** * Vecteur XIRQ org $fff4 xirqvect fdb pieton *vecteur de reset org $fffe rstvect fdb start endGestion de 2 feux de carrefour ajout d'une feu clignotant. .
Giampiero D'AQUINO
Enseignant en Genie Electronique