Il Novizio Inserito: 25 novembre 2004 Segnala Share Inserito: 25 novembre 2004 Ciao a tutti,sto testando la comunicazione della seriale di un pic. (pic18f452 per l'esattezza)Per fare questo ho programmato una semplice routine e vado a vedere con hyperterminal cosa ricevo,ecco qui:///////////////////////////////////SPBRG = 65; //baud rate init TXSTA = 0b00100000; //set TXEN, clear BRGH //transmit init RCSTA = 0b10010000; //set SPEN, set CREN //receive init while (1) { serialsendchar('A'); delay_ms(200); };///////////////////////////////////////la funzione serialsendchar fa così://////////////////////////////void serialsendchar (char value){ while (TXSTAbits.TRMT == 0); //wait here until trmt flag is set:tsr register is empty TXREG=value;}/////////////////////////////Il problema è che se io faccio ad esempio:serialsendchar(0x41) //0x41 è il codice ascii esadecimale per la lettera Aallora hyperterminal riceve proprio Ama se io faccio come sopra, cioèserialsendchar('A')hyperterminal mi riceve P , e così via, se mando v mi riceve 6 ecc...Io credevo che i caratteri tipo 'A', racchiusi fra apici, così come le stringhe ("stringa"), fossero memorizzati e quindi poi inviati con il codice ascii giusto, e quindi che hyperteminal li ricevesse bene.Non dovrò mica convertire nel valore hex corrispondente qualunque stringa che voglio inviare !Anche perchè io questa routine per gestire la comunicazione seriale mica me la sono inventata... l' ho trovata già fatta da un tizio che inviava stringhe tipo "\13\10 reading memory" ecc...Dov'è che sbaglio?Aiutatemi, perchè ormai lo sapete, non ci capisco una maxxa. Ciao Link al commento Condividi su altri siti More sharing options...
Matik Inserita: 25 novembre 2004 Segnala Share Inserita: 25 novembre 2004 Ciao novizio,premetto che non ci capisco niente di linguaggio C, ma dando uno sguardo veloce vedo che la lettera A la metti tra apici mentre l'esempio che menzioni riporta il messaggio chiuso tra "....".Che sia quello?Prova ma forse ho detto una castroneria.Matik Link al commento Condividi su altri siti More sharing options...
Il Novizio Inserita: 25 novembre 2004 Autore Segnala Share Inserita: 25 novembre 2004 ERRATA CORRIGE.Allora, per quanto riguarda l'invio di singoli caratteri in realtà funziona. All'inizio non mi funzionava per un problema di baudrate leggermente diversa fra pic e hyperterminal.Continua a dare problemi quando però invio una stringa.Per fare questo, dico:serialsendstring ("Ciao, gente");e la funzione è://////////////void serialsendstring (const char* text){ char i=0; while (text !=0) serialsendchar (text[i++]);}//////////////dove ricordo serialsendchar fa così://////////////////////////////void serialsendchar (char value){while (TXSTAbits.TRMT == 0); //wait here until trmt flag is set:tsr register is emptyTXREG=value;}/////////////////////////////quando vado a fare il build all mi da un warning relativo alla linea dove scrivo serialsendstring ("Ciao, gente");Warning [2066] type qualifier mismatch in assignment.Evidentemente non gli piace che quella stringa sia passata a quel puntatore di costante char.Poichè è un warning il file hex in uscita me lo dà lo stesso, e se lo testo sul pic, hyperterminal al posto di "Ciao gente" riceve una serie di caratteri strani, mentre se subito dopo la linea dove mando la stringa, invio anche un carattere singolo, allora quello lo riceve giusto.Questa cosa ancora non l'ho capita.Qualche suggerimento? Ciao. Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 25 novembre 2004 Segnala Share Inserita: 25 novembre 2004 Ciao,Quale compiltore stai usando?Nel CCS ci sono gia' istruzioni per trattare la comunicazione della porta seriale. Link al commento Condividi su altri siti More sharing options...
giacomo56 Inserita: 26 novembre 2004 Segnala Share Inserita: 26 novembre 2004 Se usi MPLAB C18 prova ad aggiungere rom cosìvoid serialsendstring (const rom char* text)come suggerito nel manuale.Ciao. Link al commento Condividi su altri siti More sharing options...
zoom Inserita: 26 novembre 2004 Segnala Share Inserita: 26 novembre 2004 Non conosco bene il C ma a naso sembra che il warning ti dica che tu stai usando un tipo di variabile al posto di un'altra. Se non ricordo male il char contiene un solo carattere mentre la stringa e' un array (o vettore) di char. Sembra quindi che tu passy un array dove la funzione si aspetta un solo carattere.ciaoRoberto Link al commento Condividi su altri siti More sharing options...
giacomo56 Inserita: 26 novembre 2004 Segnala Share Inserita: 26 novembre 2004 Ciao Roberto.In C le stringhe sono memorizzate come un array di char. Il nome dell'array è un puntatore al primo elemento, quindi passare una stringa ad una funzione che si aspetta un puntatore a char è corretto. Il warning si riferisce al type qualifier, cioè, a const.Ciao. Link al commento Condividi su altri siti More sharing options...
Il Novizio Inserita: 26 novembre 2004 Autore Segnala Share Inserita: 26 novembre 2004 Esattamente, grazie giacomo, funziona. Mi ero scordato di specificare il compilatore, ma il buon giacomo pare leggere anche nel pensiero oltre al resto.Si, mi era proprio passato di specificare rom.thank you. Link al commento Condividi su altri siti More sharing options...
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