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 : mazertoc
debut avec le debuguer
Bonjour les copains
Je n'ai pas encore abandoné je cherche toujours
Lors de la compilation, si je clique dans les lignes d'erreur, le code ci-dessous apparaît mais quel est sont langage ?
Je n'ai pas encore abandoné je cherche toujours
Lors de la compilation, si je clique dans les lignes d'erreur, le code ci-dessous apparaît mais quel est sont langage ?
Code : Tout sélectionner
# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build
FIXDEPS=fixDeps
.build-conf: ${BUILD_SUBPROJECTS}
ifneq ($(INFORMATION_MESSAGE), )
@echo $(INFORMATION_MESSAGE)
endif
${MAKE} -f nbproject/Makefile-default.mk dist/${CND_CONF}/${IMAGE_TYPE}/led_tmr0.pjt.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
MP_PROCESSOR_OPTION=16f877
MP_LINKER_DEBUG_OPTION=
# ------------------------------------------------------------------------------------
# Rules for buildStep: assemble
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${OBJECTDIR}/_ext/1472/led_tmr0.o: ../led_tmr0.asm nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/_ext/1472"
@${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o.d
@${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o
@${FIXDEPS} dummy.d -e "${OBJECTDIR}/_ext/1472/led_tmr0.err" $(SILENT) -c ${MP_AS} $(MP_EXTRA_AS_PRE) -d__DEBUG -d__MPLAB_DEBUGGER_SIMULATOR=1 -q -p$(MP_PROCESSOR_OPTION) -l\"${OBJECTDIR}/_ext/1472/led_tmr0.lst\" -e\"${OBJECTDIR}/_ext/1472/led_tmr0.err\" $(ASM_OPTIONS) -o\"${OBJECTDIR}/_ext/1472/led_tmr0.o\" \"../led_tmr0.asm\"
@${DEP_GEN} -d "${OBJECTDIR}/_ext/1472/led_tmr0.o"
@${FIXDEPS} "${OBJECTDIR}/_ext/1472/led_tmr0.o.d" $(SILENT) -rsi ${MP_AS_DIR} -c18
else
${OBJECTDIR}/_ext/1472/led_tmr0.o: ../led_tmr0.asm nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/_ext/1472"
@${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o.d
@${RM} ${OBJECTDIR}/_ext/1472/led_tmr0.o
@${FIXDEPS} dummy.d -e "${OBJECTDIR}/_ext/1472/led_tmr0.err" $(SILENT) -c ${MP_AS} $(MP_EXTRA_AS_PRE) -q -p$(MP_PROCESSOR_OPTION) -l\"${OBJECTDIR}/_ext/1472/led_tmr0.lst\" -e\"${OBJECTDIR}/_ext/1472/led_tmr0.err\" $(ASM_OPTIONS) -o\"${OBJECTDIR}/_ext/1472/led_tmr0.o\" \"../led_tmr0.asm\"
@${DEP_GEN} -d "${OBJECTDIR}/_ext/1472/led_tmr0.o"
@${FIXDEPS} "${OBJECTDIR}/_ext/1472/led_tmr0.o.d" $(SILENT) -rsi ${MP_AS_DIR} -c18
endif
debut avec le debuguer
bonsoir JMarc
C'est des fichiers, qui servent a la compilation .Le fichier makefile en autre qui fait la 1er passe de la compilation .Donc le fameux fichier objet .
il serait bien que tu nous donnes le resultat de la construction, le BUILD LOAD. Pour que l'on puisse t'aider, a moins que tu préfères chercher tout seul, ce qui est bien aussi
A+
PS dans la rubrique réalisation. J'ai posté la finalité de cette réalisation .Tu peux jeter un œil sur le code
C'est des fichiers, qui servent a la compilation .Le fichier makefile en autre qui fait la 1er passe de la compilation .Donc le fameux fichier objet .
il serait bien que tu nous donnes le resultat de la construction, le BUILD LOAD. Pour que l'on puisse t'aider, a moins que tu préfères chercher tout seul, ce qui est bien aussi
A+
PS dans la rubrique réalisation. J'ai posté la finalité de cette réalisation .Tu peux jeter un œil sur le code
debut avec le debuguer
debut avec le debuguer
debut avec le debuguer
bonjour Jmarc
Pas Bon de faire du copier coller, le mieux, c'est de prendre modèle ,prendre la logique et de retaper suivant le pic, suivant son projet, avec l'aide de ls DS son propre style
Tiens a mes tout début sur Fantas-pic,j'avais proposé cela viewtopic.php?f=16&t=87 tu peux tirer le masque et le remplir suivant TES besoins
Bien sur le plaisir de te lire
et A+
JMarc a écrit :Bonjour Maï
Les source au j'utilise sont foireuses. En plus j'ai voulu les transformer d'un 16f84 vers un 16f877 comme expliqué par bigonoof et je me suis perdu
Mais tous cela est très bénéfique car j'essai de comprendre l'asm et le debuger.
Jean-Marc,
Pas Bon de faire du copier coller, le mieux, c'est de prendre modèle ,prendre la logique et de retaper suivant le pic, suivant son projet, avec l'aide de ls DS son propre style
Tiens a mes tout début sur Fantas-pic,j'avais proposé cela viewtopic.php?f=16&t=87 tu peux tirer le masque et le remplir suivant TES besoins
Bien sur le plaisir de te lire
et A+
debut avec le debuguer
Bonjour Maï
Merci pour tes reponses rapides.
Pour le fichier de base (modele) c'est celui du part2 de bigonoff
Ensuite je fais des copiers collé en essayant de coller au bon endroit mais malgré cela j'ai toujours un code erreur a la compil et quand j'ai plus d'erreur, je me suis tellement perdu dans les modifs
voici ci joint le nouveau fichier d'où je repars de 0. c'est un compteur pour afficheur 7 segments
Merci pour tes reponses rapides.
Pour le fichier de base (modele) c'est celui du part2 de bigonoff
Ensuite je fais des copiers collé en essayant de coller au bon endroit mais malgré cela j'ai toujours un code erreur a la compil et quand j'ai plus d'erreur, je me suis tellement perdu dans les modifs
voici ci joint le nouveau fichier d'où je repars de 0. c'est un compteur pour afficheur 7 segments
Code : Tout sélectionner
;*****************************************************************************
; Ce fichier est la base de départ pour une programmation avec *
; le PIC 16F877. Il contient les informations de base pour *
; démarrer. *
; *
;*****************************************************************************
; *
; NOM: JMarc *
; Date: 20/9/2016 *
; Version: 1 *
; Circuit: *
; Auteur: Bigonoff pour la base *
; tavernier pour le prog modifié par JMarc *
;*****************************************************************************
; *
; Fichier requis: P16F877.inc *
; *
; *
; *
;*****************************************************************************
; *
; Notes: essai de programmation pour afficheur 7 segments *
; *
; *
; *
; *
;*****************************************************************************
LIST p=16F877 ; Définition de processeur
#include <p16F877.inc> ; fichier include
radix dec ; on travaille en décimal par défaut
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation. Les définitions sont dans le fichier include.
; Choisir une valeur par groupe.
; Voici les valeurs et leurs définitions :
; Protection du programme
; -----------------------
;_CP_ALL protection totale
;_CP_HALF protection de 1000 à 1FFF
;_CP_UPPER_256 protection de 1F00 à 1FFF
;_CP_OFF Pas de protection
; Debuggage
; ---------
;_DEBUG_ON RB6 et RB7 utilisées pour debugger
;_DEBUG_OFF RB6 et RB7 en utilisation normale
; Accès à la flash programme
; --------------------------
;_WRT_ENABLE_ON Le programme peut écrire dans la flash
;_WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash
; Protection de la EEprom
; -----------------------
;_CPD_ON Mémoire EEprom protégée
;_CPD_OFF Mémoire EEprom déprotégée
; Programmation sur circuit
; -------------------------
;_LVP_ON RB3 permet la programmation série de la PIC
;_LVP_OFF RB3 en utilisation normale
; Reset de la PIC si tension <4V
; ------------------------------
; _BODEN_ON Reset tension en service
; Valide PWRTE_ON automatiquement
; _BODEN_OFF Reset tension hors service
; Retard à la mise sous tension
; -----------------------------
;_PWRTE_OFF Démarrage rapide
;_PWRTE_ON Démarrage temporisé
; Watchdog
; --------
;_WDT_ON Watchdog en service
;_WDT_OFF Watchdog hors service
; Oscillateur
; -----------
;_LP_OSC Oscillateur basse vitesse (32<F<200Khz)
;_XT_OSC Oscilateur moyenne vitesse (200Khz<F<4Mhz)
;_HS_OSC Oscillateur haute vitesse (4Mhz<F<20Mhz)
;_RC_OSC Oscillateur à réseau RC
;*****************************************************************************
; ASSIGNATIONS SYSTEME *
;*****************************************************************************
; REGISTRE OPTION_REG (configuration)
; -----------------------------------
OPTIONVAL EQU B'10000111'
; RBPU b7 : 1= Résistance rappel +5V hors service
; INTEDG b6 : 1= Interrupt sur flanc montant de RB0
; 0= Interrupt sur flanc descend. de RB0
; TOCS b5 : 1= source clock = transition sur RA4
; 0= horloge interne
; TOSE b4 : 1= Sélection flanc montant RA4(si B5=1)
; 0= Sélection flanc descendant RA4
; PSA b3 : 1= Assignation prédiviseur sur Watchdog
; 0= Assignation prédiviseur sur Tmr0
; PS2/PS0 b2/b0 valeur du prédiviseur
; 000 = 1/1 (watchdog) ou 1/2 (tmr0)
; 001 = 1/2 1/4
; 010 = 1/4 1/8
; 011 = 1/8 1/16
; 100 = 1/16 1/32
; 101 = 1/32 1/64
; 110 = 1/64 1/128
; 111 = 1/128 1/256
; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTCONVAL EQU B'00100000'
; GIE b7 : masque autorisation générale interrupt
; ne pas mettre ce bit à 1 ici
; sera mis en temps utile
; PEIE b6 : masque autorisation générale périphériques
; T0IE b5 : masque interruption tmr0
; INTE b4 : masque interuption RB0/Int
; RBIE b3 : masque interruption RB4/RB7
; T0IF b2 : flag tmr0
; INTF b1 : flag RB0/Int
; RBIF b0 : flag interruption RB4/RB7
; REGISTRE PIE1 (contrôle interruptions périphériques)
; ----------------------------------------------------
PIE1VAL EQU B'00000000'
; PSPIE b7 : Toujours 0 sur PIC 16F786
; ADIE b6 : masque interrupt convertisseur A/D
; RCIE b5 : masque interrupt réception USART
; TXIE b4 : masque interrupt transmission USART
; SSPIE b3 : masque interrupt port série synchrone
; CCP1IE b2 : masque interrupt CCP1
; TMR2IE b1 : masque interrupt TMR2 = PR2
; TMR1IE b0 : masque interrupt débordement tmr1
; REGISTRE PIE2 (contrôle interruptions particulières)
; ----------------------------------------------------
PIE2VAL EQU B'00000000'
; UNUSED b7 : inutilisé, laisser à 0
; RESERVED b6 : réservé, laisser à 0
; UNUSED b5 : inutilisé, laisser à 0
; EEIE b4 : masque interrupt écriture EEPROM
; BCLIE b3 : masque interrupt collision bus
; UNUSED b2 : inutilisé, laisser à 0
; UNUSED b1 : inutilisé, laisser à 0
; CCP2IE b0 : masque interrupt CCP2
; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL)
; ------------------------------------
ADCON1VAL EQU B'00000110' ; PORTA en mode digital
; DIRECTION DES PORTS I/O
; -----------------------
DIRPORTA EQU B'00000000' ; Direction PORTA (1=entrée)
DIRPORTB EQU B'00000000' ; Direction PORTB
DIRPORTC EQU B'11111111' ; Direction PORTC
DIRPORTD EQU B'11111111' ; Direction PORTD
DIRPORTE EQU B'00000111' ; Direction PORTE
;*****************************************************************************
; ASSIGNATIONS PROGRAMME *
;*****************************************************************************
; exemple
; -------
MASQUE EQU H'00FF'
;*****************************************************************************
; DEFINE *
;*****************************************************************************
; exemple
; -------
#DEFINE LED1 PORTB,1 ; LED de sortie 1
;*****************************************************************************
; MACRO *
;*****************************************************************************
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
; Sauts inter-pages
; -----------------
GOTOX macro ADRESSE ; saut inter-page
local BIT4 = (ADRESSE & 0x1000) ; voir bit 12
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
local ICI ; adresse courante
ICI
local PICI = (ICI+2 & 0x1800) ; page du saut
IF BIT3 ; si page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
IF BIT4 ; si page 2 ou 3
bsf PCLATH , 4 ; b4 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 4 ; b4 de PCLATH = 0
ENDIF
goto (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
PCLAX macro ADRESSE ; positionne PCLATH pour
; les sauts sans le saut
local BIT4 = (ADRESSE & 0x1000) ; voir bit 12
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
IF BIT3 ; si page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
IF BIT4 ; si page 2 ou 3
bsf PCLATH , 4 ; b4 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 4 ; b4 de PCLATH = 0
ENDIF
endm
GOTSX macro ADRESSE ; saut inter-page sans
; sélection de PCLATH
local ICI ; adresse courante
local PICI = (ICI & 0x1800) ; page du saut
ICI
goto (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
; Sous-routines inter-pages
; -------------------------
CALLX macro ADRESSE ; call inter-page
local BIT4 = (ADRESSE & 0x1000) ; voir bit 12
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
local ICI ; adresse courante
ICI
local PICI = (ICI+2 & 0x1800) ; page du saut
IF BIT3 ; si page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
IF BIT4 ; si page 2 ou 3
bsf PCLATH , 4 ; b4 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 4 ; b4 de PCLATH = 0
ENDIF
call (ADRESSE & 0x7FF | PICI) ; adresse simulée
local BIT4 = ((ICI+5) & 0x1000) ; voir bit 12
local BIT3 = ((ICI+5) & 0x0800) ; voir bit 11
IF BIT3 ; si page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
IF BIT4 ; si page 2 ou 3
bsf PCLATH , 4 ; b4 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 4 ; b4 de PCLATH = 0
ENDIF
endm
CALLSX macro ADRESSE ; sous-routine inter-page sans
; sélection de PCLATH
local ICI ; adresse courante
local PICI = (ICI & 0x1800) ; page du saut
ICI
call (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
; Sous-routines eeprom
; --------------------
REEPROM macro ; lire eeprom(adresse & résultat en w)
clrwdt ; reset watchdog
bcf STATUS,RP0 ; passer en banque2
bsf STATUS,RP1
movwf EEADR ; pointer sur adresse eeprom
bsf STATUS,RP0 ; passer en banque3
bcf EECON1,EEPGD ; pointer sur eeprom
bsf EECON1,RD ; ordre de lecture
bcf STATUS,RP0 ; passer en banque2
movf EEDATA,w ; charger valeur lue
bcf STATUS,RP1 ; passer en banque0
endm
WEEPROM macro addwrite ; la donnée se trouve dans W
LOCAL loop
bcf STATUS,RP0 ; passer en banque2
bsf STATUS,RP1
movwf EEDATA ; placer data dans registre
movlw addwrite ; charger adresse d'écriture
movwf EEADR ; placer dans registre
bsf STATUS,RP0 ; passer en banque3
bcf EECON1 , EEPGD ; pointer sur mémoire data
bsf EECON1 , WREN ; autoriser accès écriture
bcf INTCON , GIE ; interdire interruptions
movlw 0x55 ; charger 0x55
movwf EECON2 ; envoyer commande
movlw 0xAA ; charger 0xAA
movwf EECON2 ; envoyer commande
bsf EECON1 , WR ; lancer cycle d'écriture
bsf INTCON , GIE ; réautoriser interruptions
loop
clrwdt ; effacer watchdog
btfsc EECON1 , WR ; tester si écriture terminée
goto loop ; non, attendre
bcf EECON1 , WREN ; verrouiller prochaine écriture
bcf STATUS , RP0 ; passer en banque0
bcf STATUS , RP1
endm
;*****************************************************************************
; VARIABLES BANQUE 0 *
;*****************************************************************************
; Zone de 80 bytes
; ----------------
CBLOCK 0x20 ; Début de la zone (0x20 à 0x6F)
TempC : 1 ;equ 0x0c ; Registres temporaires … usage g‚n‚ral
Count : 1 ;equ 0x0f ; Compteur
MsdTime : 1 ;equ 0x10 ; MSD du timer
LsdTime : 1 ;equ 0x11 ; LSD du timer
OptionReg : 1 ; 1
PCL1 : 1 ;equ 2
BcdMsd : 1 ;equ 26
Bcd : 1 ; equ 27
;Exemples
;--------
test :1 ; Zone de 1 byte
table : 10 ; zone de 10 bytes
ENDC ; Fin de la zone
var1 EQU H'006E' ; adresse imposée
;*****************************************************************************
; VARIABLES ZONE COMMUNE *
;*****************************************************************************
; Zone de 16 bytes
; ----------------
CBLOCK 0x70 ; Début de la zone (0x70 à 0x7F)
w_temp : 1 ; Sauvegarde registre W
status_temp : 1 ; sauvegarde registre STATUS
FSR_temp : 1 ; sauvegarde FSR (si indirect en interrupt)
PCLATH_temp : 1 ; sauvegarde PCLATH (si prog>2K)
ENDC
;*****************************************************************************
; VARIABLES BANQUE 1 *
;*****************************************************************************
; Zone de 80 bytes
; ----------------
CBLOCK 0xA0 ; Début de la zone (0xA0 à 0xEF)
ENDC ; Fin de la zone
;*****************************************************************************
; VARIABLES BANQUE 2 *
;*****************************************************************************
; Zone de 96 bytes
; ----------------
CBLOCK 0x110 ; Début de la zone (0x110 à 0x16F)
ENDC ; Fin de la zone
;*****************************************************************************
; VARIABLES BANQUE 3 *
;*****************************************************************************
; Zone de 96 bytes
; ----------------
CBLOCK 0x190 ; Début de la zone (0x190 à 0x1EF)
ENDC ; Fin de la zone
;*****************************************************************************
; DEMARRAGE SUR RESET *
;*****************************************************************************
org 0x000 ; Adresse de départ après reset
clrf PCLATH ; Effacer sélecteur de pages
goto init ; Initialiser
; ////////////////////////////////////////////////////////////////////////////
; I N T E R R U P T I O N S
; ////////////////////////////////////////////////////////////////////////////
;*****************************************************************************
; ROUTINE INTERRUPTION *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Si on n'utilise pas l'adressage indirect dans les interrupts, on se passera
; de sauvegarder FSR
; Si le programme ne fait pas plus de 2K, on se passera de la gestion de
; PCLATH
;-----------------------------------------------------------------------------
;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é
movf FSR , w ; charger FSR
movwf FSR_temp ; sauvegarder FSR
movf PCLATH , w ; charger PCLATH
movwf PCLATH_temp ; le sauver
clrf PCLATH ; on est en page 0
BANK0 ; passer en banque0
; switch vers différentes interrupts
; inverser ordre pour modifier priorités
; mais attention alors au test PEIE
; effacer les inutiles
;----------------------------------------
; Interruption TMR0
; -----------------
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 inttmr0 ; oui, traiter interrupt tmr0
bcf INTCON,T0IF ; effacer flag interrupt tmr0
goto restorereg ; et fin d'interruption
; SUPPRIMER CETTE LIGNE POUR
; TRAITER PLUSIEURS INTERRUPT
; EN 1 SEULE FOIS
; Interruption RB0/INT
; --------------------
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
; interruption RB4/RB7
; --------------------
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
; détection interruptions périphériques
; le test peut être supprimé si une seule
; interrupt est traitée à la fois
; --------------------------------------
intsw3
btfss INTCON,PEIE ; tester interruption périphérique autorisée
goto restorereg ; non, fin d'interruption
; Interruption convertisseur A/D
; ------------------------------
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,ADIE ; tester si interrupt autorisée
goto intsw4 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,ADIF ; tester si interrupt en cours
goto intsw4 ; non sauter
call intad ; oui, traiter interrupt
bcf PIR1,ADIF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; Interruption réception USART
; ----------------------------
intsw4
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,RCIE ; tester si interrupt autorisée
goto intsw5 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,RCIF ; oui, tester si interrupt en cours
goto intsw5 ; non sauter
call intrc ; oui, traiter interrupt
; LE FLAG NE DOIT PAS ETRE REMIS A 0
; C'EST LA LECTURE DE RCREG QUI LE PROVOQUE
goto restorereg ; et fin d'interrupt
; Interruption transmission USART
; -------------------------------
intsw5
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,TXIE ; tester si interrupt autorisée
goto intsw6 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,TXIF ; oui, tester si interrupt en cours
goto intsw6 ; non sauter
call inttx ; oui, traiter interrupt
; LE FLAG NE DOIT PAS ETRE REMIS A 0
; C'EST L'ECRITURE DE TXREG QUI LE PROVOQUE
goto restorereg ; et fin d'interrupt
; Interruption SSP
; ----------------
intsw6
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,SSPIE ; tester si interrupt autorisée
goto intsw7 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,SSPIF ; oui, tester si interrupt en cours
goto intsw7 ; non sauter
call intssp ; oui, traiter interrupt
bcf PIR1,SSPIF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; Interruption CCP1
; -----------------
intsw7
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,CCP1IE ; tester si interrupt autorisée
goto intsw8 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,CCP1IF ; oui, tester si interrupt en cours
goto intsw8 ; non sauter
call intccp1 ; oui, traiter interrupt
bcf PIR1,CCP1IF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; Interruption TMR2
; -----------------
intsw8
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,TMR2IE ; tester si interrupt autorisée
goto intsw9 ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,TMR2IF ; oui, tester si interrupt en cours
goto intsw9 ; non sauter
call inttmr2 ; oui, traiter interrupt
bcf PIR1,TMR2IF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; Interruption TMR1
; -----------------
intsw9
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE1,TMR1IE ; tester si interrupt autorisée
goto intswA ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR1,TMR1IF ; oui, tester si interrupt en cours
goto intswA ; non sauter
call inttmr1 ; oui, traiter interrupt
bcf PIR1,TMR1IF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; Interruption EEPROM
; -------------------
intswA
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE2,EEIE ; tester si interrupt autorisée
goto intswB ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR2,EEIF ; oui, tester si interrupt en cours
goto intswB ; non sauter
call inteprom ; oui, traiter interrupt
bcf PIR2,EEIF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; Interruption COLLISION
; ----------------------
intswB
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE2,BCLIE ; tester si interrupt autorisée
goto intswC ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR2,BCLIF ; oui, tester si interrupt en cours
goto intswC ; non sauter
call intbc ; oui, traiter interrupt
bcf PIR2,BCLIF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; interruption CCP2
; -----------------
intswC
bsf STATUS,RP0 ; sélectionner banque1
btfss PIE2,CCP2IE ; tester si interrupt autorisée
goto intswD ; non sauter
bcf STATUS,RP0 ; oui, sélectionner banque0
btfss PIR2,CCP2IF ; oui, tester si interrupt en cours
goto intswD ; non sauter
call intccp2 ; oui, traiter interrupt
bcf PIR2,CCP2IF ; effacer flag interupt
goto restorereg ; et fin d'interrupt
; interruption PSP
; ----------------
intswD
bcf STATUS,RP0 ; oui, sélectionner banque0
call intpsp ; traiter interrupt
bcf PIR1,PSPIF ; effacer flag interupt
;restaurer registres
;-------------------
restorereg
movf PCLATH_temp , w ; recharger ancien PCLATH
movwf PCLATH ; le restaurer
movf FSR_temp , w ; charger FSR sauvé
movwf FSR ; restaurer FSR
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 *
;*****************************************************************************
inttmr0
goto ServiceRTCC
return ; fin d'interruption timer
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION RB0/INT *
;*****************************************************************************
intrb0
return ; fin d'interruption RB0/INT
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION RB4/RB7 *
;*****************************************************************************
intrb4
movf PORTB,w ; indispensable pour pouvoir resetter RBIF
return ; fin d'interruption RB4/RB7
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION CONVERTISSEUR A/D *
;*****************************************************************************
intad
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION RECEPTION USART *
;*****************************************************************************
intrc
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION TRANSMISSION USART *
;*****************************************************************************
inttx
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION SSP *
;*****************************************************************************
intssp
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION CCP1 *
;*****************************************************************************
intccp1
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION TIMER 2 *
;*****************************************************************************
inttmr2
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION TIMER 1 *
;*****************************************************************************
inttmr1
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION EEPROM *
;*****************************************************************************
inteprom
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION COLLISION *
;*****************************************************************************
intbc
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION CCP2 *
;*****************************************************************************
intccp2
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
;*****************************************************************************
; INTERRUPTION PSP *
;*****************************************************************************
intpsp
return ; fin d'interruption
; peut être remplacé par
; retlw pour retour code d'erreur
; ////////////////////////////////////////////////////////////////////////////
; P R O G R A M M E
; ////////////////////////////////////////////////////////////////////////////
;*****************************************************************************
; INITIALISATIONS *
;*****************************************************************************
init
; initialisation PORTS (banque 0 et 1)
; ------------------------------------
BANK0 ; sélectionner banque0
clrf PORTA ; Sorties PORTA à 0
clrf PORTB ; sorties PORTB à 0
clrf PORTC ; sorties PORTC à 0
clrf PORTD ; sorties PORTD à 0
clrf PORTE ; sorties PORTE à 0
bsf STATUS,RP0 ; passer en banque1
movlw ADCON1VAL ; PORTA en mode digital/analogique
movwf ADCON1 ; écriture dans contrôle A/D
movlw DIRPORTA ; Direction PORTA
movwf TRISA ; écriture dans registre direction
movlw DIRPORTB ; Direction PORTB
movwf TRISB ; écriture dans registre direction
movlw DIRPORTC ; Direction PORTC
movwf TRISC ; écriture dans registre direction
movlw DIRPORTD ; Direction PORTD
movwf TRISD ; écriture dans registre direction
movlw DIRPORTE ; Direction PORTE
movwf TRISE ; écriture dans registre direction
; Registre d'options (banque 1)
; -----------------------------
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; registres interruptions (banque 1)
; ----------------------------------
movlw INTCONVAL ; charger valeur registre interruption
movwf INTCON ; initialiser interruptions
movlw PIE1VAL ; Initialiser registre
movwf PIE1 ; interruptions périphériques 1
movlw PIE2VAL ; initialiser registre
movwf PIE2 ; interruptions périphériques 2
; Effacer RAM banque 0
; ---------------------
bcf STATUS,RP0 ; sélectionner banque 0
movlw 0x20 ; initialisation pointeur
movwf FSR ; d'adressage indirect
init1
clrf INDF ; effacer ram
incf FSR,f ; pointer sur suivant
btfss FSR,7 ; tester si fin zone atteinte (>7F)
goto init1 ; non, boucler
; autoriser interruptions (banque 0)
; ----------------------------------
clrf PIR1 ; effacer flags 1
clrf PIR2 ; effacer flags 2
bsf INTCON,GIE ; valider interruptions
clrf MsdTime ; raz timers J'ai modifié ici
clrf LsdTime ; /
movlw .96 ; pr‚chargement RTCC
movwf TMR0 ;RTCC ; d‚part comptage
goto start ; programme principal
;*****************************************************************************
; PROGRAMME PRINCIPAL *
;*****************************************************************************
ServiceRTCC
movlw .96 ; initialisation RTCC
movwf TMR0
bcf INTCON,T0IF ; raz drapeau d'it Bit2
call IncTimer ; incr‚mentation timer
call UpdateDisplay ; mise … jour affichage
retfie
;
;L'affichage est augment‚ de un toutes les 200 x 5 ms
;
IncTimer
incf Count,w ; incr‚mentation de count
xorlw .200 ; = 200?
btfsc STATUS,Z ; non, alors saut
goto DoIncTime ; oui, incr‚mentation de time
incf Count
return
DoIncTime
clrf Count ; raz de count
incf LsdTime,w ; lecture Lsd
andlw 0x0F ; masque quartet haut
xorlw 0x0a ; = 10?
btfsc STATUS,Z ; non alors saut
goto IncSecondLsd ; incr‚mentation Lsd suivant
incf LsdTime ; incr‚mentation timer
return
IncSecondLsd
swapf LsdTime,w
andlw 0x0F ; masque quartet haut
addlw 1 ; incr‚mentation
movwf LsdTime
swapf LsdTime
xorlw 0x0a ; = 10?
btfsc STATUS,Z ; non alors saut
goto IncThirdLsd ; incr‚mentation Lsd suivant
return
IncThirdLsd
clrf LsdTime
incf MsdTime,w ; lecture 3Šme Lsd
andlw 0x0F ; masque quartet haut
xorlw 0x0a ; = 10?
btfsc STATUS,Z ; non alors saut
goto IncMsd ; oui alors Msd
incf MsdTime ; incr‚mentation timer
return
IncMsd
swapf MsdTime,w
andlw 0x0F ; masque quartet haut
addlw 1 ; incr‚mentation timer
movwf MsdTime
swapf MsdTime
xorlw 0x0a ; = 10?
btfsc STATUS,Z ; non alors saut
clrf MsdTime ; raz Msd
return
;
;
UpdateDisplay
movf PORTA,w
clrf PORTA ; Invalidation tous chiffres
andlw 0x0f
movwf TempC ; Sauvegarde nø de chiffre ds tempC
bsf TempC,4 ; Pr‚paration validation Lsd
rrf TempC ; Determine chiffre suivant
btfss STATUS,C ; c=1?
bcf TempC,3 ; non alors raz Lsd
btfsc TempC,0
goto UpdateMsd
btfsc TempC,1
goto Update3rdLsd
btfsc TempC,2
goto Update2ndLsd
UpdateLsd
movf LsdTime,w ; Lecture Lsd dans W
andlw 0x0f ; /
goto DisplayOut ; Validation affichage
Update2ndLsd
call Chk2LsdZero ; Msd = 0 & 2 Lsd 0?
btfss STATUS,Z ; oui alors saut
swapf LsdTime,w ; lecture 2ø Lsd dans W
andlw 0x0f ; masque quartet bas
goto DisplayOut ; validation affichage
Update3rdLsd
call ChkMsdZero ; Msd = 0?
btfss STATUS,Z ; oui alors saut
movf MsdTime,w ; lecture 3ø Lsd dans W
andlw 0x0f ; masque quartet bas
goto DisplayOut ; validation affichage
UpdateMsd
swapf MsdTime,w ; lecture Msd dans W
andlw 0x0f ; masque quartet bas
btfsc STATUS,Z ; Msd != 0 puis saut
movlw 0x0a
DisplayOut
call LedTable ; lecture chiffres
movwf PORTB ; commande des LED
movf TempC,w
movwf PORTA
return
;
;
LedTable
addwf pcl1 ; ajout au PC
retlw B'00111111' ; LED allum‚es pour afficher 0
retlw B'00000110' ; LED allum‚es pour afficher 1
retlw B'01011011' ; LED allum‚es pour afficher 2
retlw B'01001111' ; LED allum‚es pour afficher 3
retlw B'01100110' ; LED allum‚es pour afficher 4
retlw B'01101101' ; LED allum‚es pour afficher 5
retlw B'01111101' ; LED allum‚es pour afficher 6
retlw B'00000111' ; LED allum‚es pour afficher 7
retlw B'01111111' ; LED allum‚es pour afficher 8
retlw B'01100111' ; LED allum‚es pour afficher 9
retlw B'00000000' ; Effacement toutes LED
;
;
Chk2LsdZero
call ChkMsdZero ; Msd = 0?
btfss STATUS,Z ; oui alors saut
return ; sinon retour
swapf LsdTime,w ; lecture 2ø Lsd
andlw 0x0f ; masque quartet bas
btfss STATUS,Z ; 0? alors saut
return
retlw .10 ; sinon retour avec 10
;
ChkMsdZero
movf MsdTime,w ; lecture Msd dans W
btfss STATUS,Z ; = 0? alors saut
return ; sinon retour
retlw .10 ; retour avec 10
;
start
clrwdt ; effacer watch dog
goto start ; boucler
END ; directive fin de programme
debut avec le debuguer
Voila, encore une journée a passer a essayer et cela ne fonctionne toujours pas mais que du positif
J'ai un probleme avec TMR0, cela ne semble pas fonctionner mais du coup puisque je fais du pas a pas j'ai placer ceci dans la boucle principale
ça fonctionne bien pour le porta qui sert a commander les afficheurs a tour de role mais mon portb reste toujours avec la meme valeur
cela doit venir d'ici je pense; ou ma variable PCL1 ou c'est w qui arrive avec une valeur erroné
J'ai un probleme avec TMR0, cela ne semble pas fonctionner mais du coup puisque je fais du pas a pas j'ai placer ceci dans la boucle principale
Code : Tout sélectionner
start
nop
call IncTimer ; incr‚mentation timer
call UpdateDisplay ; mise … jour affichage
goto start ; boucler
ça fonctionne bien pour le porta qui sert a commander les afficheurs a tour de role mais mon portb reste toujours avec la meme valeur
cela doit venir d'ici je pense; ou ma variable PCL1 ou c'est w qui arrive avec une valeur erroné
Code : Tout sélectionner
LedTable
addwf PCL1 ; ajout au PC
retlw B'00111111' ; LED allum‚es pour afficher 0
retlw B'00000110' ; LED allum‚es pour afficher 1
retlw B'01011011' ; LED allum‚es pour afficher 2
retlw B'01001111' ; LED allum‚es pour afficher 3
retlw B'01100110' ; LED allum‚es pour afficher 4
retlw B'01101101' ; LED allum‚es pour afficher 5
retlw B'01111101' ; LED allum‚es pour afficher 6
retlw B'00000111' ; LED allum‚es pour afficher 7
retlw B'01111111' ; LED allum‚es pour afficher 8
retlw B'01100111' ; LED allum‚es pour afficher 9
retlw B'00000000' ; Effacement toutes LED
debut avec le debuguer
Bonjour
Pas simple ton code voir, illisible, que viens faire par exemple la gestion de l'EPROM avec un timer tu as besoin de l'EPROM ????? non donc a virer et puis cela :
C'est des petits f
Pourquoi reprendre toute les registre alors que le fichier include et la pour cela
Tient cela tu peux le virer et le reste des registres c'est pas un tuto c'est un programme
PREND CA
allez courage et A+
Pas simple ton code voir, illisible, que viens faire par exemple la gestion de l'EPROM avec un timer tu as besoin de l'EPROM ????? non donc a virer et puis cela :
Code : Tout sélectionner
LIST p=16F877 ; Définition de processeur
#include <p16F877.inc> ; fichier include
C'est des petits f
Pourquoi reprendre toute les registre alors que le fichier include et la pour cela
Tient cela tu peux le virer et le reste des registres c'est pas un tuto c'est un programme
Code : Tout sélectionner
INTCONVAL EQU B'00100000'
; GIE b7 : masque autorisation générale interrupt
; ne pas mettre ce bit à 1 ici
; sera mis en temps utile
; PEIE b6 : masque autorisation générale périphériques
; T0IE b5 : masque interruption tmr0
; INTE b4 : masque interuption RB0/Int
; RBIE b3 : masque interruption RB4/RB7
; T0IF b2 : flag tmr0
; INTF b1 : flag RB0/Int
; RBIF b0 : flag interruption RB4/RB7
; REGISTRE PIE1 (contrôle interruptions périphériques)
PREND CA
Code : Tout sélectionner
;*******************************************************************
;description
;********************************************************************
;
; Auteur
; Version
; Date :0
;
;********************************************************************
; Note:PIC 16F877_04
;********************************************************************
ERRORLEVEL-302
list p=16f877 ;liste directive du 16F877
#include "p16f877.inc"
; CONFIG
__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
;*********************** Déclarations des définitions ****************
;*********************** Assignations *******************************
;*********************** Définitions variables en RAM PAGE0 *********
CBLOCK 0x20
ICI TU POSES tes variables
ENDC
;*********************** Macro **************************************
Banque0 MACRO
BCF STATUS,RP0 ;Acces bank0
BCF STATUS,RP1
ENDM
Banque1 MACRO
BSF STATUS,RP0 ;Acces bank1
BCF STATUS,RP1
ENDM
Banque2 MACRO
BCF STATUS,RP0 ;acces bank2
BSF STATUS,RP1
ENDM
Banque3 MACRO
BSF STATUS,RP0 ;Acces bank4
BSF STATUS,RP1
ENDM
;********************************************************************
ORG 0x00
GOTO Principale
;****************** Gestion des interruptions ***********************
ORG 0x4
RETFIE ; retour int
;*******************************************************************
; Début du Programme
;*******************************************************************
Principale
;*********************** Mise a zéro de la mémoire RAM banque0 ******
MOVLW 0x20
MOVWF FSR
Effa CLRF INDF
INCF FSR,F ;RAZ RAM
BTFSS FSR,7
GOTO Effa
;*********************** Initialisation des ports *******************
Banque1 ;accés bank1
REMPLI ICI
;******************* Initialisation des timers/compteurs *************
REMPLI ICI
;*********************************************************************
SUITE REMPLI ICI
allez courage et A+
Modifié en dernier par Anonymous le mar. 20 sept. 2016 17:58, modifié 1 fois.
debut avec le debuguer
Que tu t'inspires de bigonoff oui, que tu recopies l'exemple d'un programme NON. Dans mon masque, tu n'est pas obligé de remplir les paragraphes vides. Si tu n'as pas besoin de l'int tu laisses, pas d'assignations tu laisses vides etc...
Pour Tes variables , pour des besoins simples, tu mets cela dans 0x20 car la banque 0 est la plus usitée
Pour les int que celle du timer le reste tu vires
A+
Pour Tes variables , pour des besoins simples, tu mets cela dans 0x20 car la banque 0 est la plus usitée
Pour les int que celle du timer le reste tu vires
A+
debut avec le debuguer
je te secoue un peu , mais la, il faut faire le ménage .Tiens encore,la notion de page, oui pour un gros programme ok, mais pour ton application tu vas pas en avoir besoin et de plus complique la visibilité
Allez plaisir de te lire
A+
PS: tu peux me donner tes besoins pour cette application, je vais la faire avec toi .si tu veux bien étape par étape
voila deja la trame
il faut sûrement modifier la configuration des ports a toi de me dire
Allez plaisir de te lire
A+
PS: tu peux me donner tes besoins pour cette application, je vais la faire avec toi .si tu veux bien étape par étape
voila deja la trame
Code : Tout sélectionner
;*******************************************************************
;
;********************************************************************
;
; Auteur :maï/JMarc
; Version :1.0
; Date :09/2016
;
;********************************************************************
; Note:PIC 16F876A_04
;********************************************************************
ERRORLEVEL-302
list p=16f877 ;liste directive du 16F876a
#include "p16f877.inc"
; CONFIG
__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
;*********************** Déclarations des définitions ***************
;*********************** Assignations *******************************
DRAM EQU 0x20 ;début Mémoire Ram banque0
FRAM EQU 0X7F ;fin Mémoire Ram banque0
QUARTZ EQU .20 ;Valeur du quartz en MHz
DIVISEUR1 equ .8 ;ici 8 du TMR
TEMPS EQU .100000 ;Valeur en µs
TIMER1 EQU .65535-((QUARTZ*TEMPS)/(.4*DIVISEUR1)-2);les-2 pour temps chargement timer1
TIMER1L EQU LOW TIMER1 ;valeur
TIMER1H EQU HIGH TIMER1 ;pour 100 ms qu'il faudra incorporer dans le timer 1
;*********************** Définitions variables en RAM PAGE0 *********
CBLOCK 0x20
Sauv,Sauv1,Temp
ENDC
;*********************** Macro **************************************
Banque0 MACRO
BCF STATUS,RP0 ;Acces bank0
BCF STATUS,RP1
ENDM
Banque1 MACRO
BSF STATUS,RP0 ;Acces bank1
BCF STATUS,RP1
ENDM
Banque2 MACRO
BCF STATUS,RP0 ;acces bank2
BSF STATUS,RP1
ENDM
Banque3 MACRO
BSF STATUS,RP0 ;Acces bank4
BSF STATUS,RP1
ENDM
;********************************************************************
ORG 0x00
GOTO Principale
;****************** Gestion des interruptions ***********************
ORG 0x4
MOVWF Sauv ;sauve W
SWAPF STATUS, 0 ;
MOVWF Sauv1 ;sauve status
MOVLW TIMER1L ;oui
MOVWF TMR1L
MOVLW TIMER1H ;on recharge le timer1
MOVWF TMR1H
BCF PIR1,TMR1IF ;RAZ du drapeau de TMR1
INCF Temp,F ; à 10 cela fera 1s
SWAPF Sauv1,0
MOVWF STATUS ;restaure status
SWAPF Sauv, 1
SWAPF Sauv, 0 ;restaure W
RETFIE ; retour int
;*******************************************************************
; Début du Programme
;*******************************************************************
Principale
;*********************** Mise a zéro de la mémoire RAM banque0 ******
MOVLW DRAM
MOVWF FSR
Effa CLRF INDF
INCF FSR,F ;RAZ RAM
BTFSS FSR,7
GOTO Effa
;*********************** Initialisation des ports *******************
Banque1 ;accés bank1
CLRF TRISB ;Broches RB0 à RB7 en sortie
MOVLW B'00000001' ;Broches RA0 en entrée
MOVWF TRISA
MOVLW B'11000000'
MOVWF TRISC ; le port serie
MOVLW B'00001110' ;RA0 en analogique
MOVWF ADCON1 ;justification a gauche
;******************* Initialisation des timers/compteurs *************
; ici on va travailler avec le TIMER1
;*********************************************************************
MOVLW (0)|(0)|(1<<T1CKPS1)|(1<<T1CKPS0)|(0<<T1OSCEN)|(0<<T1SYNC)|(0<<TMR1CS)|(0<<TMR1ON)
MOVWF T1CON
MOVLW TIMER1H ;on charge le TIMER1
MOVWF TMR1H
MOVLW TIMER1L ;voir son calcul dans
MOVWF TMR1L ;assignation
;*********************** validation des INT ************************
BSF INTCON,GIE ;validation des INT
BSF INTCON,PEIE
BSF PIE1,TMR1IE ;valide le TMR1
Banque0
;*********************** Allez c'est partie *************************
END
il faut sûrement modifier la configuration des ports a toi de me dire
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 43 invités