Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
ASM: Hello World par Timer0 sur PIC 16F877A
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Led clignotante sur A0.
Code : Tout sélectionner
;**********************************************************************
;
; Led clignotante avec TIMER0
;
;
;**********************************************************************
list p=16f877A ; list directive to define processor
#include <p16f877A.inc> ; processor specific variable definitions
radix dec ; on travaille en décimal par défaut
__CONFIG _CP_OFF & _DEBUG_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC
#define LED PORTA,0
BANK0 macro ; passer en banque0
bcf STATUS,RP0
bcf STATUS,RP1
endm
BANK1 macro ; passer en banque1
bsf STATUS,RP0
bcf STATUS,RP1
endm
BANK2 macro ; passer en banque2
bcf STATUS,RP0
bsf STATUS,RP1
endm
BANK3 macro ; passer en banque3
bsf STATUS,RP0
bsf STATUS,RP1
endm
cblock 0x20
w_temp : 1 ; Sauvegarde du registre W
status_temp : 1 ; Sauvegarde du registre STATUS
cmpt : 1
endc
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
; ------------------------ Routines Interruptions
;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é
; Interrupt TIMER0
btfsc INTCON,TMR0IE ; tester si interrupt timer autorisée
btfss INTCON,TMR0IF ; oui, tester si interrupt timer en cours
goto restorereg
call inttimer ; oui, traiter interrupt timer
bcf INTCON,TMR0IF ; effacer flag interrupt timer
;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
; Routine d'interruption TIMER0
inttimer
decfsz cmpt,f ; décrémenter compteur de passages
return ; pas 0, on ne fait rien
BANK0
movlw b'00000001' ; sélectionner bit à inverser
xorwf PORTA , f ; inverser LED
movlw d'7' ; on recommence à décompter
movwf cmpt
return ; fin d'interruption timer
; ------------------------ Init
init clrf PORTA
clrf PORTB
clrf EEADR ; diminue la consommation
BANK1
movlw H'0087' ; Valeur registre option, Prescaler à 256
movwf OPTION_REG
movlw d'6' ; PORTA en mode digital/analogique
movwf ADCON1 ; écriture dans contrôle A/D
movlw b'00000000'
movwf TRISA
movwf TRISB
BANK0
movlw h'00A0' ; réglage interruptions Timer0
movwf INTCON ; charger interrupt control
movlw d'7'
movwf cmpt
; -----------------------------------
main
goto main
END
Retourner vers « Recueil de mini programmes »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité
