Académique Documents
Professionnel Documents
Culture Documents
bank0
clrf PORTA ; mise à 0 des sorties du port A
clrf PORTB ; mise à 0 des sorties du port B
bank1
movlw B'10101000'
movwf OPTION_REG
; bit 7 (/RBPU) = 1 : désactivation des résistances de pull-up du
port B
; bit 6 (INTEDG)= 0 : (non utilisé)
; bit 5 (T0CS) = 1 : horloge du module TMR0 -> RA4/T0CKI (mode
compteur)
; bit 4 (T0SE) = 0 : horloge RA4/T0CKI active sur front montant
; bit 3 (PSA) = 1 : prescaler 1:1
; bit 2 (PS2)= 0
; bit 1 (PS1) = 0
; bit 0 (PS0) = 0
movlw B'00011111'
movwf TRISA
; bit 0 du port A (RA0) = 1 : configuration en entrée (bouton
poussoir CRENEAU)
; bit 1 du port A (RA1) = 1 : configuration en entrée (bouton
poussoir TRIANGLE)
; bit 2 du port A (RA2) = 1 : configuration en entrée (bouton
poussoir SINUS)
; bit 3 du port A (RA3) = 1 : configuration en entrée (bouton
poussoir RAMPE)
; bit 4 du port A (RA4) = 1 : configuration en entrée (oscillateur
externe)
clrf TRISB
; bit 0 du port B (RB0) = 0 : configuration en sortie (bit 0 (LSB)
du DAC 8 bits)
; bit 1 du port B (RB1) = 0 : configuration en sortie (bit 1 du DAC
8 bits)
; bit 2 du port B (RB2) = 0 : configuration en sortie (bit 2 du DAC
8 bits)
; bit 3 du port B (RB3) = 0 : configuration en sortie (bit 3 du DAC
8 bits)
; bit 4 du port B (RB4) = 0 : configuration en sortie (bit 4 du DAC
8 bits)
; bit 5 du port B (RB5) = 0 : configuration en sortie (bit 5 du DAC
8 bits)
; bit 6 du port B (RB6) = 0 : configuration en sortie (bit 6 du DAC
8 bits)
; bit 7 du port B (RB7) = 0 : configuration en sortie (bit 7 (MSB)
du DAC 8 bits)
bank0
clrf formeSIGNAL
movlw B'10000000'
movwf PORTB ; uS(U4) = 0 V (sortie du DAC)
goto debut_programme
;xxxxxxxxxxxxxxxxxxxxx
; programme principal
;xxxxxxxxxxxxxxxxxxxxx
debut_programme
; xxxxxxxxxxxxxxxxxxxxxx
; forme continue
formeDC
goto formeDC
; xxxxxxxxxxxxxxxxxxxxxx
; forme en créneau
formeCRENEAU
movlw D'255'
btfss TMR0 , 6
clrw ; 0 =< TMR0 <= 63 ou 128 =<
TMR0 <= 255
movwf PORTB
goto formeCRENEAU
; xxxxxxxxxxxxxxxxxxxxxx
; forme en triangle
formeTRIANGLE
movlw 0x03
movwf PCLATH
formeTRIANGLE0
movlw B'01111111' ; masque
andwf TMR0 , W ; on met à 0 le bit 7 (car la table a 128
éléments)
call table_triangle
movwf PORTB ; écriture en entrée du DAC
goto formeTRIANGLE0
; xxxxxxxxxxxxxxxxxxxxxx
; forme en sinus
formeSINUS
movlw 0x02
movwf PCLATH
formeSINUS0
movlw B'01111111'
andwf TMR0 , W ; on met à 0 le bit 7
call table_sinus
movwf PORTB
goto formeSINUS0
; xxxxxxxxxxxxxxxxxxxxxx
; forme en rampe
formeRAMPE
movlw 0x01
movwf PCLATH
formeRAMPE0
movlw B'01111111'
andwf TMR0 , W ; on met à 0 le bit 7
call table_rampe
movwf PORTB
goto formeRAMPE0
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Routine de test des boutons poussoirs
; Retourne 0 si tous les boutons poussoirs sont au repos
; Retourne 1 si au moins un bouton poussoir est appuyé
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
test_changement
btfsc PORTA,0
goto test_bp_triangle
bsf formeSIGNAL , 0
retlw D'1'
test_bp_triangle
btfsc PORTA,1
goto test_bp_sinus
bsf formeSIGNAL , 1
retlw D'1'
test_bp_sinus
btfsc PORTA,2
goto test_bp_rampe
bsf formeSIGNAL , 2
retlw D'1'
test_bp_rampe
btfsc PORTA,3
retlw D'0' ; tous les boutons poussoirs sont au repos
bsf formeSIGNAL , 3
retlw D'1'
END