سلام من یه پروژه ای دارم که توش از ارتباط سریال استفاده کردم
و از دستور get برای دریافت اطلاعات استفاده کردم
و همون طور که میدونید برنامه وقتی به این دستور میرسه
متوقف میشه و منتظر دریافت اطلاعات میشه
مشکل من اینکه من نیاز دارم توی حلقم
دایم وضعیت یک سنسور چک بشه ولی این get
و توقف برنامه کارمو خراب کرده
و برای رفع این مشکل اومدم از وقفه سریال استفاده کردم
و طبق کدهای زیر در روتین وقفه متغیر a رو مساوی یک قرار دادم
ودر برنامم چک میکردم که هروقت a=1 بود دستور get رو بده
و اطلاعات رو بگیره ولی با این کار وضعیت دقیقا مثل قبل از انجام
این کارا شد و بازم توی اون شرط میره و پشت get گیر میکنه
نمیدونم مشکل از کجاست میشه رانمایی کنید.
با تشکر
// 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) rx_buffer_overflow=1;
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
#endif
}
// این جا گزاشتمش
a=1;
}
while(1){
if(a==1) {
gets(str,100);
a=0;
};
}
و از دستور get برای دریافت اطلاعات استفاده کردم
و همون طور که میدونید برنامه وقتی به این دستور میرسه
متوقف میشه و منتظر دریافت اطلاعات میشه
مشکل من اینکه من نیاز دارم توی حلقم
دایم وضعیت یک سنسور چک بشه ولی این get
و توقف برنامه کارمو خراب کرده
و برای رفع این مشکل اومدم از وقفه سریال استفاده کردم
و طبق کدهای زیر در روتین وقفه متغیر a رو مساوی یک قرار دادم
ودر برنامم چک میکردم که هروقت a=1 بود دستور get رو بده
و اطلاعات رو بگیره ولی با این کار وضعیت دقیقا مثل قبل از انجام
این کارا شد و بازم توی اون شرط میره و پشت get گیر میکنه
نمیدونم مشکل از کجاست میشه رانمایی کنید.
با تشکر
// 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) rx_buffer_overflow=1;
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
#endif
}
// این جا گزاشتمش
a=1;
}
while(1){
if(a==1) {
gets(str,100);
a=0;
};
}
دیدگاه