سلام
من یه پروژه RS485 دارم . که یه اسلیو و یه مستر داره .
من تونستم از طریق دستور gets به آسونی مقادیر فرستاده شده از اسلیو را بخونم .
اما این نحو خوندن زیاد صحیح نیست و درست تر اینه که بشه از طریق اینتراپت مقادیر دریافت شده را خوند. سعی کردم از ویزارد خود کدویژن استفاده کنم و مقادیر را بخونم . اما دریافتی ها صحیح نیستن .مقادیر عدد هستند . که این اعداد درست نمایش داده نمی شن . گاهی فقط دهگان عدد میاد گاهی فقط یکان گاهی هم کدهای اسکی نامربوط .
از دوستان کسی کد بهتری برای خوندن ورودی ها توسط اینتراپت سراغ داره؟
من یه پروژه RS485 دارم . که یه اسلیو و یه مستر داره .
من تونستم از طریق دستور gets به آسونی مقادیر فرستاده شده از اسلیو را بخونم .
کد:
while (1)
{
gets(a,10);
lcd_clear();
lcd_puts(a);
}
};
اما این نحو خوندن زیاد صحیح نیست و درست تر اینه که بشه از طریق اینتراپت مقادیر دریافت شده را خوند. سعی کردم از ویزارد خود کدویژن استفاده کنم و مقادیر را بخونم . اما دریافتی ها صحیح نیستن .مقادیر عدد هستند . که این اعداد درست نمایش داده نمی شن . گاهی فقط دهگان عدد میاد گاهی فقط یکان گاهی هم کدهای اسکی نامربوط .
کد:
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0)
{
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
#endif
rx_buffer_overflow=1;
}
}
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(rx_buffer);
// gets(a,10);
// lcd_puts(a);
}











دیدگاه