اطلاعیه

Collapse
No announcement yet.

آموزش زبان سی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : آموزش زبان سی

    دستت درد نکنه لطف کردی

    دیدگاه


      پاسخ : آموزش زبان سی

      دوستان کسی میدونه این خطا از چیه ؟ oo: oo: oo:

      Incomplete type is not allowed

      تو برنامه codevision این خطا رو نشون میده و وقتی روش کلیک میکنم اون سطری رو نشون میده که قبل از تابع main یه زیر تابع معرفی شده ( به کد زیر اشاره میکنه)


      کد:
      void play(void);
      please help :angry: :angry:

      دیدگاه


        پاسخ : آموزش زبان سی

        نوشته اصلی توسط hamidchi
        دوستان کسی میدونه این خطا از چیه ؟ oo: oo: oo:

        Incomplete type is not allowed

        تو برنامه codevision این خطا رو نشون میده و وقتی روش کلیک میکنم اون سطری رو نشون میده که قبل از تابع main یه زیر تابع معرفی شده ( به کد زیر اشاره میکنه)


        کد:
        void play(void);
        please help :angry: :angry:
        سلام

        ارور ها معمولا یک خط بالا یا چند خط بالاتر اتفاق می افتد
        شاید مشکل داخل خود زیر تابع باشد

        دیدگاه


          پاسخ : آموزش زبان سی

          سلام دوستان
          کار این دستور چیه
          کد:
           DDRB=(1<<DDRB.0)|(1<<DDRB.2)|(1<<DDRB.3) ;
          ممنون.

          اگر شاد بودی آرام بخند تا غم بیدار نشود

          دیدگاه


            پاسخ : آموزش زبان سی

            با سلام
            نوشته اصلی توسط Ghasede del
            سلام دوستان
            کار این دستور چیه
            کد:
             DDRB=(1<<DDRB.0)|(1<<DDRB.2)|(1<<DDRB.3) ;
            ممنون.
            اینجا بیتهای 0 و 2 و 3 رجیستر DDRB یک میشن.

            دیدگاه


              پاسخ : آموزش زبان سی

              اینجا بیتهای 0 و 2 و 3 رجیستر DDRB یک میشن.
              سلام
              ممنون که پاسخ میدین
              CodeVisionAVR V2.04.4a نصب کردم و برنامه های ساده ای برای
              یادگیری می نویسم وقتی بصورت مستقیم عدد دهی میکنم.
              بیتهای 0 و 2 و 3 رجیستر DDRB یک میشن اما از دستور اشاره شده
              استفاده میکنم این اتفاق نمی افته آیا این دستور استاندارده و باید روی
              همه کامپایلرها جواب بده. :question:

              اگر شاد بودی آرام بخند تا غم بیدار نشود

              دیدگاه


                پاسخ : آموزش زبان سی

                نوشته اصلی توسط Ghasede del
                سلام
                ممنون که پاسخ میدین
                CodeVisionAVR V2.04.4a نصب کردم و برنامه های ساده ای برای
                یادگیری می نویسم وقتی بصورت مستقیم عدد دهی میکنم.
                بیتهای 0 و 2 و 3 رجیستر DDRB یک میشن اما از دستور اشاره شده
                استفاده میکنم این اتفاق نمی افته آیا این دستور استاندارده و باید روی
                همه کامپایلرها جواب بده. :question:
                واقعیتش اول که دیدم ، حدس زدم کار نکنه اما گفتم شاید تست کردید و جواب گرفتید و من هم با توجه به ماهیتش گفتم که اینکار رو میکنه!

                اما نه این استاندارد نیست و اگه هم قابل کامپایل کردن باشه ، فقط تو کدویژن کامپایل میشه.

                درستش اینه که اینطور نوشته بشه :

                کد:
                DDRB|=(1<<DDB0)|(1<<DDB2)|(1<<DDB3);

                دیدگاه


                  پاسخ : آموزش زبان سی

                  DDRB|=(1<<DDB0)|(1<<DDB2)|(1<<DD B3);
                  به این صورت خطا میگیره :eek: عجیبه!

                  اگر شاد بودی آرام بخند تا غم بیدار نشود

                  دیدگاه


                    پاسخ : آموزش زبان سی

                    نوشته اصلی توسط Ghasede del
                    به این صورت خطا میگیره :eek: عجیبه!
                    خب حق داره!
                    DDRB0 تعریف نشدست، DDRB.0 معناداره!
                    ببینید، اگه میخوایید برنامه نویسی رو خوب و کاربردی یادبگیرید باید ببینید فلسفه هرچیزی چیه، هر دو کد زیر بیت های 0 و 1 و 2 از رجیستر DDRB رو یک میکنند:
                    کد:
                    [ltr]
                    DDRB =(1<<0) | (1<<1) | (1<<2);
                    DDRB |=(1<<0) | (1<<1) | (1<<2);
                    [/ltr]
                    و اما توضیح این که:
                    اولش خدمت عزیزان عرض کنم که این توضیحات ممکنه خیلی ابتدایی به نظر برسند، اما نکاتی هستند که یک برنامه نویس حرفه ای رو هم گاهی ممکنه به اشتباه بندازه!

                    کد اولی میاد و 0بیت های و 1 و 2 از رجیستر DDRB رو یک میکنه اما الباقی بیت ها رو صفر میکنه! که این کار درست نیست، چرا که شما ممکنه در آینده برنامه ای بنویسید که کمی پیچیده بشه و یا اونو به تدریج تکمیل کنید، حالا فرض کنید قبلا تو برنامتون پین B.3 رو خروجی تعریف کردید- DDRB.3=1 حالا اگر کد دوم رو به برنامتون اضافه کنید میبینید برنامه درست عمل نمیکنه چرا که الان پین B.3 شده ورودی(DDRB.3 رو صفر کردید)
                    اما کد دوم به بقیه بیت های این رجیستر کاری نداره و فقط میاد و بیت های 0 و 1 و 2 از رجیستر DDRB رو یک میکنه که شیوه صحیح همینه
                    از این دست نکات و موارد تو برنامه نویسی زیاد داریم!
                    یک مورد دیگه این که زیاد به پاسخ های پروتئوس مطمئن نباشید چرا که گاهی اشتباه جواب میده، برنامه هاتون رو حتما عملی تست کنید، چرا که همیشه در عمله که باید جواب بگیرید و در ضمن کارهای عملی هم گیرهای خاص خودش رو داره که بهتره کم کم باهاشون آشنا بشید :agree:
                    اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                    دیدگاه


                      پاسخ : آموزش زبان سی

                      از توضیحاتتون ممنونم
                      در ابتدا این کد رو مینوشتم
                      کد:
                      DDRB=(1<<DDRB.0)|(1<<DDRB.2)|(1<<DDRB.3) ;
                      بدستی هم کامپایل میشد اما همچنان پینها ورودی بودند و فقط با دستورات مستقیم خروجی میشدند.

                      اگر شاد بودی آرام بخند تا غم بیدار نشود

                      دیدگاه


                        پاسخ : آموزش زبان سی

                        نوشته اصلی توسط Ghasede del
                        از توضیحاتتون ممنونم
                        در ابتدا این کد رو مینوشتم
                        کد:
                        DDRB=(1<<DDRB.0)|(1<<DDRB.2)|(1<<DDRB.3) ;
                        بدستی هم کامپایل میشد اما همچنان پینها ورودی بودند و فقط با دستورات مستقیم خروجی میشدند.
                        خواهش میکنم :smile:
                        الان متوجه نشدم، مشکلتون حل شده یا نه؟ (چون فرمودید در ابتدا...)
                        در ضمن شبیه سازی میکنید یا عملی می بندید مدار رو؟
                        اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                        دیدگاه


                          پاسخ : آموزش زبان سی

                          خواهش میکنم :smile:
                          الان متوجه نشدم، مشکلتون حل شده یا نه؟ (چون فرمودید در ابتدا...)
                          در ضمن شبیه سازی میکنید یا عملی می بندید مدار رو؟
                          عملی می بندم .
                          کد:
                          DDRB=(1<<DDRB.0)|(1<<DDRB.2)|(1<<DDRB.3) ;
                          همین الان مدار جلومه و عملی کار میکنم این کد تاثیری نداره.

                          اگر شاد بودی آرام بخند تا غم بیدار نشود

                          دیدگاه


                            پاسخ : آموزش زبان سی

                            نوشته اصلی توسط Ghasede del
                            عملی می بندم .
                            کد:
                            DDRB=(1<<DDRB.0)|(1<<DDRB.2)|(1<<DDRB.3) ;
                            همین الان مدار جلومه و عملی کار میکنم این کد تاثیری نداره.
                            از این کد استفاده کنید:
                            کد:
                            [ltr]
                            DDRB |=(1<<0) | (1<<2) | (1<<3);
                            [/ltr]
                            اگر باز هم جواب نداد ایراد احتمالا از جای دیگه ای از برنامتونه، اگه نیاز بود لطفا کد برنامتون رو قرار بدید
                            اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                            دیدگاه


                              پاسخ : آموزش زبان سی

                              چشم الان تست میکنم

                              اگر شاد بودی آرام بخند تا غم بیدار نشود

                              دیدگاه


                                پاسخ : آموزش زبان سی

                                #include <mega16.h>
                                #define xtal 8000000
                                unsigned char i=0;
                                flash unsigned char sinewave[256]={
                                0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c, 0x9f,0xa2,0xa5,0xa8,0xab,0xae,
                                0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9, 0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
                                0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec, 0xed,0xef,0xf0,0xf2,0xf3,0xf5,
                                0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe, 0xfe,0xff,0xff,0xff,0xff,0xff,
                                0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc, 0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
                                0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8, 0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
                                0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4, 0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
                                0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95, 0x92,0x8f,0x8c,0x89,0x86,0x83,
                                0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63, 0x60,0x5d,0x5a,0x57,0x54,0x51,
                                0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36, 0x33,0x31,0x2e,0x2c,0x2a,0x27,
                                0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13, 0x12,0x10,0x0f,0x0d,0x0c,0x0a,
                                0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01, 0x01,0x00,0x00,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03, 0x03,0x04,0x05,0x06,0x07,0x08,
                                0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17, 0x19,0x1b,0x1d,0x1f,0x21,0x23,
                                0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b, 0x3e,0x40,0x43,0x46,0x49,0x4c,
                                0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a, 0x6d,0x70,0x73,0x76,0x79,0x7c};

                                interrupt [TIM1_COMPA] void timer1_comparea_isr(void)
                                {
                                OCR1A=sinewave[i];
                                i++;
                                if(i==255)
                                i=0;
                                }
                                void main(void)
                                {
                                DDRD|=(1<<4) | (1<<5);
                                OCR1A=sinewave[0];
                                TCCR1A=0x81;
                                TCCR1B=0x09;
                                TIMSK=0x10;
                                #asm("sei&quot
                                while(1);
                                {
                                }
                                }

                                اگر شاد بودی آرام بخند تا غم بیدار نشود

                                دیدگاه

                                لطفا صبر کنید...
                                X