اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه نویسی

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

    مشکل در برنامه نویسی

    سلام
    من قبلا با بسکام کار می کردم ولی به تازگی می خوام با c کار کنم یک برنامه خیلی ساده که در کتاب ره افروز نوشته شده با پروتئوس شبیه سازی کردم ولی کار نمی کنه لطف کنید را هنمایی کنید
    این برنامه نوشته شده در کتاب که برای خاموش و روشن شدن led نوشته شده
    #include<mega32.h>
    #include<delay.h>
    main()
    {

    while(1){
    PORTA.0=1;
    delay_ms(250);
    PORTA.0=0;
    delay_ms(250);
    }
    }


    #2
    پاسخ : مشکل در برنامه نویسی

    با سلام
    اول یک سوال داشتم : این چیزی که اینجا گذاشتید کل برنامتون هست ؟ آخه ریجیستر DDRA =0X01اشه تا پورت A به عنوان خروجی تعریف بشه تا چیزی که نوشتید عمل کنه چرا که در حالت پیشفرض همونطور که می دونید مقدار رجیستر فوق برابر با 0X00 یعنی به صورت ورودی تعریف شده ، بنابراین اگر این جوری هست رجیستر رو به صورتی که گفتم تغییر بدید تا PORTA.0 به صورت خروجی تعریف بشه !

    دیدگاه


      #3
      پاسخ : مشکل در برنامه نویسی

      با سلام
      بله من کل برنامه رو نوشتم
      من در برنامه نویسی با سی خیلی تازه کارم این مثال در کتاب آقای ره افروز بود من قبلا در بسکام می نوشتم config porta=output ولی در زبان سی نمی دونم چطور باید پورت را خروجی تعریف کرد اگه ممکنه لطف کنید در این مورد توضیح بدید

      دیدگاه


        #4
        پاسخ : مشکل در برنامه نویسی

        با سلام
        تو میکرو یه رجیستر داریم به نام DDRx که برای پورت a می شه DDRA و برای پورت B می شه DDRB و برای سایر پورت ها هم پسوند اون پورت رو می گیره
        اگر بخواهیم که پورت a رو به ورودی تبدیل کنیم تو برنامه می نیویسیم DDRA=0 و اگر بخواهیم خروجی تعریف کنیم می نوسیم DDRA=0xFF که همه پایه های پورت خروجی میشه .
        اگر هم بخواهیم یک پین خاص ورودی یا خروجی بشه کافیه فقط DDRx متناظر اون پین به ترتیب 0 یا 1 بشه مثلا می خواهیم PORTB.1 و PORTB.7 خروجی باشه بقیه پورت ورودی پس باید عدد 10000010 باینری رو که معادل هگزش 82 میشه رو به DDRB می دیم و می نویسیم DDRB=0X82
        و اما مثال شما به صورت اصلاح شده این میشه

        #include<mega32.h>
        #include<delay.h>
        main()
        {
        DDRA=0XFF;
        while(1){
        PORTA.0=1;
        delay_ms(250);
        PORTA.0=0;
        delay_ms(250);
        }
        }

        دیدگاه


          #5
          پاسخ : مشکل در برنامه نویسی

          با تشکر از پاسخ شما
          یک سوال دارم اینکه برای اتصال میکرو سوییچ از چه دستوری باید استفاده کرد من دنبال کتاب آقای ره افروز بودم ولی در بازار پیدا نکردم فقط یک pdf کوتاه ازاین کتاب پیدا کردم که کامل نیست اگر کتاب خوبی در بازار هست در این زمینه لطف کنید معرفی بفرمایید

          دیدگاه


            #6
            پاسخ : مشکل در برنامه نویسی

            هزینه نکن عزیزم. همه کتابها یه چیز رو نوشتن. یه فایل pdf هست برای آقای رضا سپاس یار برای avr c . کارتون رو راه میندازه. همراهش کلی هم پروژه هست.

            موفق باشی
            تلاش رمز ظفر

            دیدگاه


              #7
              پاسخ : مشکل در برنامه نویسی

              نوشته اصلی توسط BAMDAD 86
              یک سوال دارم اینکه برای اتصال میکرو سوییچ از چه دستوری باید
              یک پایه میکرو سوییچ رو پول پ کنید پایه دیگه اش رو هم همزمان پول دان کنید و بدید به یکی از پایه های میکرو که به عنوان ورودی تعریف کردید بعد برید توی برنامه مقدار این پایه رو بخونید بعداشم هر بلایی خواستید میتونید سرش بیارید :nice:
              نوشته اصلی توسط BAMDAD 86
              من دنبال کتاب آقای ره افروز بودم ولی در بازار پیدا نکردم فقط یک pdf کوتاه ازاین کتاب پیدا کردم که کامل نیست اگر کتاب خوبی در بازار هست در این زمینه لطف کنید معرفی بفرمایید
              به این تایپیک یه سر بزنید پر از مطالب آموزشی به زبان c هست :
              http://www.eca.ir/forum2/index.php?topic=44175.0
              البته به نظر من هیچی نمیتونه جای کتاب رو بگیره من خودم از کتاب مرجع کامل avr استفاده میکنم که سه تا نویسنده داره یکیشون مظاهری هست ، به نظر من کتاب کاملی هست زبان اسمبلی رو هم برای تمام قسمت های میکرو گفته قیمتش هم فکر کنم 10 هزار تومن باشه برای انتشارات نص هم هست .

              دیدگاه


                #8
                پاسخ : مشکل در برنامه نویسی

                با سلام
                من امروز این برنامه رو نوشتم البته ببخشید که سوالهای ابتدایی می پرسم مشکلم اینه که کامپایلر به دستور (1) while ایر ادمی گیره لطف کنید اشکال این برنامه رو بفرمایید
                #include<mega32.h>
                #include<delay.h>

                void main()
                {
                DDRA=0XFF;
                DDRB=0x00
                while(1)
                {
                if(PINB.0==0){
                PORTA.0=1;
                while(PINB.0==0);
                }
                else{
                PORTA.0=0 ;
                }
                };
                }

                دیدگاه


                  #9
                  پاسخ : مشکل در برنامه نویسی

                  نوشته اصلی توسط BAMDAD 86
                  با سلام
                  من امروز این برنامه رو نوشتم البته ببخشید که سوالهای ابتدایی می پرسم مشکلم اینه که کامپایلر به دستور (1) while ایر ادمی گیره لطف کنید اشکال این برنامه رو بفرمایید
                  #include<mega32.h>
                  #include<delay.h>

                  void main()
                  {
                  DDRA=0XFF;
                  DDRB=0x00
                  while(1)
                  {
                  if(PINB.0==0){
                  PORTA.0=1;
                  while(PINB.0==0);
                  }
                  else{
                  PORTA.0=0 ;
                  }
                  };
                  }

                  با سلام
                  در خط 6 ام برنامه تون جلوی دستور DDRB=0x00 فراموش کردین ; بذارید.
                  موفق باشید

                  دیدگاه


                    #10
                    پاسخ : مشکل در برنامه نویسی

                    با سلام، :bye

                    پیشنهاد من برای راه اندازی و خوندن وضعیت یک کلید این هست :

                    - یک سر کلید رو به GND وصل کن
                    - سر دیگر کلید رو مستقیما به پین میکرو وصل کن ( در مثال زیر پورت D و پین 0 )
                    - هر وقت خواستید وضعیت کلید رو بدونید، mySW_State رو با یک IF چک کنید، اگر 1 بود کلید فشرده شده
                    - فراموش نکنید که در ابتدای برنامه mySW_INI رو اجرا کنید

                    کد:
                    //.
                    //.
                    
                    #include <avr/io.h>																											//for AVR I/O pins definition
                    #include <compat/deprecated.h>																					//for cbi, sbi and ....
                    
                    //.
                    //.
                    //.
                    
                    #define SW_PORT					PORTD																						//define Switch Data Register - PORTx
                    #define SW_DDR					DDRD																						//define Switch Data Direction Register - DDRx
                    #define SW_PIN					PIND																						//define Switch Port Input Pins – PINx
                    #define SW_BIT					0																								//define Switch bit of port
                    
                    #define mySW_INI				{cbi(SW_DDR, SW_BIT); sbi(SW_PORT, SW_BIT);} 		//Set input & pullup
                    #define	mySW_State			(((inb(SW_PIN)) & (1<<SW_BIT)) ? 0 : 1)					//Switch input level, 0: key not pressed - 1: key pressed
                    
                    //.
                    //.
                    //.
                    
                    int main(void)
                    {
                    	//.
                    	//.
                    	//.
                    	mySW_INI;
                    	//.
                    	//.
                    	//.
                    	if(mySW_State)		//your KEY pressed
                    	{
                    	//.
                    	//.
                    	}
                    	//.
                    	//.
                    	//.
                    }	//main

                    ( برای مشاهده بهتر کدهای فوق، پس از انتخاب و کپی، آنها را در ادیتور خود paste و سپس مطالعه کنید! )
                    خوش گذشت ...
                    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                    Sh_Nourbakhsh@Yahoo.com

                    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                    دیدگاه


                      #11
                      پاسخ : مشکل در برنامه نویسی

                      ممنون از همه شما که در این مورد منو راهنمایی کردین
                      اگه ممکنه مشکله این برنامه رو بفرمایید
                      این برنامه یک سون سگمنت هست که با فشردن کلید up وdown مقدارش از 0تا 9 تغییر می کنه ولی من در تعریف کد های ثابت سون سگمنت مشکل دارم (خط سوم برنامه)یعنی کامپایلر ایراد می گیره ممنون میشم راهنمایی کنید
                      #include<mega32.h>
                      #include<delay.h>
                      flash unsigned char display[]={0x3f,0x06,0x5b,0x4f.0x66,0x6d,0x7d,0x07,0x7f,0x6 f};
                      void main (){
                      unsigned char i;
                      PORTA=0X3F;
                      DDRA=0XFF;
                      PORTB=0X03;
                      DDRB=0X00;
                      while(1){
                      if (PINB.0==0 && i<9){
                      i++;
                      while(PINB.0==0);
                      }
                      if(PINB.1==0 && i!=0){
                      i--;
                      while(PINB.1==0);
                      }
                      PORTA=display[i] ;
                      };
                      }

                      دیدگاه


                        #12
                        پاسخ : مشکل در برنامه نویسی

                        با سلام،

                        مشکل از نقطه بین این دو تا عدد هستش که باید کاما باشه ,0x4f . 0x66,
                        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                        Sh_Nourbakhsh@Yahoo.com

                        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                        دیدگاه


                          #13
                          پاسخ : مشکل در برنامه نویسی

                          من با این برنامه موفق شدم که با میکرو سوییچ روی سون سگمنت اعداد یک رقمی رو نشان بدم البته به لطف شما اساتید حالا اگه بخوام دورقمی نمایش بدم نمی دونم چطور در برنامه رابطه یکان و ده گان را ایجاد کنم یعنی 2تا 7segment با هم هماهنگ بشن اگه ممکنه در مورد توضیح بدین ممنون

                          دیدگاه


                            #14
                            پاسخ : مشکل در برنامه نویسی

                            همچنان منتظر توضیحات شما اساتید محترم هستم

                            دیدگاه


                              #15
                              پاسخ : مشکل در برنامه نویسی

                              می تونید از سونسگمنت دورقمی استفاده کنید عملکردش مثل همون سگمنت های یک رقمی هست که توسط دو پایه میشه رقم رو انتخاب و عدد متناسب با اون موقعیت رو نمایش داد که با تکرار نمایش اعداد با فرکانس بالا یک نمایش پیوسته از اعداد رو روی سگمنت خواهید داشت .
                              من یک مثال از یک سگمنت چهارتایی به زبان بیسیک دارم اگه خواستید براتون پلود می کنم تا از اون برای نوشتن برنامه به زبان c ایده بگیرد.

                              دیدگاه

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