امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل مبتدیانه در برنامه نویسی!!!
نویسنده پیام
arash_ee آفلاین
تازه وارد

ارسال‌ها: 24
موضوع‌ها: 4
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #1
مشکل مبتدیانه در برنامه نویسی!!!
سلام خدمت تموم مهندسین و حضار محترم
میدونم خیلی مبتدی و ابتداییه اما خب سوال نیمی از علمه، منو ببخشید که اینا رو میپرسم.
من میخوام از وقفه USART استفاده کنم و به محض رخ دادن وقفه( که همون دریافت داده جدیده) یه سری محاسبات انجام بشه و نتایج با کد مشخصه خودشون روی پورتهایی که موازی به دستگاه دیگه وصل اند ارسال بشه. سوال من اینه که من این تابع وقفه رو تو حلقه (1) while باید بزارم که ازش استفاده کنم یا اینکه فرقی نداره که کجا باشه؟؟ دستوراتی که محاسبات رو انجام میدن چی؟ اونا رو تو اون حلقه قرار بدم؟؟ اینا گیجم کرده اگه راهنماییم کنین ممنون میشم
با زبان C میخوام بنویسم
(آخرین ویرایش در این ارسال: ۲۷-آذر-۱۳۹۰, ۰۱:۱۹:۱۳، توسط arash_ee.)
۲۷-آذر-۱۳۹۰, ۰۰:۵۲:۴۶
ارسال‌ها
پاسخ
sajadgh آفلاین
كاربر دو ستاره
**

ارسال‌ها: 90
موضوع‌ها: 7
تاریخ عضویت: مرداد ۱۳۸۸

تشکرها : 207
( 225 تشکر در 88 ارسال )
ارسال: #2
RE: مشکل مبتدیانه در برنامه نویسی!!!
(۲۷-آذر-۱۳۹۰, ۰۰:۵۲:۴۶)arash_ee نوشته است: سلام خدمت تموم مهندسین و حضار محترم
میدونم خیلی مبتدی و ابتداییه اما خب سوال نیمی از علمه، منو ببخشید که اینا رو میپرسم.
من میخوام از وقفه USART استفاده کنم و به محض رخ دادن وقفه( که همون دریافت داده جدیده) سه سری محاسبات انجام بشه و نتایج با کد مشخصه خودشون روی پورتهایی که موازی به دستگاه دیگه وصل اند ارسال بشه. سوال من اینه که من این تابع وقفه رو تو حلقه (1) while باید بزارم که ازش استفاده کنم یا اینکه فرقی نداره که کجا باشه؟؟ دستوراتی که محاسبات رو انجام میدن چی؟ اونا رو تو اون حلقه قرار بدم؟؟ اینا گیجم کرده اگه راهنماییم کنین ممنون میشم

بگین با چه زبانی برنامه مینویسین تا بشه با یه مثال راهنمایتون کرد
ولی در کل : تابع وقفه خارج از وایل نوشته میشه
و محاسبات هم میتون داخل وقفه باشه هم بیرون (داخل وقفه ساده ترین راه حله)

خدایا ، در ۲ راهی زندگی ام تابلوی راهت را محکم قرار بده

نکند که با نسیمی راهم را کج کنم
۲۷-آذر-۱۳۹۰, ۰۱:۰۰:۱۷
ارسال‌ها
پاسخ
arash_ee آفلاین
تازه وارد

