;*******************************
;* Gestion d'un feu tricolore *
;* avec piton prioritaire
*
;*******************************
Gestion D'un seul feu avec piton
Le piton appui n'importe quand le feu passe lorange et puis rouge. La
cohrence de la ralit fait que l'on appui seulement quand le feu est vert
;
;
;
;
;
;
;
;
list
p=16f84
#include p16f84.inc
; Dans le fichier p16f84.inc on trouve l'quivalence de tous les registres
; ainsi que les bits de ces registres
; Constantes
;************
DUREER
DUREEO
DUREEV
DUREEP
equ
equ
equ
equ
24h
04h
20h
0Ah
;
;
;
;
36 secondes
4 secondes
32 secondes
10 secondes
;* Reservation memoire *
;***********************
Feu tricolore avec piton prioritaire
; Les registres occupent la RAM jusqu'en OBh
COMPT
equ
0Ch
COMPT1
equ
0Dh
COMPT2
equ
0Eh
DUREE
equ
0Fh
BUFFERB
equ
10h
BUFFER
equ
11h
BUFFER1
equ
12h
BUFFER2
equ
13h
BUFFERD
equ
14h
;***************
;Initialisation*
;***************
org
debut
00h
goto
debut
org
goto
org
04h
pieton
05h
clrf
bsf
PORTB
STATUS,RP0
movlw
movwf
01h
TRISB
;*************************
INTCON,INTE
bcf
OPTION_REG,INTEDG
bsf
INTCON,GIE
; autorise les
Interruptions matrielles
; prise en compte de
Linterruption sur front
montant
; Autorisation gnrale des
Interruptions
Accs au ports
**************
bcf
STATUS,RP0
clrf
PORTB
;*********************
;Programme principal *
Feu tricolore avec piton prioritaire
;*********************
; SOUS PROGRAMME
;******************
; SP tempo par passage de paramtre dure est en seconde *
;*************************************************************************
tempo
movlw
0x000A ; chargement de COMPT2 DE 10
movwf
COMPT2 ;
delai2
movlw
0x00C8 ; chargement de COMPT1 DE 200
movwf
COMPT1 ;
delai1
movlw
0x00A5 ; chargement de COMPT de 165
movwf
COMPT
delai
decfsz
COMPT,1 ; Le temps de decompter 165 valeurs
goto
delai
; calcul du temps : 1 instruction
=Tquartz/4=1s =1 cycle
; l'instruction decfz est de 2 cycles
; 2 instructions = 3 s rpter 165 fois
t=495 s + 2 inst =497s
decfsz
goto
decfsz
goto
decfsz
goto
return
;********************************
pieton
; Sauvegarde des diffrentes valeurs utilises aussi dans le pgm interupt
movf
movwf
PORTB,0
BUFFERB
movf
movwf
movf
movwf
movf
movwf
movf
movwf
COMPT,0
BUFFER
COMPT1,0
BUFFER1
COMPT2,0
BUFFER2
DUREE,0
BUFFERD
04h
PORTB
DUREEO
DUREE
tempo
02h
; Seul le feu rouge est allume
PORTB
DUREEP ;
DUREE
; duree du feu rouge
tempo
l'appui sur le poussoir
movf
movwf
BUFFERB,0
PORTB
movf
movwf
BUFFER,0
COMPT
movf
movwf
BUFFER1,0
COMPT1 ;
movf
movwf
BUFFER2,0
COMPT2 ;
movf
movwf
bcf
BUFFERD,0
DUREE
INTCON,INTF
retfie
end
;
; Remise zro du drapeaux
Interruptions INT
;*******************************
;* Gestion d'un feu tricolore
*
;* Orange clignotementFeu tricolore
* avec piton prioritaire
;* par debordement timer
*
;*******************************
; fichier 11_Ocli.asm
;
;
;
;
;
;
;
;
;
;
;
Gestion de 2 feux
tempo orange cligntant par interrup timer
Feu tricolore sur portB
Feu rouge bit 1, orange bit 2 et vert bit 3.
V O R 0 V O R
7 6 5 4 3 2 1 0
8 4 2 1 8 4 2 1
Device = 16F84
Horloge = XT
Pas de WD
; directive d'assemblage
list
p=16f84
#include p16f84.inc
; Dans le fichier p16f84.inc on trouve l'equivalence de tous les registres
; ainsi que les bits de ces registres
; Constantes
;************
DUREE2R
DUREEO
DUREEV
equ
equ
equ
02h
04h
20h
; 02 secondes
; 4 secondes
; 32 secondes
;* Reservation memoire *
;***********************
; Les registres occupent la RAM jusqu'en OBh
COMPT
COMPT1
COMPT2
DUREE
COMPT3
equ
equ
equ
equ
equ
0Ch
0Dh
0Eh
0Fh
10h
;***************
;Initialisation*
;***************
org
00h
goto
debut
l'adresse 00
car l'adresse
ecrire sur ce segment
ce segment
; 04 on a l'adresse d'interruption
; On prend l'habitude de ne pas
; en sautant simplement jusqu'apres
org
goto
04h
timer
;PROGRAMME*
;***********
debut
clrf
bsf
au TRIS et registres
movlw
movwf
PORTB
STATUS,05
00h
TRISB
;
; Declaration du portb en sortie
;*************************
;* Init interruption INT *
;*************************
bcf
OPTION_REG,T0CS
l'horloge interne
bsf
OPTION_REG,PS0
256 en placant
bsf
OPTION_REG,PS1
Predivision par 16 de TM0
bcf
OPTION_REG,PS2
T=1s soit T=256s apres division
bcf
OPTION_REG,PSA
timer
bsf
INTCON,GIE
interruptions
; prise en compte de
; Division de l'horloge par
; PS0 PS1 a
1 et PS2 0,
;*Acces au ports
;****************
au PORT
bcf
STATUS,05
clrf
PORTB
; Init Variables
; **************
movlw
movwf
0x007A
COMPT3
;*********************
;Programme principal *
;*********************
; On allume le feu rouge 1 et le feu vert 2 et on eteint les autres feux
boucle
movlw
movwf
movlw
movwf
call
82h
PORTB
DUREEV
DUREE
tempo
42h
PORTB
DUREEO
DUREE
tempo
movlw
movwf
movlw
movwf
call
22h
PORTB
DUREE2R
DUREE
tempo
INTCON,T0IE
28h
PORTB
DUREEV ;
DUREE
tempo
INTCON,T0IE
24h
PORTB
DUREEO ;
DUREE
tempo
22h
PORTB
DUREE2R ;
DUREE
tempo
goto
boucle
; feu permanent
movlw
movwf
0x000A
COMPT2
; chargement de COMPT2 DE 10
;
movlw
movwf
0x00C8
COMPT1
movlw
movwf
0x00A5
COMPT
COMPT,1
delai
;******************
; SOUS PROGRAMME *
;******************
; SP tempo
;**********
tempo
delai2
delai1
delai
decfsz
goto
=Tquartz/4=1s =1 cycle
cycles
valeur de duree
decfsz
COMPT2,1
goto
delai2
decfsz
DUREE,1
; ON execute les
goto
tempo
boucles de la
return
;*******************************
; SOUS PROGRAMME Interruption *
;*******************************
; SP debordement timer
;*********************
timer
les 0,5s
afin
fin
decfsz
goto
COMPT3,1
fin
movlw
movwf
0x007A
COMPT3
; Init compteur
btfss
goto
bcf
goto
PORTB,4
afin
PORTB,4
fin
bsf
PORTB,4
bcf
interruption TMR0
retfie
end
INTCON,T0IF