1-7) Même problème que ci-dessus avec modulation de la temporisation par donnée sur port d'entrée.


;*********************************************
;* Faire clignoter la LED 0 sur le PortB     *
;* Duree niveau haut est module par le porta *
;*********************************************

; fichier 7_ledmod.asm

; 
;
; Device = 16F84		; Utilisation du circuit 16F84
; Horloge =  XT		; Déclaration et config du Circuit

; Equivalence registres
;***********************
 
PORTA		equ		0x0005	; Adresse du portb
TRISA		equ		0x0085	; Adresse du registre de direction du porta
PORTB		equ		0x0006	; Adresse du portb
TRISB		equ		0x0086	; Adresse du registre de direction du porta
STATUS		equ		0x0003	; Le bit 5 permet d'acceder à la Banque 1 ou 0 
					; ce qui donne acces au TRIS ou au PORT 

; Constantes
;************
 
DUREEAL		equ		30
DUREEET		equ		10

;* Reservation memoire *
;***********************

; Les registres occupent la RAM jusqu'en OBh
 
COMPT		equ		0Ch
COMPT1		equ		0Dh
DUREE		equ		0Eh


;***************
;Initialisation*
;***************

		org		00h		; Apres le reset le PC pointe l'adresse 00

 
		goto		debut		; On saute les 5 premiers octets car à l'adresse
						; 04 on a l'adresse d'interruption
						; On prend l'habitude de ne pas ecrire sur ce segment
						; en sautant simplement jusqu'apres ce segment

 
		org		05h

 
debut		
		clrf		PORTA		; Mise a zero des latches de sorties
		clrf		PORTB		
		bsf		STATUS,05	; Selection de Bank 1 pour l'accès au TRIS
		movlw		00h		;
		movwf		TRISB		; Declaration du portb en sortie
		movlw		1fh		;
		movwf		TRISA		; Declaration du portA en entree

		bcf		STATUS,05	; Selection de Bank 0 pour l'accès au PORT
		clrf		PORTB		; Extinction de toutes les LEDS

;*********************
;Programme principal *
;*********************
 

		bsf		PORTB,07	; On allume la LED 7 seule
boucle
		bsf		PORTB,0 	; On allume la LED 0 seule
		movf		PORTA,0		; Passage du parametre pour la duree
		addlw		1		; on evite que duree est de 0
		movwf		DUREE		; de la tempo ici niveau haut 
		call		tempo	
		bcf		PORTB,0		; On eteint la LED 0 seule
		movlw		DUREEET		; Passage du parametre pour la duree
		movwf		DUREE		; de la tempo ici niveau bas
		call		tempo
		goto		boucle		; recopie permanente


;******************
; SOUS PROGRAMME  *
;******************

; SP tempo par passage de parametre duree est en 10 eme de seconde *
;*************************************************************************
 
tempo
		movlw		0x00C8		; chargement de COMPT1 DE 200
		movwf		COMPT1		; 
delai1
		movlw		0x00A6		; chargement de COMPT 
		movwf		COMPT
delai
		decfsz		COMPT,1		; Le temps de decompter 166 valeurs 
		goto		delai		; calcul du temps : 1 instruction =Tquartz/4=1µs =1 cycle
						; l'instruction goto est de 2 cycles
						; 2 instructions = 3 µs repeter 166 fois t=498 µs
		decfsz		COMPT1,1	; ON execute la boucle 200 fois  
		goto		delai1		; calcul du temps : 500µs*200=100ms
		decfsz		DUREE,1		; ON execute les  boucles de la valeur de duree   
		goto		tempo		; calcul du temps : duree*100ms
		
		return

 
		end

DEBUT DE PAGE

1-8) Gestion d'un feu tricolore.

SOMMAIRE


Giampiero D'AQUINO
Enseignant en Genie Electronique