ارسال‌ها: 24
موضوع‌ها: 4
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #3
RE: مشکل مبتدیانه در برنامه نویسی!!!
(۲۷-آذر-۱۳۹۰, ۰۱:۰۰:۱۷)sajadgh نوشته است:
(۲۷-آذر-۱۳۹۰, ۰۰:۵۲:۴۶)arash_ee نوشته است: سلام خدمت تموم مهندسین و حضار محترم
میدونم خیلی مبتدی و ابتداییه اما خب سوال نیمی از علمه، منو ببخشید که اینا رو میپرسم.
من میخوام از وقفه USART استفاده کنم و به محض رخ دادن وقفه( که همون دریافت داده جدیده) سه سری محاسبات انجام بشه و نتایج با کد مشخصه خودشون روی پورتهایی که موازی به دستگاه دیگه وصل اند ارسال بشه. سوال من اینه که من این تابع وقفه رو تو حلقه (1) while باید بزارم که ازش استفاده کنم یا اینکه فرقی نداره که کجا باشه؟؟ دستوراتی که محاسبات رو انجام میدن چی؟ اونا رو تو اون حلقه قرار بدم؟؟ اینا گیجم کرده اگه راهنماییم کنین ممنون میشم

بگین با چه زبانی برنامه مینویسین تا بشه با یه مثال راهنمایتون کرد
ولی در کل : تابع وقفه خارج از وایل نوشته میشه
و محاسبات هم میتون داخل وقفه باشه هم بیرون (داخل وقفه ساده ترین راه حله)
یادم رفت بگم، با زبان C
۲۷-آذر-۱۳۹۰, ۰۱:۰۲:۳۶
ارسال‌ها
پاسخ
parviz2012 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 171
موضوع‌ها: 16
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4
( 98 تشکر در 74 ارسال )
ارسال: #4
RE: مشکل مبتدیانه در برنامه نویسی!!!
در بیرون while نوشته میشه
باید قبلش وقفه کلی و وقفه usart رو فعال کنی
کد:
interrupt [12] void usart_int(void)
{
دستورات داخل وقفه
}

گمان مبر که به پایان رسیده کار جهان / هزار باده ناخورده در رگ تاک است
(آخرین ویرایش در این ارسال: ۲۷-آذر-۱۳۹۰, ۰۱:۱۸:۴۵، توسط parviz2012.)
۲۷-آذر-۱۳۹۰, ۰۱:۱۱:۵۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : h0x00i
sajadgh آفلاین
كاربر دو ستاره
**

ارسال‌ها: 90
موضوع‌ها: 7
تاریخ عضویت: مرداد ۱۳۸۸

تشکرها : 207
( 225 تشکر در 88 ارسال )
ارسال: #5
RE: مشکل مبتدیانه در برنامه نویسی!!!
شاید این کمکت کنه

کد:
#include <mega32.h>
#include <delay.h>


#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
#define RX_BUFFER_SIZE 8
//////////////////////////////////////////////////////////////////////////
char rx_buffer[RX_BUFFER_SIZE];
unsigned char rx_wr_index;
//////////////////////////////////////////////////////////////////////////
// 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)
           {
             برنامه مربوط به محاسبات
           }
       }
//////////////////////////////////////////////////////////////////////////
void main(void)
       {
        UCSRB=0x90;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x33;
        #asm("sei")
        while(1)
            {
                برنامه اصلي
            }
       }
//////////////////////////////////////////////////////////////////////////

خدایا ، در ۲ راهی زندگی ام تابلوی راهت را محکم قرار بده

نکند که با نسیمی راهم را کج کنم
(آخرین ویرایش در این ارسال: ۲۷-آذر-۱۳۹۰, ۰۱:۱۶:۳۲، توسط sajadgh.)
۲۷-آذر-۱۳۹۰, ۰۱:۱۴:۵۲
ارسال‌ها
پاسخ
تشکر شده توسط : arash_ee
arash_ee آفلاین
تازه وارد

ارسال‌ها: 24
موضوع‌ها: 4
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #6
RE: مشکل مبتدیانه در برنامه نویسی!!!
ممنون از این برنامه ای که گذاشتین. میشه کمی در موردش توضیح بدین؛ این #DEFINE های اول برنامه متوجه نمیشم واسه چی هستن اگه توضیح بدین ممنون میشم

