Help programmazione pic, non mi fa i salti condizionati

Jan 17, 2008 10 Replies

Eccomi qui, domani laboratorio di sistemi a scuola, e sto ultimando un programma per domani. si tratta del classico garage da gestire con pic16f84a



Già la volta scorsa una volta scritto sul pic non succedeva niente... lo simulo con tutti i simulatori trovati, con mplab, pic developement studio, pic simulator ide, ma nessuno, arrivato a un salto condizionato tiene conto che forse è meglio saltare.. ovviamente porto a uno o a zero il bit in questione ma niente! magari sbaglio io a programmare... gli date un occhiata? a RA0 è collegato un sensore che si porta a uno quando una macchina in ingresso transita a RA1 come sopra tranne che ha il sensore per le macchine in uscita a RA4 un led che indica se il posteggio è pieno o ci sono posti sulla porta B ho un decodificatore esterno 7 segmenti, per vedere i posti liberi



grazie per l'aiuto



ORG 00H MOVLW 0EFH TRIS PORT_A MOVLW 00H TRIS PORT_B MOVLW 0FH MOVWF 0C BCF PORT_A,4 MAIN MOVF 0C,0 MOVWF PORT_B TEST BTFSS PORT_A,0 GOTO ENTRA BTFSC PORT_A,1 GOTO TEST ESCI BTFSS PORT_A,1 GOTO ESCI INCF 0C,1 GOTO SEMAF ENTRA BTFSS PORT_A,0 GOTO ENTRA DECF 0C,1 SEMAF BTFSS STATUS,2 GOTO SEM_ROS SEM_VER BCF PORT_A,4 GOTO MAIN SEM_ROS BSF PORT_A,4 GOTO MAIN END



GRAZIE MILLE A TUTTI!!!


"Mansell"

.......

sarò un profano ma non credi che qui ci sia un loop infinito?

Direi di no se il bit 0 della porta A riesce a portarsi al valore 1

----------------------------------------------------------------------------=

---------- * BTFSS (Bit Test Flag Skip if Set) (4)

[label] BTFSS f,b -> controlla lo stato del bit "b" del registro (f)

Viene controllato il bit "b" del registro f, se il bit =E8 settato (1) la istruzione successiva nel flusso del programma non viene eseguita (skip: eseguita come NOP =3D No Operation) se il bit =E8 a zero, viene eseguita l'istruzione successiva. Questa istruzione non influenza nessun bit del registro STATUS

----------------------------------------------------------------------------=

---------------- Poi non sono sufficientemente esperto per capire se c'=E8 un problema di inizializzazione o altro. Ciao Fausto

"Fausto"

....... [label] BTFSS f,b -> controlla lo stato del bit "b" del registro (f)

Viene controllato il bit "b" del registro f, se il bit è settato (1) la istruzione successiva nel flusso del programma non viene eseguita ....

ti ringrazio per la spiegazione.. (io mi fermo al "goto"....:)... però mi chiederei: se l'istruzione al primo colpo non viene eseguita.. cioè trova zero e quindi goto entra.. sempre, troverà sempre zero... nell'ordine del programma(nulla cambia).. teoricamente il programma non può funzionare se non è messo in funzione, appunto, praticamente e una benedetta macchina non arriva(immagino) a modificare sto benedetto bit da zero a uno!.... vabbe' lui ha detto che lo cambia lui....ma non va.... (ma lui ha tutto quello che io vorrei....!!;) saluti ciao gio..

(ps. Mansell...perché non provi con un debug..!?)

E come fa a funzionare tutta l'elettronica programmabile che hai intorno a te? Certo che "arriva a modificare un bit da zero a uno"! In particolare l'etichetta PORT_A sarà da qualche parte definita come il registro della porta A, appunto. Se viene modificato lo stato logico di un pin questo si riflette nel registro associato.

Credo che ci abbia provato:

Per Mansell,

stai dicendo che *tutti* i salti condizionati non vengono eseguiti? In ogni caso per quanto il programma sia già piccino, creati un progetto nuovo e inserisci giusto un salto condizionato, e risolvi il problema sul codice di 2-3 righe. Poi capito l'inghippo è facile sistemare questo.

Domanda: sicuro che PORT_A l'hai definita correttamente? Gli include di MPASM definisco PORTA. Inoltre l'uso dell'istruzione TRIS è deprecabile (come riportato a pagina 88 del datasheet) infatti non c'è nemmeno nella tabella riassuniva delle istruzioni!

Ho dato un'occhiata veloce al codice ma non ho tempo di provarlo, sorry. Non vedo le istruzioni di selezione del banco: i registri TRISx e PORTx stanno in due banchi distinti.

Ciao, Marco / iw2nzm

On 18 Gen, 09:57, "GioSpam" wrote: [...]

Stiamo parlando di un microcotrollore, la porta A =E8 una porta di I/O che viene programmata all'inizio con l'istruzione

MOVLW 0EFH TRIS PORT_A

che se la sintassi =E8 giusta carica il registro W con il valore

11101111 e lo usa per programmare la porta A in modo da settare in output il bit 4 della porta A e in input tutti gli altri bit. Poich=E8 il bit 0 della porta A =E8 collegato ad un pin del PIC, il microprocessore =E8 in grado di valutare il livello di tensione (0 o 5V) di questo pin trasferendolo come valore logico (0 1) sul bit 0 della porta A. Ora io mi intendo di assembler in generale e non ho pratica per=F2 con il PIC. Se lui non riesce a leggere il valore 1 sul pin i motivi possono essere tanti. Da problemi HW a problemi di corretta inizializzazione del dispositivo che nello specifico non conosco.

Ciao Fausto

Mansell ha scritto:

I PIC è quanto di peggio ci possa essere per scopi didattici-educativi.

il problema sembra risolto... copiando paro paro il programma da una stampa su carta del medesimo... qualche ritocchino e tutto si è risolto... grazie lo stesso!!!

piccola parentesi... che avete contro l'istruzione tris? :) mi sembra che svolga il suo sporco lavoro... ed è pure più semplice di cambiare banco, mandare il valore su 85-86 e tornare al banco 0!!

Lorenzo ha scritto:

Perché se fai didattica innanzitutto il tutto deve essere molto semplice: e PIC non lo è.

Molti istruttori usano ancora lo Z80 quando si tratta di insegnare i fondamenti di un sistema embedded: non sono pazzi, lo Z80 ha una sintassi semplice che ben si presta all'insegnamento.

Ad ogni modo per le mcu, esistono alternative più semplici, più economiche e più veloci: esempio AVR.

Gli AVR nascono proprio in ambito universitario (sviluppati in un'università norvegese) e orientati a essere usati in modo efficiente con il linguaggio C (compilatore del tutto gratuito).

Qui c'è un autorevole confronto:

nembo kid ha scritto:

Io sono al 4° anno, al 3° anno abbiamo cominciato la materia sistemi proprio con lo Z80, devo dire che senza sarebbe più difficile capire i pic

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required