Vai al contenuto
PLC Forum


Problema Pic 16f59


CIPPOCIPPO

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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
Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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à

Link al commento
Condividi su altri siti

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...