Vai al contenuto
PLC Forum


Problema Pic 16f59


Messaggi consigliati

Inserito:

salve a tutti, qualcuno mi può aiutare per risolvere un problema con la P16F59?

ho creato un programmino per simulare un "contraves", compilo senza errori, tranne qualche warning, ma quando provo a simularlo il PCL ritorna a zero dopo poche linee.

(ho cancellato le define per chiarezza, questo è il codice disassembly listing)

000     FFF     XORLW 0xff                     193:   FLAG	RES 1
                                                             194:
001     FFF     XORLW 0xff                     195:   FLAGCOMPOUT	RES 1
                                                              196:
002     FFF     XORLW 0xff                     197:   PREIMUNITA  RES 1    003     FFF     XORLW 0xff                     198:   PREIMDECINE  RES 1    004     FFF     XORLW 0xff                     199:   PREIMCENTINAIA	RES 1    005     FFF     XORLW 0xff                     200:   PREIMMIGLIAIA	RES 1
                                                             201:
006     FFF     XORLW 0xff                     202:   PREIMUNITATEMP	RES	1
                                                   203:       
007     FFF     XORLW 0xff                     204:   BUFFERUNITA  RES	1    008     FFF     XORLW 0xff                     205:   BUFFERDECINE	RES	1    009     FFF     XORLW 0xff                     206:   BUFFERCENTINAIA	RES	1    00A     FFF     XORLW 0xff                     207:   BUFFERMIGLIAIA	RES	1
                                                   208:       
00B     FFF     XORLW 0xff                     209:   TEMPOPERSISTENZA	RES	1    00C     FFF     XORLW 0xff                     210:   TEMPOPERSISTENZAtemp	RES	1
00D     FFF     XORLW 0xff                     211:   TIMEOUTCOMPON	RES	1
                                                   212:       
00E     C00     MOVLW 0                        213:    MOVLW  b'00000000'    00F     005     TRIS 0x5                       214:    TRIS	PORTA
                                                   215:
010     C7F     MOVLW 0x7f                     216:    MOVLW  b'01111111'
011     006     TRIS 0x6                       217:    TRIS	PORTB
                                                   218:  
012     CFF     MOVLW 0xff                     219:    MOVLW  b'11111111'    013     007     TRIS 0x7                       220:    TRIS	PORTC
                                                   221:  
014     CFF     MOVLW 0xff                     222:    MOVLW  b'11111111'    015     008     TRIS 0x8                       223:    TRIS	PORTD
                                                   224:    
016     C00     MOVLW 0                        225:    MOVLW  b'00000000'    017     009     TRIS 0x9                       226:    TRIS	PORTE
                                                   227:
                                                        228:
                                                       229:  ;-------------------------------------------------------------------------;                                                   230: 
;    	RESET VALORI PREIMPOSTAZIONE  
                                                 231:  ;-------------------------------------------------------------------------;                                                   232:
018     C00     MOVLW 0                        233:    MOVLW  0X00
019     022     MOVWF 0x2                      234:    MOVWF	PREIMUNITA

arrivato all'ultima linea nonostante il codice prosegua il PCL ritorna a zero.

ho notato che se carico nel registro W un valore diverso da zero il PCL parte da quella cifra.

grazie anticipatamente


Inserita: (modificato)

Non ho sottomano i registri del P16F59, ma ho la sensazione che la riga 234 carichi una costante nel PCL,quindi se carichi 0 resetti

Modificato: da Livio Orsini
Inserita:

Probabilmente, dal listato non si capisce, non dichiari dove inizia l’indirizzo delle variabile quindi l’assemblatore di default le fa partire da 0x00.

Questo spiega “movwf premunita” infatti “premunita” e’ mappato all’indirizzo 2 (vedi riga 197).

Ciao.

Inserita:

il file Linker 16f59.lkr non dovrebbe evitare di assegnare manualmente le aree?

Se provo ad assegnare gli indirizzi con la direttiva org mi da degli errori come questo:

MPLINK 4.35, Linker Copyright (c) 1998-2010 Microchip Technology Inc. Error - file './CONTAPEZZI CON PREIMPOSTAZIONE.o', section '.org_2', performs a call to   symbol 'VISUALIZZAMIGLIAIA' which is not in the lower half of a page. Errors    : 1  Link step failed.

sono giorni che provo in vari modi, ovviamente tutti sbagliati.

Inserita:

ho risolto grazie all'aiuto di c1b8, il problema è appunto nelle aree che riservavo.

bisogna usare la direttiva cblock

CBLOCK 0AH
FLAG	:	1  
FLAGCOMPOUT	:	1  
PREIMUNITA	: 1 
PREIMDECINE	: 1 
PREIMCENTINAIA	: 1 
PREIMMIGLIAIA	: 1  
PREIMUNITATEMP	:	1  
BUFFERUNITA  :	1 
BUFFERDECINE	:	1 
BUFFERCENTINAIA	:	1 
BUFFERMIGLIAIA	:	1  
TEMPOPERSISTENZA	:	1 
TEMPOPERSISTENZAtemp	:	1 
TIMEOUTCOMPON	:	1    

endc

	ORG     0x7FF            ; processor reset vector
    errorlevel -306    ; disable page boundary message
     goto    start
	errorlevel +306    ; enable page boundary message;  

ORG     0x000 
;  	PROGRAMMA  
  ORG     0x000
  start
    	MOVLW  b'00000000'  TRIS	PORTA

ecc ecc

grazie a tutti della disponibilità

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...