Bonjour tout le monde
j'aimerai réaliser un programme en assembleur : un compteur modulo 100.
le rôle du programme principale est l'affichage. dés qu'il y a une variation au niveau du RB0, on ajoute 1 et on met 1 à RB1.
j'ai réaliser le schéma sur isis: le programme m'affiche juste "00", même si j'appuie sur le bouton poussoirs.!! j'ai besoin de votre aide
merci d'avance
le code en assembleur:
#include <p16F84A.inc>
unit equ 0x0C
diz equ 0x0D
compt equ 0x0E
temp1 equ 0x0A
temp2 equ 0x0B
cmpt1 equ 0x0F
cmpt2 equ 0x10
cmpt3 equ 0x11
bank1 macro ; passage en banque 1
bsf STATUS,RP0
endm
bank0 macro ; passage en banque 0
bcf STATUS,RP0
endm
CBLOCK 0x12 ; début de la zone des registres d'usage général du 16F84A
STATUS_TEMP : 1 ; sauvegarde du registre STATUS (routine d'interruption)
W_TEMP : 1 ; sauvegarde du registre W (routine d'interruption)
valeur_de : 1 ; 1 à 6
ENDC
org H'0000'
goto initialisation
org H'0004' ; vecteur d'interruption
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP ; sauvegarde du registre W puis du registre STATUS
btfsc INTCON,1
goto inter1 ; on teste qu'il s'agit bien d'une interruption RB0/INT
goto restauration
inter1
bsf PortB,1
incf unit,1
movlw 0x0A
xorwf unit,0
btfss STATUS,Z
goto loop
incf diz,1
movlw 0x0A
xorwf diz,0
btfss STATUS,Z
goto loop1
goto loop2
loop1
movlw 0x00
movlw unit
goto loop
loop2
movlw 0x00
movwf diz
goto loop
loop
call tempo1
bcf PORTB,1
bcf INTCON,INTF ; on efface le flag 'RB0/INT'
goto restauration
tempo1
nop
movlw d'127'
movwf cmpt3
_b3tempo_3000000µs
movlw d'98'
movwf cmpt2
_b2tempo_3000000µs
movlw d'79'
movwf cmpt1
_b1tempo_3000000µs
movf diz,0
movwf PORTA
bsf PORTB,7
call tempo
movf unit,0
movwf PORTA
bsf PORTB,6
decfsz cmpt1,f
goto _b1tempo_3000000µs
decfsz cmpt2,f
goto _b2tempo_3000000µs
decfsz cmpt3,f
goto _b3tempo_3000000µs
return
restauration
swapf STATUS_TEMP,W ; restauration des registres STATUS puis W
movwf STATUS
swapf W_TEMP,f
swapf W_TEMP,W
retfie ; retour d'interruption
;--------------------
initialisation
bank0
clrf PORTA ; mise à 0 des sorties du port A
clrf PORTB ; mise à 0 des sorties du port B
b1
movlw 0x00
movwf diz
b2
movlw 0x00
movwf unit
bank1
movlw B'00101011'
movwf OPTION_REG
; bit 7 (/RBPU) = 0 : activation des résistances de pull-up du port B
; (ce qui permet de faire l'économie d'une résistance externe sur RB0)
; bit 6 (INTEDG)= 0 : Interrupt on falling edge of RB0/INT pin
; bit 5 (T0CS) = 0 : Timer0 Clock Source Select = CLKOUT
; bit 3 (PSA) = 0 : Prescaler attribué au TMR0
; bit 2 (PS2)= 0
; bit 1 (PS1) = 1
; bit 0 (PS0) = 1 : Facteur de division du prescaler = 1:16
; bit 4 : ici, option non utilisée (= 0, par exemple)
clrf TRISA
; bits 0 à 4 du port A (RA0 à RA4) = 1 : non utilisés (configuration en entrée, par exemple)
movlw B'00000001'
movwf TRISB
; bit 0 du port B (RB0) = 1 : configuration en entrée (bouton poussoir)
; bit 1 du port B (RB1) = 0 : configuration en sortie (LED segment g de l'afficheur)
; bit 2 du port B (RB2) = 0 : configuration en sortie (LED segment f)
; bit 3 du port B (RB3) = 0 : configuration en sortie (LED segment e)
; bit 4 du port B (RB4) = 0 : configuration en sortie (LED segment d)
; bit 5 du port B (RB5) = 0 : configuration en sortie (LED segment c)
; bit 6 du port B (RB6) = 0 : configuration en sortie (LED segment b)
; bit 7 du port B (RB7) = 0 : configuration en sortie (LED segment a)
bank0
movlw B'10010000'
movwf INTCON
; bit 7 (GIE) = 1 : autorisation globale des interruptions
; bit 5 (T0IE)= 0 : inhibition de l'interruption de débordement du Timer0
; bit 4 (INTE) = 1 : Enables the RB0/INT external interrupt
; bit 2 (T0IF) = 0 : on efface le flag 'TMR0 Overflow Interrupt'
; bit 1 (INTF)= 0 : on efface le flag 'RB0/INT External Interrupt'
; les autres bits sont inutilisés (valeur par défaut = 0)
goto debut_programme
;--------------------
debut_programme
movf diz,0
movwf PORTA
bsf PORTB,7
call tempo
bcf PORTB,7
movf unit,0
movwf PORTA
bsf PORTB,6
call tempo
bcf PORTB,6
goto debut_programme
tempo
movlw D'1'
movwf temp2
movlw D'1'
movwf temp1
l1
decfsz temp1,1
goto l1
decfsz temp2,1
goto l1
bsf PORTB,0
return
end
-----