سلام
من از arduino uno r3 استفاده میکنم
میخام هر زمان که پورت سریال یک کاراکتر دریافت کرد ، کاراکتر دریافتی رو پردازش کنم .
به کد زیر توجه کنید . این پروژه در کدویژن نوشته شده با میکروی atmega88 . یک LED به پایه PD2 وصل شده . اگر از طریق پورت سریال کاراکتر 1 دریافت شود ، LED روشن خواهد شد و اگر کاراکتر 0 دریافت شود ، LED خاموش میشود.
ولی نوشتن همچین کدی در arduino غیر ممکن است . چون در arduino وقفه سریال در اختیار خود هسته arduino است و اگر کاراکتری دریافت شود توسط خود arduino پردازش خواهد شد و به یک بافر منتقل خواهد شد و توسط تابع Serial.available و Serial.read در دسترس برنامه نویس قرار میگیرد . ( چقدر مزخرفه )
آیا راهی هست که بشه مثل codevision در arduino خود برنامه نویس کنترل وقفه سریال رو در اختیار بگیره ؟؟؟؟؟؟
فروم ها رو بررسی کردم . این مشکل برای خیلی ها پیش اومده بود . ولی راه حلی نداشت . در فروم خود arduino هم وقتی یک نفر سوالی میپرسه ، یه عده به اصطلاح کارشناس میان و به جای جواب دادن ، فلسفه بافی میکنن.
من از arduino uno r3 استفاده میکنم
میخام هر زمان که پورت سریال یک کاراکتر دریافت کرد ، کاراکتر دریافتی رو پردازش کنم .
به کد زیر توجه کنید . این پروژه در کدویژن نوشته شده با میکروی atmega88 . یک LED به پایه PD2 وصل شده . اگر از طریق پورت سریال کاراکتر 1 دریافت شود ، LED روشن خواهد شد و اگر کاراکتر 0 دریافت شود ، LED خاموش میشود.
کد:
#include <mega88pa.h> //------------------------------------------------------------------------------------ #define FRAMING_ERROR 0x10 #define PARITY_ERROR 0x04 #define DATA_OVERRUN 0x08 #define turn_led_off PORTD &= 0xFB #define turn_led_on PORTD |= 0x04 //------------------------------------------------------------------------------------ interrupt [USART_RXC] void usart_rx_isr(void) { uint8_t status,data; status=UCSR0A; data=UDR0; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { if ( data == '1' ) turn_led_on ; if ( data == '0' ) turn_led_off ; } } //------------------------------------------------------------------------------------ void main(void) { DDRD=0x06; UCSR0B=0x98; UCSR0C=0x86; UBRR0L=0x05; turn_led_off ; #asm("sei") while ( 1 ) { } }
آیا راهی هست که بشه مثل codevision در arduino خود برنامه نویس کنترل وقفه سریال رو در اختیار بگیره ؟؟؟؟؟؟
فروم ها رو بررسی کردم . این مشکل برای خیلی ها پیش اومده بود . ولی راه حلی نداشت . در فروم خود arduino هم وقتی یک نفر سوالی میپرسه ، یه عده به اصطلاح کارشناس میان و به جای جواب دادن ، فلسفه بافی میکنن.
دیدگاه