Il faut que tu possede un logicielle a laide tu vas programmer exp:PORTEUS 7.1 OU 6.9(ISIS)
puis tu va faire votre programme comme cet exmple:
;**********************************************************************
; *
; Fait clignoter une LED à une fréquence approximative de 1Hz *
; *
;**********************************************************************
; *
; NOM: LED CLIGNOTANTE AVEC TIMER0 *
; Date: 17/02/2001 *
; Version: 1.0 *
; Circuit: Platine d'essai *
; Auteur: Bigonoff *
; *
;**********************************************************************
; *
; Fichier requis: P16F84.inc *
; *
; *
; *
;**********************************************************************
; *
; Notes: Utilisation didactique du tmr0 en mode interruption *
; *
;**********************************************************************
LIST p=16F84 ; Définition de processeur
#include <p16F84.inc> ; Définitions des constantes
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation du processeur. Les définitions sont dans le fichier include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC
;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************
OPTIONVAL EQU H'0087' ; Valeur registre option
; Résistance pull-up OFF
; Préscaler timer à 256
INTERMASK EQU H'00A0' ; Interruptions sur tmr0
;*********************************************************************
; DEFINE *
;*********************************************************************
#DEFINE LED PORTA,2 ; LED
;*********************************************************************
; MACRO *
;*********************************************************************
BANK0 macro
bcf STATUS , RP0 ; passer banque0
endm
BANK1 macro
bsf STATUS , RP0 ; passer banque1
endm
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
;exemples
;---------
CBLOCK 0x00C ; début de la zone variables
w_temp :1 ; Sauvegarde du registre W
status_temp : 1 ; Sauvegarde du registre STATUS
cmpt : 1 ; compteur de passage
ENDC ; Fin de la zone
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;---------------------
org 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
; switch vers différentes interrupts
; inverser ordre pour modifier priorités
;----------------------------------------
btfsc INTCON,T0IE ; tester si interrupt timer autorisée
btfss INTCON,T0IF ; oui, tester si interrupt timer en cours
goto intsw1 ; non test suivant
call inttimer ; oui, traiter interrupt timer
bcf INTCON,T0IF ; effacer flag interrupt timer
goto restorereg ; et fin d'interruption
; SUPPRIMER CETTE LIGNE POUR
; TRAITER PLUSIEURS INTERRUPT
; EN 1 SEULE FOIS
intsw1
btfsc INTCON,INTE ; tester si interrupt RB0 autorisée
btfss INTCON,INTF ; oui, tester si interrupt RB0 en cours
goto intsw2 ; non sauter au test suivant
call intrb0 ; oui, traiter interrupt RB0
bcf INTCON,INTF ; effacer flag interupt RB0
goto restorereg ; et fin d'interruption
; SUPPRIMER CETTE LIGNE POUR
; TRAITER PLUSIEURS INTERRUPT
; EN 1 SEULE FOIS
intsw2
btfsc INTCON,RBIE ; tester si interrupt RB4/7 autorisée
btfss INTCON,RBIF ; oui, tester si interrupt RB4/7 en cours
goto intsw3 ; non sauter
call intrb4 ; oui, traiter interrupt RB4/7
bcf INTCON,RBIF ; effacer flag interupt RB4/7
goto restorereg ; et fin d'interrupt
; SUPPRIMER CETTE LIGNE POUR
; TRAITER PLUSIEURS INTERRUPT
; EN 1 SEULE FOIS
intsw3
BANK1 ; passer banque1
btfsc INTCON,EEIE ; tester si interrupt EEPROM autorisée
btfss EECON1,EEIF ; oui,tester si interrupt EEPROM
goto restorereg ; non sauter
call inteep ; traiter interruption eeprom
;restaurer registres
;-------------------
restorereg
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; Inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; Réinversion de L et H dans W
; W restauré sans modifier status
retfie ; return from interrupt
;**********************************************************************
; INTERRUPTION TIMER 0 *
;**********************************************************************
inttimer
decfsz cmpt , f ; décrémenter compteur de passages
return ; pas 0, on ne fait rien
BANK0 ; par précaution
movlw b'00000100' ; sélectionner bit à inverser
xorwf PORTA , f ; inverser LED
movlw 7 ; pour 7 nouveaux passages
movwf cmpt ; dans compteur de passages
return ; fin d'interruption timer
;**********************************************************************
; INTERRUPTION RB0/INT *
;**********************************************************************
intrb0
return ; fin d'interruption RB0/INT
; peut être remplacé par
; retlw pour retour code d'erreur
;**********************************************************************
; INTERRUPTION RB0/RB4 *
;**********************************************************************
intrb4
return ; fin d'interruption RB0/RB4
; peut être remplacé par
; retlw pour retour code d'erreur
;**********************************************************************
; INTERRUPTION EEPROM *
;**********************************************************************
inteep
return ; fin d'interruption eeprom
; peut être remplacé par
; retlw pour retour code d'erreur
;*********************************************************************
; INITIALISATIONS *
;*********************************************************************
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
BANK1 ; passer banque1
clrf EEADR ; permet de diminuer la consommation
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; Effacer RAM
; ------------
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirect
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,6 ; tester si fin zone atteinte (>=40)
goto init1 ; non, boucler
btfss FSR,4 ; tester si fin zone atteinte (>=50)
goto init1 ; non, boucler
; initialiser ports
; -----------------
bcf LED ; passer LED en sortie
BANK0 ; passer banque0
movlw INTERMASK ; masque interruption
movwf INTCON ; charger interrupt control
; initialisations variables
; -------------------------
movlw 7 ; charger 7
movwf cmpt ; initialiser compteur de passages
goto start ; sauter programme principal
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
start
goto start ; boucler
END ; directive fin de programme