19
II.5 Exemples de programme
;******************************************************************************************************* ; programme led_int.asm ; on connecte un interrupteur sur RB0 (entrée) et une LED sur RB1 (sortie) ; Si on place l’interrupteur à 1, la LED doit s’allumer, si on le met à zéro, elle doit s’éteindre ;******************************************************************************************************** LIST p=16f84A, f=inhx8m, r = dec
INCLUDE « p16f84A.inc »
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF
bsf STATUS,RP0 ; bank 1
movlw B’00000001′
movwf TRISB ; pour configurer RB0 en entrée
bcf STATUS,RP0 ; bank 0
tst btfss PORTB,0
goto off
bsf PORTB,1
goto tst
off bcf PORTB,1
goto tst
end ;*********************************************************************************************************************************** ; programme led-tmr0-1.asm ; faire clignoter une LED connectée sur une sortie du port B, la temporisation permettant d’ajuster la fréquence ; est obtenue par scrutation des débordement du timer TMR0 ;*********************************************************************************************************************************** LIST p=16f84A, f = inhx8m, r = dec
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF
INCLUDE « p16f84A.inc »
CTR equ 0x0C
bsf STATUS,RP0 ; bank 1 (pour TRISB et OPTION_REG)
clrf TRISB ; PORTB en sortie
movlw B’00000111′
movwf OPTION_REG ; PSA=0, prédiviseur affecté à TMR0, PS1 PS2 PS3 = 111, div = 256
; T0CS=0, horloge TMR0 = fosc/4/div
bcf STATUS,RP0 ; retour à bank 0
encore: comf PORTB,f ; complémenter PORTB
call delay ; attendre un peu
goto encore ; recommencer
delay: movlw 5 ; pour attendre que TMR0 déborde 5 fois
movwf CTR ; ce qui donne 5 x 256 x 256 µs
tst: btfss INTCON,T0IF ; attendre que TMR0 déborde
goto $-1
bcf INTCON,T0IF ; baisser le drapeau
decfsz CTR,f ; pour recommencer CTR fois
goto tst
return end