Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

comunicazione seriale in HI-TECH C ricevere 5 caratteri

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] comunicazione seriale in HI-TECH C ricevere 5 caratteri

Messaggioda Foto UtenteGrio » 3 feb 2019, 18:57

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 .
Avatar utente
Foto UtenteGrio
0 2
 
Messaggi: 26
Iscritto il: 20 ott 2012, 18:07

0
voti

[2] Re: comunicazione seriale in HI-TECH C ricevere 5 caratteri

Messaggioda Foto UtenteStefDrums » 6 giu 2019, 9:08

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:
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!
Avatar utente
Foto UtenteStefDrums
240 1 6 9
Stabilizzato
Stabilizzato
 
Messaggi: 358
Iscritto il: 20 feb 2013, 14:15

0
voti

[3] Re: comunicazione seriale in HI-TECH C ricevere 5 caratteri

Messaggioda Foto Utentemarioursino » 30 giu 2019, 11:27

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.
Avatar utente
Foto Utentemarioursino
3.672 3 9 13
G.Master EY
G.Master EY
 
Messaggi: 1295
Iscritto il: 5 dic 2009, 4:32

0
voti

[4] Re: comunicazione seriale in HI-TECH C ricevere 5 caratteri

Messaggioda Foto UtenteMarcoD » 30 giu 2019, 16:28

Concordo con quanto scritto da Foto Utentemarioursino, 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.
O_/

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.
Avatar utente
Foto UtenteMarcoD
6.259 4 8 13
Master EY
Master EY
 
Messaggi: 2464
Iscritto il: 9 lug 2015, 16:58
Località: Torino


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti