je rencontre à nouveau des problèmes avec MPASM.
Le souhaite modifier la routine GOTOX de BigOnOff pour lui permettre de prendre en compte le nombre de pages du processeur (je dois être un peu radin)
Comme je n'ai rien trouvé dans l'assembleur qui permette de le connaître, j'ai introduit une étiquette NbPages que l'utilisateur peut définir en fonction du processeur qu'il utilise. Je suis sur des Mid-range.
Le code suivant ;
Code : Tout sélectionner
ifndef NbPages
#DEFINE NbPages 4
messg ""
messg "Attention, NbPages n'est pas défini"
messg "on lui attribue la valeur 4"
messg ""
endif ; def NbPages
; goto inter-banques
; ------------------
; adapté de BigOnOff
; réalise un goto avec gestion de PCLATH
if NbPages == 4 || NbPages == 3
GOTOX macro ADRESSE
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
local BIT4 = (ADRESSE & 0x1000) ; voir bit 12
local ICI
ICI
local PICI = (ICI+2 & 0x1800) ; page du saut
IF BIT3 ; si ADRESSE dans page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
IF BIT4 ; si ADRESSE dans page 2 ou 4
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
endif
; else ; NbPages == 4 || NbPages == 3
if NbPages == 2
GOTOX macro ADRESSE
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
local ICI
ICI
local PICI = (ICI+2 & 0x1800) ; page du saut
IF BIT3 ; si ADRESSE dans page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
goto (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
else
GOTOX macro ADRESSE
goto (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
endif ; NbPages == 2
; endif ; NbPages == 4 || NbPages == 3
donne le compte rendu
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F884 "TestUSART.asm" /l"TestUSART.lst" /e"TestUSART.err" /d__DEBUG=1
Warning[206] ../../CALLX/CALLX.INC 52 : Found call to macro in column 1. (GOTOX)
Error[136] ../../CALLX/CALLX.INC 52 : Duplicate macro name (GOTOX)
Error[113] ../../CALLX/CALLX.INC 53 : Symbol not previously defined (ADRESSE)
Error[113] ../../CALLX/CALLX.INC 53 : Symbol not previously defined (PICI)
Error[145] ../../CALLX/CALLX.INC 54 : Unmatched ENDM
Error[118] E:\DOCUMENTS DE JJ\MES PROJETS MPLAB\USART\TESTUSART\TESTUSART.ASM 215 : Overwriting previous address contents (0000)
Error[118] E:\DOCUMENTS DE JJ\MES PROJETS MPLAB\USART\TESTUSART\TESTUSART.ASM 215 : Overwriting previous address contents (0000)
Alors que celui-ci qui exploite des if emboîtés, plutôt moins jolis
Code : Tout sélectionner
ifndef NbPages
#DEFINE NbPages 4
messg ""
messg "Attention, NbPages n'est pas défini"
messg "on lui attribue la valeur 4"
messg ""
endif ; def NbPages
; goto inter-banques
; ------------------
; adapté de BigOnOff
; réalise un goto avec gestion de PCLATH
if NbPages == 4 || NbPages == 3
GOTOX macro ADRESSE
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
local BIT4 = (ADRESSE & 0x1000) ; voir bit 12
local ICI
ICI
local PICI = (ICI+2 & 0x1800) ; page du saut
IF BIT3 ; si ADRESSE dans page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
IF BIT4 ; si ADRESSE dans page 2 ou 4
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
; endif
else ; NbPages == 4 || NbPages == 3
if NbPages == 2
GOTOX macro ADRESSE
local BIT3 = (ADRESSE & 0x0800) ; voir bit 11
local ICI
ICI
local PICI = (ICI+2 & 0x1800) ; page du saut
IF BIT3 ; si ADRESSE dans page 1 ou 3
bsf PCLATH , 3 ; b3 de PCLATH = 1
ELSE ; sinon
bcf PCLATH , 3 ; b3 de PCLATH = 0
ENDIF
goto (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
else
GOTOX macro ADRESSE
goto (ADRESSE & 0x7FF | PICI) ; adresse simulée
endm
endif ; NbPages == 2
endif ; NbPages == 4 || NbPages == 3
donne celui-ci :
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F884 "TestUSART.asm" /l"TestUSART.lst" /e"TestUSART.err" /d__DEBUG=1
Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F884 "TestUSART.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"TestUSART.cof" /M"TestUSART.map" /W /x
MPLINK 4.49, Linker
Device Database Version 1.14
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors : 0
la seule modification, outre la dernière ligne, est celle-ci :
Code : Tout sélectionner
endm
; endif
transforné en
Code : Tout sélectionner
; endif
else ; NbPages == 4 || NbPages == 3
Quelqu'un peut-il m'expliquer ?
Merci d'avance.

