Ho realizzato una connessione seriale tra un PC e una scheda con PIC 16f877 con Max232n
il PC trasmette da una casella di testo realizzata con visual basic 6 usa il protocollo
MSComm1.output=char$ (text1.text)
e
il PIC riceve su
interrupt isr(void)
if (RCIF)
input=getch()
input è una variabile di tipo char
per programmare il PIC uso MPLAB ide v 8.63 con HI-TECH c
la comunicazione sia in ricezione che in trasmissione funziona correttamente se trasmetto un carattere o un valore numerico <255 io pero ho bisogno di inserire in una variabile del PIC un valore di almeno 5 numeri purtroppo dopo aver provato e letto sono arrivato alla conclusione che la mia conoscenza in materia non e sufficiente pertanto sono qui a chiedere il vostro aiuto un doveroso grazie in anticipo .
comunicazione seriale in HI-TECH C ricevere 5 caratteri
Moderatore:
Paolino
4 messaggi
• Pagina 1 di 1
0
voti
Ciao,
hai provato a sniffare la comunicazione con un altro programma? ti consiglio:
https://realterm.sourceforge.io/
inoltre, puoi essere più preciso? non si capisce molto cosa devi fare:
hai controllato che baud rate, bit di parità, bit di stop, controllo HW di CTS e RTS siano settati nel modo corretto?
quanti ricordi!
hai provato a sniffare la comunicazione con un altro programma? ti consiglio:
https://realterm.sourceforge.io/
inoltre, puoi essere più preciso? non si capisce molto cosa devi fare:
Grio ha scritto:ho bisogno di inserire in una variabile del PIC un valore di almeno 5 numeri
hai controllato che baud rate, bit di parità, bit di stop, controllo HW di CTS e RTS siano settati nel modo corretto?
Grio ha scritto:MPLAB ide v 8.63 con HI-TECH c
quanti ricordi!
0
voti
Come mai usi questo compilatore?
Comunque sia, dopo aver letto il carattere devi azzerare RCIF, altrimenti l’interrupt non verrà più sparato. Se devi ricevere n caratteri di conviene riempirci incrementalmente un vettore. Dovresti anche inserire qualcosa che gestisca gli errori, tipo un timer che dopo il primo carattere resetti la trasmissione se questa si ferma per troppo tempo.
Comunque sia, dopo aver letto il carattere devi azzerare RCIF, altrimenti l’interrupt non verrà più sparato. Se devi ricevere n caratteri di conviene riempirci incrementalmente un vettore. Dovresti anche inserire qualcosa che gestisca gli errori, tipo un timer che dopo il primo carattere resetti la trasmissione se questa si ferma per troppo tempo.
-

marioursino
5.687 3 9 13 - G.Master EY

- Messaggi: 1598
- Iscritto il: 5 dic 2009, 4:32
0
voti
Concordo con quanto scritto da
marioursino, che ne sa molto più di me.
Se proprio non sai come convertire un numero intero di 8 cifre in caratteri, allego una brutta funzione in linguaggio "processing" che ho scritto pochi giorni fa e che probabilmente fa quel che ti serve.
Se vuoi, ho anche quella duale dai carattri al numero.
Se poi ne scrivi una più elegante inviami il testo.
post scriptum:
Se non servono due caratteri BCD per byte, si può dividere per potenze di 256 invece che di 10.
Se proprio non sai come convertire un numero intero di 8 cifre in caratteri, allego una brutta funzione in linguaggio "processing" che ho scritto pochi giorni fa e che probabilmente fa quel che ti serve.
Se vuoi, ho anche quella duale dai carattri al numero.
Se poi ne scrivi una più elegante inviami il testo.
- Codice: Seleziona tutto
void set_frequency(int SETFREQ)
{
int NUM;
// print(" SETFREQ=", SETFREQ);
// print(" S");
CMHZ = (SETFREQ/10000000); NUM = SETFREQ - CMHZ*10000000;
DMHZ = (NUM/1000000); NUM = NUM - DMHZ*1000000;
MHz = (NUM/100000); NUM = NUM - MHz*100000;
CKHZ =(NUM/10000); NUM = NUM - CKHZ*10000;
DKHZ =(NUM/1000); NUM = NUM - DKHZ*1000;
kHz =(NUM/100); NUM = NUM - kHz*100;
CHZ=(NUM/10); NUM = NUM - CHZ*10;
DHZ=(NUM);
//print(" ",CMHZ); print( DMHZ); print( MHz); print( CKHZ); print( DKHZ); print( kHz); print( CHZ); print( DHZ);
//print(" ", CMHZ,DMHZ,MHz,CKHZ,DKHZ,kHz,CHZ,DHZ);
DATA1 = char(CMHZ *16 + DMHZ);
DATA2 = char(MHz *16 + CKHZ);
DATA3 = char(DKHZ *16 + kHz);
DATA4 = char(CHZ *16 + DHZ);
DATA5 = char(01); //codice comando " set frequency"
myPort.write(DATA1); myPort.write(DATA2); myPort.write(DATA3); myPort.write(DATA4); myPort.write(char(01));
// print(" ",DATA1,DATA2,DATA3,DATA4,DATA5);
}
post scriptum:
Se non servono due caratteri BCD per byte, si può dividere per potenze di 256 invece che di 10.
4 messaggi
• Pagina 1 di 1
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