(آخرین ویرایش در این ارسال: ۳۰-آذر-۱۳۹۰, ۰۲:۰۱:۴۲، توسط arash_ee.)
۲۹-آذر-۱۳۹۰, ۱۸:۴۹:۰۸
ارسال‌ها
پاسخ
sajadgh آفلاین
كاربر دو ستاره
**

ارسال‌ها: 90
موضوع‌ها: 7
تاریخ عضویت: مرداد ۱۳۸۸

تشکرها : 207
( 225 تشکر در 88 ارسال )
ارسال: #7
RE: مشکل مبتدیانه در برنامه نویسی!!!
FE بیت چهارم رجیستر UCSRA : در صورتی که قالب داده دریافتی صحیح نباشه یکه میشه
UPE بیت دوم رجیستر UCSRA : درصورتی که خطای پریتی بوجود بیاد یک میشه
DOR بیت سوم رجیستر UCSRA : اگه یک باشه یعنی خطای OVER RUN رخ داده
UDRE بیت پنجم رجیستر UCSRA : وقتی یک باشه یعنی بافر ارسال آماده دریافت اطلاعات جدیدِ ، البته اینجا کاربرد نداره باید پاک شه
RXC بیت هفتم رجیستر UCSRA : در صورتی که در بافر دریافتی داده وجود داشته باشه یک میشه
این دو مورد آخر کاربرد نداره توی این کدی گذاشتم (این قسمتی از برنامه هست که جایی استفاده کرده بودم قسمتهای اضافی رو پاک کردم اینجا گذاشتم که این دو خط + rx_buffer و RX_buffer که اضافیه و باید پاک شه)

توی خط
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
چک شده اگه خطای رخ نداده از داده دریافتی استفاده بشه (اعتبار سنجی داده ورودی)

اون دیفیاین ها هم برای راحتی کار برنامه نویسی به این صورت که شماره همیه بیتهای ذکر شده توی هدر فایل میکرو هست و عدد به همون تعداد به سمت چپ شیف خورده تا بیت مورد نظر بدست بیاد. میشد اون دیفاین هارو تعریف نکرد و بجاش جای خط زیر
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
از این خط استفاده کرد
if ((status & 0x1C )==0)

خدایا ، در ۲ راهی زندگی ام تابلوی راهت را محکم قرار بده

نکند که با نسیمی راهم را کج کنم
۲۹-آذر-۱۳۹۰, ۲۰:۰۶:۳۹
ارسال‌ها
پاسخ
تشکر شده توسط : sharin, h0x00i, علي برقي
arash_ee آفلاین
تازه وارد

ارسال‌ها: 24
موضوع‌ها: 4
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #8
RE: مشکل مبتدیانه در برنامه نویسی!!!
من با ویزارد کدویژن تنظیمات Usart رو انجام دادم کدش این شده اما تعجب اینه که چرا آکولادی که باز کرده رو نبسته:
[code]
iinterrupt [USART0_RXC] void usart0_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer0[rx_wr_index0++]=data;
#if RX_BUFFER_SIZE0 == 256
// special case for receiver buffer size=256
if (++rx_counter0 == 0)
{
#else
if (rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
if (++rx_counter0 == RX_BUFFER_SIZE0)
{
rx_counter0=0;
#endif
rx_buffer_overflow0=1;
}
}
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART0 Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0++];
#if RX_BUFFER_SIZE0 != 256
if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#endif
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
}
#pragma used-
#endif
[\code]
(آخرین ویرایش در این ارسال: ۳۰-آذر-۱۳۹۰, ۰۲:۵۳:۲۰، توسط arash_ee.)
۳۰-آذر-۱۳۹۰, ۰۲:۰۷:۵۶
ارسال‌ها
پاسخ
sajadgh آفلاین
كاربر دو ستاره
**

ارسال‌ها: 90
موضوع‌ها: 7
تاریخ عضویت: مرداد ۱۳۸۸

تشکرها : 207
( 225 تشکر در 88 ارسال )
ارسال: #9
RE: مشکل مبتدیانه در برنامه نویسی!!!
اشتباه میکنی دوباره تکرار کن

