Приём данных через Сом порт
Добавлено: 13 июн 2010, 01:26
Собрал простой передатчик на базе ATmega8, который через каждую секунду передаёт данные, целостность тракта и правильность передачи информации проверял программой Terminal v1.9b - всё работает, информация принимается верно. Проблема в том, что программа написанная мной на С++ для билдера не раобтает и не хочет принимать сообщения. Вот текст программы:
программа по нажатию кнопки Button1 должна произодить считывание данных с сом порта и выводить эти данные текстовые поля Edit. При нажатии на кнопку поля заполняются различными символами, которые не меняются вне зависимости от того - включен передатчик или нет. В чём может быть дело?
На всякий случай, настройки UART со стороны контроллера:
Код: Выделить всё
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hCom = CreateFile("Com1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, 0, NULL);
if( hCom == INVALID_HANDLE_VALUE )
{
Edit1->Text = "Error";
CloseHandle(hCom);
}
else
{
DCB dcb;
GetCommState(hCom, &dcb);
dcb.BaudRate = CBR_2400;
dcb.fParity = false;
dcb.ByteSize = 8;
dcb.Parity = 1;
dcb.StopBits = 1;
SetCommState(hCom,&dcb);
DWORD feedback = 0;
char buf[20];
ReadFile(hCom, buf, sizeof(buf), &feedback, NULL);
Edit1->Text = buf[0];
Edit2->Text = buf[1];
Edit3->Text = buf[2];
Edit4->Text = buf[3];
Edit5->Text = buf[4];
Edit6->Text = buf[5];
Edit7->Text = buf[6];
Edit8->Text = buf[7];
Edit9->Text = buf[8];
Edit10->Text = buf[9];
}
CloseHandle(hCom);
}
На всякий случай, настройки UART со стороны контроллера:
Код: Выделить всё
UCSRC|=(1<<UCSZ1)|(1<<UCSZ0);
UBRRH = 0;
UBRRL=25;// задание скорости
UCSRB|=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//разрешение приёма