Home
Accesso / Registrazione
 di 

Comunicazione seriale tra Labview ed i microcontrollori 8051

Comunicazione seriale tra Labview ed i microcontrollori 8051

Karl sta lavorando su un progetto di ricerca universitario usando Labview, ma non ha alcuna precedente esperienza con la programmazione dei controllori embedded e avrebbe bisogno di un consiglio.

In particolare, vorrebbe consigli per stabilire una comunicazione tra il microcontrollore 8051 e LabVIEW.

Karl vuole usare LabVIEW per leggere l'output seriale dalla ISR-Driven Serial I/O V2 (http://www.keil.com/download/docs/200.asp) usato su un microcontrollore C8051F300.

Il codice C compila senza errori o avvisi:

void main (void)
{
com_initialize ();              /* initialize interrupt driven serial I/O */
com_baudrate (1200);            /* setup for 1200 baud */

EA = 1;                         /* Enable Interrupts */

printf ("Interrupt-driver Serial I/O Example\r\n\r\n");

while (1)
  	{
  unsigned char c;

 		 printf ("Press a key.\r\n");
  		c = getchar ();
 		 printf ("\r\n");
  		printf ("You pressed '%c'.\r\n\r\n", c);
 	 }
}

Il programma sembra bloccarsi prima della riga printf e Karl pensa che possa essere un problema con com_initialize() o com_baudrate.
L'unico cambiamento che ha fatto è che ha cambiato XTAL (vedi il codice qui sotto).

La funzione originale:

void com_baudrate ( unsigned baudrate)
{
/*------------------------------------------------
Clear transmit interrupt and buffer.
------------------------------------------------*/
TI = 0;             /* clear transmit interrupt */
t_in = 0;           /* empty transmit buffer */
t_out = 0;

/*------------------------------------------------
Set timer 1 up as a baud rate generator.
------------------------------------------------*/
TR1 = 0;            /* stop timer 1 */
ET1 = 0;            /* disable timer 1 interrupt */

PCON |= 0x80;       /* 0x80=SMOD: set serial baudrate doubler */

TMOD &= ~0xF0;      /* clear timer 1 mode bits */
TMOD |= 0x20;       /* put timer 1 into MODE 2 */

TH1 = (unsigned char) (256 - (XTAL / (16L * 12L * baudrate)));

TR1 = 1;            /* start timer 1 */
}

Cambiata seconda con l'ultima riga:

TH1 = (unsigned char) (256 - (24500000 / (16L * 12L * baudrate)));

Gli potete dare una mano?

Stefan propone di:

prova a settare TI

TI=1;

Prima della chiamata printf(...) dovrebbe funzionare

Hans dice:

Dovresti verificare se questo baudrate può essere usato con questa frequenza di oscillazione del quarzo. Fai una doppia verifica del codice C51 che si occupa del calcolo del baudrate.

Barry:

Ecco alcuni suggerimenti:
1. Compila il codice, carica e lancia il simulatore. Stop e verifica il valore del registro TH1, è quello che ti aspetti?
2. Guarda la finestra con i dati della porta seriale, i valori sono corretti?
Usa il SIN vtreg e verifica se viene eseguito correttamente.
3. 24.5 MHz sembra un po troppo alto per un baudrate di 1200, sei sicuro del baudrate?
4. Puoi usare il simulatore per verificare la porta seriale sul tuo PC. Collega un secondo PC con Labview ed esegui i vari test.
5. Collega un oscilloscopio per verificare il baurate della porta seriale. Questo è il velo valore di baudrate!

Alla fine TUTTO FUNZIONA!
Ho corretto il baudrate e mi sono assicurato che TH1 avesse il valore che mi aspettavo.
Grazie,
Karl

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Lab82

L'articolo è utile, non

L'articolo è utile, non tanto per la parte di comunicazione seriale (connettere labview all'8051 poteva anche solo essere: nel software labview cè il blocchetto porta-seriale-rs232) quanto per la dettagliata ricerca guasti, fondamentale in una gestione ottimale del debug.

ritratto di pinolatino

8051

No, l'8051 no!! lasciatelo a quei sfigatissimi e frustrati insegnanti di laboratorio dell'itis!!!!!

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 8 utenti e 61 visitatori collegati.

Ultimi Commenti