Vous êtes sur la page 1sur 6

Applications du PIC 16F877:

Exemple 1 :

Le principe consiste à mettre la ligne RC1 du PORTC du PIC 16F877 à 0 ou à 1


pour allumer ou éteindre une LED.

Le programme en assembleur :

list p=16F877
#include "P16F877.INC"
org 0X0000
;page 1
bsf STATUS,RP0
bcf STATUS,RP1
;RC1 en sortie
bcf TRISC,1
;page 0
bcf STATUS,RP0
;RC1 à 0 ou à 1
bcf PORTC,1 ;mise à 0
;bsf PORTC,1;mise à 1
END
Exemple 2 :

Le principe consiste à allumer ou éteindre une LED branchée sur la ligne RB1 du
PORTB selon l’état d’un bouton poussoir BP branché sur la ligne RB0 du même
port.

Le programme en assembleur :

list p=16F877
#include "P16F877.INC"
org 0X0100
;page 1
bsf STATUS,RP0
bcf STATUS,RP1

;configuration de RB0 et RB1


bsf TRISB,0
bcf TRISB,1
;page 0
bcf STATUS,RP0
;Principal
rep btfsc PORTB,0
gotosaut
bsf PORTB,1
goto rep
saut bcf PORTB,1
goto rep
end
Exemple 3 :

On désire effectuer la conversion analogique numérique d’une tension continue


appliquée l’entrée AN0, le résultat de la conversion sera visualisé sur des LEDs des
PORTC (ADRESL) et PORT B (ADRESH).

RB1

RB0

PORTC

Le programme en assembleur :
list p=16F877
#include "P16F877.INC"
org 0X0000
;page 1bsf STATUS,RP0
bcf STATUS,RP1
bsf TRISA,0 ;RA0 en entrée
clrf TRISB
clrf TRISC ;PORT B et C en sortie;configuration AN0
movlw 0x80
movwf ADCON1 ;justification à droite et les 8 entées analogiques
;page 0 bcf STATUS,RP0
movlw 0x81 ;1/32 RA0 et mise en service CAN
movwf ADCON0
repeater bsf ADCON0,GO_DONE ;START conversion
;Principal
Attente btfsc ADCON0,GO_DONE ;tester si EOC
goto attente
;lecture résultat
movf ADRESH,W
movwf PORTB
;page 1
bsf STATUS,RP0
movf ADRESL,W
;page 0
bcf STATUS,RP0
movwf PORTC
goto repeter
end
Exemple 4 :

On reprend l’exemple 1 mais en faisant clignoter la LED pendant une durée


programmable.

Le programme en assembleur :

list p=16F877 org 0x0000


#include "P16F877.INC" ;page 1
org 0X0100 ;temporisation bsf STATUS,RP0
tempo1 movlw 0xff bcf STATUS,RP1
movwf 0x20 bcf TRISC,1
b3 decfsz 0x20 ;page 0
goto b3 bcf STATUS,RP0
return bcf PORTC,1
retour bsf PORTC,1
org 0X0120 call tempo
tempo2 movlw 0xff bcf PORTC,1
movwf 0x21 call tempo
b1 call tempo1 goto retour
decfsz 0x21 end
goto b1
return

org 0X0130
tempo movlw 0x06
movwf 0x22
b2 call tempo2
decfsz 0x22
goto b2
return
Exemple 5 :

On désire utiliser le compteur TMR0, 2 mode d’utilisation sont disponible le


mode TIMER qui consiste à utiliser l’horloge du PIC ou le mode compteur en
exploitant une horloge externe appliquée sur la broche RA4/T0CKI, le choix se fait
à l’aide du bit T0OCS du registre OPTION REGISTER qui permet aussi de
configurer le fonctionnement de TMR0.

Programme assembleur 1 :

list p=16F877 b1 movf TMR0,W


#include "P16F877.INC" movwf PORTC
org 0X0000 goto b1
bsf STATUS,RP0 ;page 1 end
bcf STATUS,RP1
movlw 0x07
movwf OPTION_REG
clrf TRISC
bcf STATUS,RP0 ;page 0
clrf TMR0

Programme assembleur 2 :

list p=16f877 princ bsf STATUS,RP0


#include "p16f877.inc" bcf STATUS,RP1
bcf TRISC,0
org 0X0000 movlw 0x07
goto princ movwf OPTION_REG
bcf STATUS,RP0
org 0X0004 movlw 0xA0
btfss INTCON,T0IF movwf INTCON
goto fin clrf TMR0
movlw 0x01 bsf PORTC,0
xorwf PORTC
bcf INTCON,T0IF BOUCLE nop
fin retfie nop
goto BOUCLE
end
Exemple 6 :

On désire changer l’état de la LED en agissant sur le bouton poussoir BP avec le


mode de fonctionnement interruptible matériel RB0/INT.

list p=16f877
#include "p16f877.inc"
org 0X0000
goto princ
org 0x0004
btfss INTCON,INTF
goto fin
movlw 0x02
xorwf PORTB
bcf INTCON,INTF
fin retfie

princ bcf STATUS,RP1


bsf STATUS,RP0
movlw 0x01
movwf TRISB
movlw 0x40
movwf OPTION_REG
bcf STATUS,RP0
movlw 0x90
movwf INTCON
bcf PORTB,1
BOUCLE goto BOUCLE
end

Vous aimerez peut-être aussi