Messaggio di errore MPASMWIN

« Older   Newer »
  Share  
poker72
view post Posted on 18/8/2010, 12:13




salve vorrei congratularmi per il meraviglioso forum che avete creato pieno di risorse e persone preparatissime,detto questo vengo al sodo , premetto che sono quasi 20anni che non facevo piu niente del genere ho cercato di fare un programma in assembler per un pic il 16f84 .
Quando vado a compilarlo mi restituisce questo errore :
Warning[203] C:\BBB\PROVA123.TXT 21 : Found opcode in column 1. (bsf)
Warning[203] C:\BBB\PROVA123.TXT 24 : Found opcode in column 1. (clrf)
Message[302] C:\BBB\PROVA123.TXT 24 : Register in operand not in bank 0. Ensure that bank bits are correct.
Warning[203] C:\BBB\PROVA123.TXT 27 : Found opcode in column 1. (movlw)
Message[302] C:\BBB\PROVA123.TXT 28 : Register in operand not in bank 0. Ensure that bank bits are correct.

allego anche il codice :
;---------------------------------------------------------------;
;--------------Programma per attivare tramite 2 pulsanti--------;
;--------------2 led e 2 elettrovalvole-------------------------;


list p=16F84
RADIX DEC
INCLUDE P16F84.INC
__confiG _LP_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF
ORG 00H
elettro1 equ 1 ; pulsante1
presso1 equ 2 ; pulsante2
valvo1rb0 equ 00000101 ; pin alto su valvola1 e su led1
valvo2rb1 equ 00001010 ; pin alto su valvola2 e su led2
delay1 equ 0x22
delay2 equ 0x23


;-----------------------------------------------------------------

bsf STATUS,RP0 ;attiva banco 1 per accedere alle TRIS

movlw 00000000B
movwf TRISA ; configuro in trisA per abilitare RA0 a RA3 come ingressi


movlw 00001111B
movwf TRISB ; configuro TRISB per abilitare RB0 RB1 RB2 RB3 come uscite


bcf STATUS,RP0 ;attivo il banco 1 per accedere alle port

movlw 00000000B
movwf PORTA ;metto gli ingressi a 0

movlw 00000000B
movwf PORTB ; metto a 0 le uscite

;-----------------------------------------------------------
;------------ricerca il pin a livello logico alto ----------

Tasti

btfss PORTA,elettro1
goto Passo1

btfss PORTA,presso1
goto Passo2

movlw 00000000B ;riporto portB a 0 quando elettro1 o presso1 vengono rilasciati
movwf PORTB

call Ritardo

;-----------------------------------------------------------
;-------------------primo passo-----------------------------

Passo1

movlw valvo1rb0
movwf PORTB ;accende RB0 e RB2

call Ritardo

;------------------------------------------------------------
;------------------secondo passo-----------------------------

Passo2

movlw valvo2rb1
movwf PORTB ; accende RB1 e RB3

call Ritardo

;-------------------------------------------------------------
;-------------ritardo-----------------------------------------

Ritardo

clrf delay1 ; metto a 0 il registro
clrf delay2 ; metto a 0 il registro

loop

decfsz delay1
goto loop
decfsz delay2
goto loop

return
;---------------------------------------------------------
END


la parte incriminata e' questa


bsf STATUS,RP0 ;attiva banco 1 per accedere alle TRIS

movlw 00000000B
movwf TRISA ; configuro in trisA per abilitare RA0 a RA3 come ingressi


ora configurandolo in questo modo non mi restituisce errori

clrf TRISA

a questo punto non capisco non dovrebbe essere uguale ?
 
Top
Elemento 38
view post Posted on 18/8/2010, 12:53




Ora vado a spanne perchè ho disponibile sotto di me il datasheet del 16F877, un po' diverso dal 16F84.
I warning non dovrebbero essere un problema, probabilmente prima di CLRF, MOVLW e BSF c'è uno spazio. Questo non dovrebbe compromettere niente.
In effetti però non vedo il problema nella configurazione dei registri TRIS, lui crede di essere nel B0 mentre sei nell'1. Puoi provare a risolvere con una istruzione un po' obsoleta ma perfetta per il 16F84.
Si chiama TRIS f .
f=05 ---> PORTA
f=06 ---> PORTB
Trasferisce direttamente il contenuto dell'accumulatore W nel registro TRIS corrispondente senza bisogno del cambio di banco.
Dovresti quindi fare
CITAZIONE
movlw 00000000B
TRIS PORTA; configuro in trisA per abilitare RA0 a RA3 come ingressi
movlw 00001111B
TRIS PORTB ; configuro TRISB per abilitare RB0 RB1 RB2 RB3 come uscite

Senza bisogno di cambiare banco all'inizio e alla fine.
Ma questa istruzione ti conviene usarla solo in questo PIC, molti altri non la supportano.
 
Top
poker72
view post Posted on 18/8/2010, 14:48




si infatti funziona era solo una curiosita grazie del suggerimento usando TRIS f non ci sono warnig

la microchip non consiglia l'utilizzo in quanto con quella istruzione non sono accessibili alcuni registri ma comunque funziona :the TRIS command works only on ports a, b, c not d, e

 
Top
Elemento 38
view post Posted on 18/8/2010, 18:32




CITAZIONE
la microchip non consiglia l'utilizzo in quanto con quella istruzione non sono accessibili alcuni registri ma comunque funziona :the TRIS command works only on ports a, b, c not d, e

Infatti è utilizzabile solo nel 16F84 e in pochi altri che hanno al massimo 3 port di uscita ;) Ma qual PIC per iniziare non è male, anche io sono partito con quello ^_^
 
Top
poker72
view post Posted on 19/8/2010, 12:58




si infatti ha molti dispositivi ed e' economico :-)
 
Top
Elemento 38
view post Posted on 23/8/2010, 10:01




CITAZIONE
si infatti ha molti dispositivi ed e' economico :-)

Bè sui molti dispositivi non saprei :unsure:
E' comodo per iniziare a programmare in assembler perché non costa praticamente niente e ci sono migliaia di programmatori che lo supportano ... ma come PIC base si dovrebbe usare almeno il 16F877, un po' più potente e allo stesso prezzo ;)
 
Top
5 replies since 18/8/2010, 12:13   158 views
  Share