реклама на сайте
подробности

 
 
> USART Mega8, не могу принять
zeleboba
сообщение Mar 14 2006, 14:35
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-02-06
Из: Сибирь - г.Барнаул
Пользователь №: 13 892



Вобщем не могу понять причину глюка..... Передаю 4 байта контроллеру, получаю ответ от МК:


RX_BUFFER_SIZE 4

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
unsigned int addr;
int temp;

status=UCSRA;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
data=UDR;

if(data == '*')read_cnt = 0; // synh; любая моя передача начинается с '*' и имеет длину 4 байта
rx_buffer[read_cnt]=data;
read_cnt++;

if(read_cnt == RX_BUFFER_SIZE)
{

read_cnt = 0;
if(rx_buffer[0] == '*')
{

switch (rx_buffer[1]){
case 1:
addr = rx_buffer[2];
addr = (addr << 8)|rx_buffer[3];
putchar('*');
putchar(1);
data = read_byte_eeprom(addr);
putchar(data);
data = read_byte_eeprom(addr+1);
putchar(data);
break;
.......
}
....
}
}
}

Вот примерный кусок передающей программы (код инициализации порта не привожу):

void __fastcall TMainForm::Button1Click(TObject *Sender)
{
char buf[4];
DWORD i;
int temp;
buf[0] = '*'; // начало посылки
buf[1] = 1;
buf[2] = 0;
buf[3] = 42; // ГЛЮКККККК
WriteFile(port_ptr, &buf, 4, &i, NULL);
ReadFile(port_ptr, &buf, 4, &i, NULL);
// ВОБЩЕМ ЕСЛИ ПЕРЕДАВАТЬ buf[3] РАВНЫЙ 0x2A или 0x12A или 0x22A и т д, то возникает глюк
// именно: USART не принимает данный байт, принимает 0й ('*'), принимает 1й (1), принимает 2й, и всё! хотя с другими числами всё работает....всё передаётся и принимается ответ от МК!
temp = (buf[2]);
temp = temp << 8;
temp = temp | (buf[3]);
ShowMessage(IntToStr(i));
if(i !=0)ShowMessage(IntToStr(temp/10)+"."+IntToStr(temp%10));
}
//---------------------------------------------------------------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 06:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016