سلام
من یه پروژه 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); }
دیدگاه