컴퓨터 (VB.NET)에서 직렬 연결 AT89s52로 파일을 보내야합니다.
보낸 바이트마다 마이크로 컨트롤러에서해야 할 일이 있습니다. 시간이 필요합니다. 여기
는 수신 바이트 내 C 코드의 관련 부분입니다 :8051 UART, 연속적으로 바이트 수신
SCON = 0x50;
TMOD = 0x20; // timer 1, mode 2, 8-bit reload
TH1 = 0xFD; // reload value for 9600 baud
TR1 = 1;
TI = 1;
again:
while(RI!=0)
{
P1=SBUF; // show data on led's
RI=0;
receivedBytes++;
}
if (key1==0)
{
goto exitreceive; // break receiving
}
show_lcd_received_bytes(receivedBytes);
// here is one more loop
// with different duration for every byte
goto again;
그리고 여기에 보내는 바이트 VB.NET 코드 :
For a As Integer = 1 To 10
For t As Integer = 0 To 255
SerialPort1.Write(Chr(t))
Next t
Next a
문제가 MC는 모든 후해야 할 몇 가지 일을해야한다는 것입니다 받은 바이트와 VB.NET은이를 알지 못하고 바이트를 너무 빨리 보내므로 mC에서 모든 바이트의 일부만 완료합니다 (약 10 %). VB 루프 개미에 "Sleep (20)"을 포함시킬 수는 있지만, 모든 바이트가 처리하기 위해 다른 시간이 필요하고 용납 될 수없는 느린 통신이되기 때문에 시간 낭비가 많습니다.
지금, 제 질문은 8051이 VB가 바이트를 보내거나 보내기로 결정하기 전에 읽을 수있는 UART에서 일부 사용 중 상태를 설정할 수 있는지입니다. 설명 된대로 통신을 어떻게 설정해야합니까? 동일한 결과로 mC 측에서 직렬 인터럽트로 바이트를 수신하려고합니다.
데이터를 잘 컴퓨터로 보낼 수 있기 때문에 하드웨어가 정상적으로 작동합니다.
전송 속도를 낮 춥니 다. –
통신이 제대로 작동하면 통신 속도를 낮추는 이유는 무엇입니까? –
마이크로 컨트롤러가 계속 유지할 수 없어 데이터의 90 %를 잃게되면 일반적으로 "통신이 제대로 작동합니다"라고 말하지 않습니다. –