Comunicación con un uC a través del puerto serie

Iniciado por klonner, 10 Mayo 2010, 17:08 PM

0 Miembros y 1 Visitante están viendo este tema.

klonner

Buenas, estoy intentando mandar datos entre el PC y un uC (atmel), en VB.

Primero intenté mandar un unico dato y me lo devolvia correctamente, ahora intentamos mandar 3 datos distintos y no manda (o recibe bien).

Adjunto el codigo VB

Código (vb) [Seleccionar]
Private Sub Command1_Click()

If MSComm1.PortOpen = True And Text7.Text = 3 Then
MSComm1.Output = Text1.Text
Text7.Text = Text7.Text - 1
End If

If MSComm1.PortOpen = True And Text7.Text = 2 Then
MSComm1.Output = Text3.Text
Text7.Text = Text7.Text - 1
End If

If MSComm1.PortOpen = True And Text7.Text = 1 Then
MSComm1.Output = Text4.Text
Text7.Text = Text7.Text - 1
End If

End Sub
Private Sub Command2_Click()

MSComm1.PortOpen = False
End
End Sub

Private Sub Command3_Click()

If MSComm1.PortOpen = True And Text8.Text = 3 Then
Text2.Text = MSComm1.Input
Text8.Text = Text8.Text - 1
End If

If MSComm1.PortOpen = True And Text8.Text = 2 Then
Text5.Text = MSComm1.Input
Text8.Text = Text8.Text - 1
End If

If MSComm1.PortOpen = True And Text8.Text = 1 Then
Text6.Text = MSComm1.Input
Text8.Text = Text8.Text - 1
End If

End Sub

Private Sub Command4_Click()
If MSComm1.PortOpen = True Then
MSComm1.Output = Text7.Text
End If
End Sub

Private Sub Command5_Click()
If MSComm1.PortOpen = True Then
Text8.Text = MSComm1.Input
End If
End Sub

Private Sub Form_Load()
If MSComm1.PortOpen = True Then
Command1.Enabled = False
End If

If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
Shape1.FillColor = &HFF00&
End If

End Sub


Codigo C del uC
void retardo (unsigned int n)
{
    unsigned int i,j;
    for (i=0;i<n;i++)
    {
        for(j=0;j<0xFFFF;j++)
{}
    } 
}
void main (void)
{
SCON = 0x50;   /* uart in mode 1 (8 bit), REN=1 */
TMOD = TMOD | 0x20 ;         /* Timer 1 in mode 2 */
TH1  = 0xFD;                 /* 9600 Bds at 11.059MHz */
TL1  = 0xFD;     /* 9600 Bds at 11.059MHz */
ES = 1;      /* Enable serial interrupt */
EA = 1;      /* Enable global interrupt */
TR1 = 1;   /* Timer 1 run */
   while(1);                    /* endless */
}

/**
* FUNCTION_PURPOSE: serial interrupt, echo received data.
* FUNCTION_INPUTS: P3.0(RXD) serial input
* FUNCTION_OUTPUTS: P3.1(TXD) serial output
*/
void serial_IT(void) interrupt 4
{


    if (RI==1 & count==0)

{                  
  RI = 0;
             
  count = SBUF;
 
  SBUF = count;       
  i=0;
   retardo(1);        
}

if (RI==1 & count !=0)
{
if (i==0){                  
  RI = 0;
  i++;            
  uart_data1 = SBUF;         
  SBUF = uart_data1;
  retardo(1);       
           
}
if (i==1){                
  RI = 0;
  i++;            
  uart_data2 = SBUF;
     
  SBUF = uart_data2;        
  retardo(1);           
}
       

if (i==3)
{                  
  RI = 0;
  i++;            
  uart_data3 = SBUF;
           
  SBUF = uart_data3;
  retardo(1);
  count=0;     
}
 
}

else TI = 0;        /* if emission occur */
 
}


blog personal ----> http://www.robotecnia.net