Bonjour,
j'ai un probleme avec MPLAB a chaque fois que je veux compiller un fichier .asm alors qu'il n'y a pas d'erreur dans le code juste des warnings normaux de banque (je fais les tutoriaux fournis par le site de Bigonoff)
je recois souvent cette erreur et je n'arrive pas a m'en debarrasser:
Debug build of project `C:\Documents and Settings\sholva\Mes documents\My MPLAB files\myinter.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Sat Aug 09 14:48:46 2008
----------------------------------------------------------------------
Make: The target "C:\Documents and Settings\sholva\Mes documents\My MPLAB files\myinter.o" is out of date.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84 "myinter.asm" /l"myinter.lst" /e"myinter.err" /d__DEBUG=1
Message[302] C:\DOCUMENTS AND SETTINGS\SHOLVA\MES DOCUMENTS\MY MPLAB FILES\MYINTER.ASM 147 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[173] C:\DOCUMENTS AND SETTINGS\SHOLVA\MES DOCUMENTS\MY MPLAB FILES\MYINTER.ASM 184 : Source file path exceeds 62 characters (C:\DOCUMENTS AND SETTINGS\SHOLVA\MES DOCUMENTS\MY MPLAB FILES\MYINTER.ASM)
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\Documents and Settings\sholva\Mes documents\My MPLAB files\myinter.mcp' failed.
Preprocessor symbol `__DEBUG' is defined.
Sat Aug 09 14:48:47 2008
----------------------------------------------------------------------
BUILD FAILED
Voici le fichier asm pour ceux qui pensent que ca viendrait du code:
;***************************** ****************************** ***********
; Ce programme est un programme didactique destiné à monter *
; le fonctionnement des interruptions *
; *
;***************************** ****************************** ***********
; *
; NOM: Interruption par bouton-poussoir sur RB0 *
; Date: 08/09/08 *
; Version: 1.0 *
; Circuit: Platine d'essais *
; Auteur: Bigonoff *
; *
;***************************** ****************************** ***********
; *
; Fichier requis: P16F84.inc *
; *
; *
; *
;***************************** ****************************** ***********
; *
; Notes: Ce programme transforme un bouton-poussoir en *
; télérupteur. Un pulse allume la LED, un autre *
; l'éteint *
; *
; *
;***************************** ****************************** ***********
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. 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'00' ; Valeur registre option
; Résistance pull-up ON
; Interrupt flanc montant RB0
; Préscaler timer à 2 (exemple)
INTERMASK EQU H'90' ; Masque d'interruption
; Interruptions sur RB0 (exemple)
;***************************** ****************************** **********
; DEFINE *
;***************************** ****************************** **********
#DEFINE Bouton PORTB,0 ; Bouton poussoir
#DEFINE LED PORTA,2 ; LED
;***************************** ****************************** **********
; MACRO *
;***************************** ****************************** **********
BANK0 macro
bcf STATUS,RP0 ;passer en banque 0
endm
BANK1 macro
bsf STATUS,RP0 ;passer en banque 1
endm
;***************************** ****************************** **********
; DECLARATIONS DE VARIABLES *
;***************************** ****************************** **********
;exemples
;---------
CBLOCK 0x00C ; début de la zone variables
w_temp :1 ; Zone de 1 byte
status_temp : 1 ; zone de 1 byte
cmpt1 :1 ;compteur de boucles 1 dans tempo
cmpt2 :1 ;compteur de boucles 2 dans tempo
cmpt3 :1 ;compteur de boucles 3 dans tempo
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é
call intrb0 ;triater interrupt RB0
;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 RB0/INT *
;***************************** ****************************** ***********
;----------------------------------------------------------------------
; inverse le niveau de RA2 a chaque passage *
;----------------------------------------------------------------------
intrb0
movlw B'00000100' ; bit positionne = bit a inverser
BANK0 ; car on ne sait pas su quelle banque
; on est dans en interruption (le programme
; prinicpal peu avoir change d ebanque). ce n'est
; pas le cas ici,mais c'est une sage decision
xorwf PORTA,f ; inverser RA2
return ; fin d'interruption RB0/INT
;***************************** ****************************** **********
; INITIALISATIONS *
;***************************** ****************************** **********
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
clrf EEADR ; permet de diminuer la consommation
BANK1 ; sélectionner banque 1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; Effacer RAM
; ------------
movlw 0x0c ; initialisation pointeur
movwf FSR ; pointeur d'adressage indirec
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
;configurer PORTS
;----------------
bcf LED ; RA2 en sortie (TRISA)
BANK0 ; Sélectionner banque 0
movlw INTERMASK ; masque interruption
movwf INTCON ; charger interrupt control
goto start ;sauter programme principal
;***************************** ****************************** **********
; PROGRAMME PRINCIPAL *
;***************************** ****************************** **********
start
nop ;instruction inutile
nop ;instruction inutile
nop ;instruction inutile
nop ;instruction inutile
nop ;instruction inutile
goto start ; boucler
END ; directive fin de programme
Merci d'avance.
-----