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 avec le Timer 0 sur PIC 16F88
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Sur l'utilisation du Timer0.
Une led qui clignote sur A0, à partir de cette base on peut faire plein de trucs. Cette fois elle clignotte avec le Timer0.
Une led qui clignote sur A0, à partir de cette base on peut faire plein de trucs. Cette fois elle clignotte avec le Timer0.
Code : Tout sélectionner
;**********************************************************************
;
; Led clignotante avecr TIMER0
;
;
;**********************************************************************
List p=16F88
#include <p16F88.inc>
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
OPTIONVAL EQU H'0087' ; Valeur registre option, Prescaler à 256
MasqueIntcon EQU H'00A0' ; réglage interruptions Timer0
#DEFINE LED PORTA,0
BANK0 macro
bcf STATUS , RP0
endm
BANK1 macro
bsf STATUS , RP0
endm
CBLOCK 0x00C
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 TIMER 0
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 ; passer banque1
movlw OPTIONVAL
movwf OPTION_REG
clrf ANSEL ; broches toutes en I/O
movlw b'00000000'
movwf TRISA
movwf TRISB
BANK0
movlw MasqueIntcon ; masque interruption
movwf INTCON ; charger interrupt control
movlw d'7'
movwf cmpt
; -----------------------------------
main
nop
nop
nop
goto main ; boucler
END
Retourner vers « Recueil de mini programmes »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités
