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
debut avec le debuguer
debut avec le debuguer
Bonjour amis du forum
Des nouvelles..... Pas bonne
J'ai trouvé le problème de l'affichage I/O pins.
Pour passé du 16f84, j'avais juste changé le fichier include pour choisir 16f877.inc. C'était l'erreur
J'ai repris le bon fichier asm du 16f876 du cours, j'ai mis en include le fichier 16f877, dit a mplab que c'était bien un 16f877.
Sous débug c'est parfait, mon voyant I/O pins => ra2 clignote
J'ai envoyé le tout sur pickit3 et échec
"Target dévice ID (0xe20) si valid device Id but does not match the expected device ID (0x9a0) as selected "
voici le nouveau code
Des nouvelles..... Pas bonne
J'ai trouvé le problème de l'affichage I/O pins.
Pour passé du 16f84, j'avais juste changé le fichier include pour choisir 16f877.inc. C'était l'erreur
J'ai repris le bon fichier asm du 16f876 du cours, j'ai mis en include le fichier 16f877, dit a mplab que c'était bien un 16f877.
Sous débug c'est parfait, mon voyant I/O pins => ra2 clignote
J'ai envoyé le tout sur pickit3 et échec
"Target dévice ID (0xe20) si valid device Id but does not match the expected device ID (0x9a0) as selected "
voici le nouveau code
Code : Tout sélectionner
;*****************************************************************************
; *
; Exercice de migration d'un programme de 16F84 vers le 16F877. *
; Clignotement d'une LED à une fréquence de 1Hz en utilisant les *
; interruptions du timer0. *
; *
;*****************************************************************************
; *
; NOM: Led_tmr0 *
; Date: 07/04/2002 *
; Version: 1.1 *
; Circuit: platine d'expérimentation *
; Auteur: Bigonoff modifié par JMarc pour fantaspic *
; *
;*****************************************************************************
; *
; Fichier requis: P16F877.inc *
; *
;*****************************************************************************
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 du processeur. 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
; PSA b3 : 0= Assignation prédiviseur sur Tmr0
; PS2/PS0 b2/b0 valeur du prédiviseur
; 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
; T0IE b5 : masque interruption tmr0
; 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'00111011' ; RA2 en sortie
DIRPORTB EQU B'11111111' ; Direction PORTB
DIRPORTC EQU B'11111111' ; Direction PORTC
;*****************************************************************************
; DEFINE *
;*****************************************************************************
#DEFINE LED PORTA,2 ; LED de sortie
#DEFINE LEDMASK B'00000100' ; Masque pour inversion de la LED (RA2)
#DEFINE CMPTVAL D'35' ; valeur de recharge du compteur
;*****************************************************************************
; MACRO *
;*****************************************************************************
; Changement de banques
; ----------------------
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-banques
; -------------------
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-banques
; ----------------------------
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
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
; opérations en mémoire 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 0x9a0 ; Début de la zone (0x20 à 0x6F)
cmpt : 1 ; compteur de passage
ENDC ; Fin de la zone
;*****************************************************************************
; 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
; ////////////////////////////////////////////////////////////////////////////
; I N T E R R U P T I O N S
; ////////////////////////////////////////////////////////////////////////////
;*****************************************************************************
; DEMARRAGE SUR RESET *
;*****************************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Initialiser
;*****************************************************************************
; 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
bcf PIR1,TXIF ; effacer flag interupt
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
bcf STATUS,RP0 ; oui, sélectionner banque0
call intccp2 ; traiter interrupt
bcf PIR2,CCP2IF ; 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
decfsz cmpt , f ; décrémenter compteur de passages
return ; pas 0, on ne fait rien
movlw LEDMASK ; sélectionner bit à inverser
xorwf PORTA , f ; inverser LED
movlw CMPTVAL ; pour CMPTVAL 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 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
; ////////////////////////////////////////////////////////////////////////////
; 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
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
; 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
; initialiser variable
; --------------------
movlw CMPTVAL ; charger valeur d'initialisation
movwf cmpt ; initialiser compteur de passages
; autoriser interruptions (banque 0)
; ----------------------------------
clrf PIR1 ; effacer flags 1
clrf PIR2 ; effacer flags 2
bsf INTCON,GIE ; valider interruptions
goto start ; programme principal
;*****************************************************************************
; PROGRAMME PRINCIPAL *
;*****************************************************************************
start
goto start ; boucler
END ; directive fin de programme
debut avec le debuguer
bonjour
Fait comme cela
c'est des petits "f" c'est pas le meme compli
A+
PS: ton code plus fluide comme celui du maitre
Fait comme cela
Code : Tout sélectionner
list p=16f876 ; Définition de processeur
#include <p16f876.inc> ; Définitions de variables
c'est des petits "f" c'est pas le meme compli
A+
PS: ton code plus fluide comme celui du maitre
debut avec le debuguer
Bonsoir Maï
J'ai acheté le pickit3 et un module de programmation avec tensions réglable que je découvre et ça ne fonctionne pas.
J'ai repris mon vieux ordi avec le port série et l'ancien programmateur et un vieux 16f877 et ça fonctionne donc le programme est ok. Avec les 16f877 neuf, deux ne fonctionnent pas. J'ai du les cramer
J'ai repris le pickit3, avec le voltmètre, j'ai réglé sur 3,3 volt, et réussi à programmer mon premier pic
J'ai acheté le pickit3 et un module de programmation avec tensions réglable que je découvre et ça ne fonctionne pas.
J'ai repris mon vieux ordi avec le port série et l'ancien programmateur et un vieux 16f877 et ça fonctionne donc le programme est ok. Avec les 16f877 neuf, deux ne fonctionnent pas. J'ai du les cramer
J'ai repris le pickit3, avec le voltmètre, j'ai réglé sur 3,3 volt, et réussi à programmer mon premier pic
debut avec le debuguer
debut avec le debuguer
debut avec le debuguer
J'ai acheté ce programmateur, le potentiomètre bleu de droite sert a régler la tention, j'ai mis 3,3 volt car lors de la programmation, une fenêtre parlait de cette tention. Mais je ne sais pas si c'est pour cela que cela fonctionne. Depuis deux jours d'essais, j'ai fait tout et surtout n'importe quoi
Je n'ai pas compris le potentiomètre de gauche
Je n'ai pas compris le potentiomètre de gauche
Modifié en dernier par JMarc le mer. 7 sept. 2016 22:10, modifié 1 fois.
debut avec le debuguer
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 35 invités