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 end1-8) Gestion d'un feu tricolore.
Giampiero D'AQUINO
Enseignant en Genie Electronique