PDA

View Full Version : Uart không truyền được quá 5 kí tự lên PC


hang1988
07-09-2010, 08:51 AM
E có viết lập trình truyền thông cho Dspic truyền thông lên PC qua RS232. Nhưng bên Visual basic chỉ nhận được có 5 kí tự còn các kí tự sau đó khi truyền lên lại không nhận được. Mong mọi người hỗ trợ
Hàm truyên lên PC
void Send_Uart_1number(int Data)
{

U1TXREG=Data;
// while(!U1STAbits.TRMT)
// {;}

}
void PC_RS232_TRAN()
{
if(++time>500)
{
time=0;
Send_Uart_1number(Fout/10+'0');// Tan so dau ra
Send_Uart_1number(Fout%10+'0');
Send_Uart_1number(F/10+'0');
Send_Uart_1number(F%10+'0');
Send_Uart_1number(Time_Start/10+'0');
Send_Uart_1number(Time_Start%10+'0');
Send_Uart_1number(OVERLOAD_FLAG+'0');
Send_Uart_1number(temp_flag+'0');

}

}

Code trong visual Basic
Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = comEvReceive) Then
DataPC = MSComm1.Input
End If
Fout = Mid(DataPC, 1, 2)
F = Mid(DataPC, 3, 2)
Time_Start = Mid(DataPC, 5, 2)
Over_Temp = Mid(DataPC, 1)
Over_Load = Mid(DataPC, 8, 1)
End Sub

Các kí tự 6,7,8 thì lại ko nhận được từ chương trình Visual basic

namqn
07-09-2010, 06:16 PM
Trong hàm Send_Uart_1number() của bạn, lệnh chờ cho bộ đệm phát rỗng (tức là phát xong ký tự vừa ghi vào thanh ghi đệm) while(!U1STAbits.TRMT) {;} của bạn đã bị chú thích.

Bạn chỉ cần bỏ hai dấu chú thích trong hàm đó là được.

Thân,

hang1988
07-09-2010, 10:53 PM
Vâng! câu lệnh đó em cho vào nhưng chương trình hầu như không thoát khỏi đó. Quét LED 7 vạch nó bị mờ không sáng được. Nếu e bỏ đi thì LED 7 sáng! E ko hiểu nguyên nhân tại sao?

hang1988
07-09-2010, 11:03 PM
Thật la hài và buồn cười kinh thật đó. E hôm nay biên dịch và nạp lại thì lại ko như hôm qua! E nghĩ là do lỗi ở cổng Com rồi! E cám ơn thầy Nam