.:Matrix:. Inserito: 18 novembre 2008 Segnala Inserito: 18 novembre 2008 (modificato) Un saluto a tutti i frequentatori del forum.Sto mettendo a punto un circuito che usa un 16F84 ed un MAX232 per ricevere dei dati in formato RS232.Vorrei da voi un consiglio su come "attivare" la lettura dei byte da parte del pic all'arrivo del segnale seriale.Io avevo pensato di utilizzare l'interrupt del cambiamento di stato su uno dei pin 4-7 della porta B oppure usare l'interrupt esterno su port B pin 0.Nella routine di interrupt, richiamavo la routine di lettura dei dati RS232 e li andavo a "parcheggiare" in un buffer.Secondo voi, potrebbe essere la soluzione migliore?Avrei anche bisogno di un suggerimento di come implementare un buffer a 10 byte per la ricezione dei dati.Grazie.Luigi Modificato: 18 novembre 2008 da .:Matrix:.
Simons Inserita: 19 novembre 2008 Segnala Inserita: 19 novembre 2008 ma l'interrupt non puoi farlo attivare direttamente dai dati seriali, altrimenti perdi dei bit.. potresti usare i segnali aggiuntivi della rs232 tipo (butto là) CTS, RTS o insomma quelli per attivare l'interrupt e poi lanciare la routine di lettura
RESNIC Inserita: 21 novembre 2008 Segnala Inserita: 21 novembre 2008 Ora non ricordo precisamente la serie 16 , ma nella serie 18 è possibile avere l'interrupt alla recezione di un carattere.Ciaooooooo
Livio Orsini Inserita: 21 novembre 2008 Segnala Inserita: 21 novembre 2008 Il 16F84 è un vecchio uController senza USART, quindi non ha l'interrupt di Rx sul carattere.Si può ovviare scegliendo di attivare un interrupt esterno sul bit di Start, ovviamnete si sceglierà un protocollo che preveda il bit di start. RIcevuto il bit di start, che scatena l'interrupt eseterno su B0, la rutine testerà l'ingresso Rx a tempo di clock per verificare lo stato dei bit ricevuti.Per fare un buffer di 10 byte se lavori in "C" dichiari un array di 10 e crei un untatore che incrementi ad ogni byte scritto. In pratica devi farti uno Stack o catasta lungo 10 byte.Se invece usi asm, la tecnica è identica anche se un po' più macchinosaRiservi un'area di RAM di 10 byte per il tuo buffer, usando l'allocazione assoluta (cfr le direttive di allocazione sul manuale asm), poi crei un registro contatore che, all'inizio della scrittura, carichi con l'indirizzo del primo byte, ad ogni scrittura incrementi il registro.
RESNIC Inserita: 21 novembre 2008 Segnala Inserita: 21 novembre 2008 Pardon!Infatti io lavoro con serie 18 ... sono solo vantaggi!
Livio Orsini Inserita: 21 novembre 2008 Segnala Inserita: 21 novembre 2008 Anche i uC della serie 16f hanno quasi tutti l'USART integrato, ed anche un paio a volte.
.:Matrix:. Inserita: 12 dicembre 2008 Autore Segnala Inserita: 12 dicembre 2008 Grazie Livio per l'esauriente risposta.In effetti avevo implementato la stessa tipologia di listato facendo attivare l'INT0 del PIC sulla variazione del bit di start, e poi successivamente campionavo ad intervalli lunghi la durata di un BIT di un frame RS232 a 9600 bps infilando i vari bit con uno shift a destra in una variabile temporanea che successivamente veniva "spostata" nel buffer da 10 byte precedentemente allocato utilizzando il registro "puntatore" del PIC 'FSR' che veviva incrementato di byte in byte in modo da avere in ram i dieci byte del frame RS232.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora