سلام.
دوستان یه مشکل کاملا عجیب برای من پیش اومده باورکنید نزدیک 2 روز تمام هست دارم کل اینترنت رو میگردم ولی جوابی پیدا نمی کنم،برای خودم هم عجیب هست،با توجه به این همه پروژه و بحث در مورد پورت سریال باز هم سوالی پیش بیاد که آدم نتونه جوابش رو پیدا کنه ،ولی خوب دیگه متاسفانه شده.
من یک میکروی ATmega32 رو به وسیله ی یک مبدل FT232 به کامپیوتر وصل کردم،اینتراپت دریافت (RX Interupt) رو هم در میکرو فعال کردم، اما فقط بعضی از کاراکترها (کاراکترهایی ثابت و مشخص ، یعنی نه اینکه گاهی اوقات کار کنن گاهی نکنن، مثل اینتر و علامت های تعجب و ...) اینتراپت میکرو رو فعال می کنند.
برای تست ، یک LED مجتمع 8 تایی رو به پورت A میکرو وصل کردم و برنامه ی زیر رو نوشتم :
rx_buffer_size در برنامه ی زیر مقدار 8 را دارد.
کد بالا کد ساده ای هست که فقط همین رو برای تست در میکرو پروگرام کردم، سمت کامپیوتر هم از سه ترمینال یکی Hyperterminal و دیگری ترمینال Codevision و آخری یک ترمینالی که خودم با VB نوشته بودم امتحان کردم،نتیجه هر سه یکی بود، به طور مثال وقتی با Hyper وصل شدم،هر یک از اعداد رو که توی صفحه می زدم هیچ اتفاقی نمی افتاد،اما وقتی که به طور مثال اینتر می زدم (یا مثلا Shift + 1) LED پنجم روشن می شد(نتیجه ی قابل انتظار) و وقتی که 8 بار پشت سر هم اینتر رو می زدم یک بار کلیه LED ها روشن می شد(نتیجه ی قابل انتظار) ولی این دو نتیجه با سایر کاراکترهای عددی و حرفی اتفاق نمی افتد.
متوجه شدم که تا کد اسکی 34 اینتراپت میکرو کار می کنه،ولی بیشتر از اون مثلا 49 که عدد یک هست رو اگر بخوای بفرستی اینتراپت میکرو فعال نمیشه!
اطلاعات تکمیلی:کریستال 12 خارجی، باوودریت 9600
یک بحث هایی در اینجا شده ولی انقدر این تاپیک موضوعات غیرمرتبط درش هست که من آخر نفهمیدم جواب گرفتن یا نه! : http://www.eca.ir/forum2/index.php?topic=28334.60
ممنون میشم دوستان اگر کمکم کنید.
دوستان یه مشکل کاملا عجیب برای من پیش اومده باورکنید نزدیک 2 روز تمام هست دارم کل اینترنت رو میگردم ولی جوابی پیدا نمی کنم،برای خودم هم عجیب هست،با توجه به این همه پروژه و بحث در مورد پورت سریال باز هم سوالی پیش بیاد که آدم نتونه جوابش رو پیدا کنه ،ولی خوب دیگه متاسفانه شده.
من یک میکروی ATmega32 رو به وسیله ی یک مبدل FT232 به کامپیوتر وصل کردم،اینتراپت دریافت (RX Interupt) رو هم در میکرو فعال کردم، اما فقط بعضی از کاراکترها (کاراکترهایی ثابت و مشخص ، یعنی نه اینکه گاهی اوقات کار کنن گاهی نکنن، مثل اینتر و علامت های تعجب و ...) اینتراپت میکرو رو فعال می کنند.
برای تست ، یک LED مجتمع 8 تایی رو به پورت A میکرو وصل کردم و برنامه ی زیر رو نوشتم :
rx_buffer_size در برنامه ی زیر مقدار 8 را دارد.
کد:
// 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; PORTA=16; delay_ms(100); PORTA=0; if (++rx_wr_index == RX_BUFFER_SIZE) { rx_wr_index=0; PORTA=255; } if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; }
متوجه شدم که تا کد اسکی 34 اینتراپت میکرو کار می کنه،ولی بیشتر از اون مثلا 49 که عدد یک هست رو اگر بخوای بفرستی اینتراپت میکرو فعال نمیشه!
اطلاعات تکمیلی:کریستال 12 خارجی، باوودریت 9600
یک بحث هایی در اینجا شده ولی انقدر این تاپیک موضوعات غیرمرتبط درش هست که من آخر نفهمیدم جواب گرفتن یا نه! : http://www.eca.ir/forum2/index.php?topic=28334.60
ممنون میشم دوستان اگر کمکم کنید.
دیدگاه