پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
سلام
من فهمیدم که سخت افزارم مشکل نداره و همه چی درسته فقط مشکل از وقفه دریافت USART هست.
کسی میتونه یکم توضیح بده؟ وقتی با codewizard وقفه دریافت رو تنظیم میکنیم یک سری کد بهمون میده.
من میخوام وقتی وقفه میاد یک رشته دریافت کنم و با استفاده از اون رشته یه سری کارا انجام بدم. و همه این کارا هم توی همون وقفه انجام بشه و توی برنامه اصلی یه کار دیگه انجام میشه..
سوال اول:
برای جی متغیرهارو انجوری تعریف کرده؟
سوال دوم:
راجع به این قسمت یکم توضیح بدین و اینکه data رو کجا باید بخونم؟
و اینکه آکولادی که برای تابع وقفه باز شده چرا بسته نشده؟!
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;
}
}
}
سوال سوم:
تابع gerchar کجا کاربرد داره؟ و آیا توی تابع وقفه هست یا نه؟!
سلام
من فهمیدم که سخت افزارم مشکل نداره و همه چی درسته فقط مشکل از وقفه دریافت USART هست.
کسی میتونه یکم توضیح بده؟ وقتی با codewizard وقفه دریافت رو تنظیم میکنیم یک سری کد بهمون میده.
من میخوام وقتی وقفه میاد یک رشته دریافت کنم و با استفاده از اون رشته یه سری کارا انجام بدم. و همه این کارا هم توی همون وقفه انجام بشه و توی برنامه اصلی یه کار دیگه انجام میشه..
سوال اول:
برای جی متغیرهارو انجوری تعریف کرده؟
#if RX_BUFFER_SIZE <= 256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif]
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif]
سوال دوم:
راجع به این قسمت یکم توضیح بدین و اینکه data رو کجا باید بخونم؟
و اینکه آکولادی که برای تابع وقفه باز شده چرا بسته نشده؟!
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;
}
}
}
سوال سوم:
تابع gerchar کجا کاربرد داره؟ و آیا توی تابع وقفه هست یا نه؟!
دیدگاه