سلام
من از 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 هم وقتی یک نفر سوالی میپرسه ، یه عده به اصطلاح کارشناس میان و به جای جواب دادن ، فلسفه بافی میکنن.


دیدگاه