خدایا ، در ۲ راهی زندگی ام تابلوی راهت را محکم قرار بده

نکند که با نسیمی راهم را کج کنم
۳۰-آذر-۱۳۹۰, ۰۲:۴۹:۱۶
ارسال‌ها
پاسخ
arash_ee آفلاین
تازه وارد

ارسال‌ها: 24
موضوع‌ها: 4
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #10
RE: مشکل مبتدیانه در برنامه نویسی!!!
منم تعجب کردم و فکر کردم که اشتباه میکنم اما وقتی آکولاد رو میبندم پیغام خطا میده، من اشتباه نمیکنم، برنامه همینه، عینا کپی پیست کردم. حالا میشه بگید محاسباتم رو کجا باید اضافه کنم؟ و اصلا این همه برنامه واسه چیه؟
۳۰-آذر-۱۳۹۰, ۰۳:۰۰:۰۸
ارسال‌ها
پاسخ
علي برقي آفلاین
كاربر دو ستاره
**

ارسال‌ها: 209
موضوع‌ها: 25
تاریخ عضویت: اردیبهشت ۱۳۹۰

تشکرها : 477
( 406 تشکر در 166 ارسال )
ارسال: #11
RE: مشکل مبتدیانه در برنامه نویسی!!!
سلام آقا آرش
ميتوني كل برنامتو بزاري
احتمالا توي بقيه برنامت يه آكولد زيادي گذاشتي.

من تو را دوست دارم.. دیگری تو را دوست دارد.. دیگری دیگری را دوست دارد.. و این چنین است که ما تنهاییم..
۳۰-آذر-۱۳۹۰, ۱۴:۵۱:۰۸
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مشکل در پاک کردن برنامه میکرو Salam7 1 398 ۲۹-بهمن-۱۴۰۰, ۲۲:۵۰:۴۴
آخرین ارسال: 1نفر
  مشکل برنامه تایمر با بیسکام soy1345 7 2,026 ۲۲-فروردین-۱۳۹۸, ۲۰:۴۸:۰۶
آخرین ارسال: 1نفر
Question [سوال] کمک در برنامه نویسی دور موتور خودرو HPower 6 2,592 ۲۵-آبان-۱۳۹۷, ۲۲:۰۳:۵۷
آخرین ارسال: alimogmov
  راهنمایی برای حل مشکل برنامه در بسکام fedagh 2 3,420 ۱۲-دى-۱۳۹۵, ۱۸:۳۰:۵۹
آخرین ارسال: fedagh
  برنامه نویسی AVR به روش فلوچارتی با نرم افزار FLOWCODE AVR V3 koorosh.k 8 12,641 ۲۴-آذر-۱۳۹۵, ۲۲:۴۶:۰۸
آخرین ارسال: 1نفر
  مشکل در برنامه code vision 3.12 ali74342 10 7,232 ۲۲-مرداد-۱۳۹۵, ۰۰:۱۶:۰۷
آخرین ارسال: shima.rrr
  سوالهای برنامه نویسی با کامپایلر BASCOM EBKA 242 157,509 ۱۸-خرداد-۱۳۹۵, ۲۰:۱۸:۲۴
آخرین ارسال: hassan721
Exclamation [فوری] مشکل نوشتن برنامه AVR با تایمر مد مقایسه dr.mohammad 7 4,184 ۲۹-دى-۱۳۹۴, ۱۳:۲۸:۴۹
آخرین ارسال: sharin
  برنامه نویسی بیسکام soy1345 17 13,270 ۲۳-مرداد-۱۳۹۴, ۱۷:۱۷:۵۶
آخرین ارسال: MN-123
  آموزش برنامه نویسی ربات مسیریاب kamran0080 3 10,199 ۲۶-تير-۱۳۹۴, ۱۷:۲۵:۳۶
آخرین ارسال: sona2

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS