اطلاعیه

Collapse
No announcement yet.

روشن شدن led بصورت شمارنده باینری

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

    روشن شدن led بصورت شمارنده باینری

    کد نویسی در کد ویژن
    برنامه ای باشد که درصورتی که پورت A ( که به dipswitch هشتایی وصل است) عدد فرد بود خروجی پورت c که یک پک led متصل است را بصورت باینری معادل آن عدد فرد را با روشن کردن led های مربوطه نمایش دهد و درصورتی که ورودی پورت A زوج بود معادل آن عدد زوج را در پورت D نمایش دهد نمیدونم اشکال کارم کجاست ولی جواب نمیگیرم


    کدی که خودم نوشتم:

    DDRA=0X00
    PORTA=0XFF
    DDRC=0XFF
    DDRC=0XFF
    void main(){
    DDRA=0X00
    PORTA=0XFF
    DDRC=0XFF
    DDRC=0XFF
    while(){
    i=portA
    if ( pinA%2==0)
    portC =i
    else if (pinA%2 !=0)
    portD=i
    }}

    #2
    پاسخ : روشن شدن led بصورت شمارنده باینری

    نوشته اصلی توسط parsa97 نمایش پست ها
    کد نویسی در کد ویژن
    برنامه ای باشد که درصورتی که پورت A ( که به dipswitch هشتایی وصل است) عدد فرد بود خروجی پورت c که یک پک led متصل است را بصورت باینری معادل آن عدد فرد را با روشن کردن led های مربوطه نمایش دهد و درصورتی که ورودی پورت A زوج بود معادل آن عدد زوج را در پورت D نمایش دهد نمیدونم اشکال کارم کجاست ولی جواب نمیگیرم


    کدی که خودم نوشتم:

    DDRA=0X00
    PORTA=0XFF
    DDRC=0XFF
    DDRC=0XFF
    void main(){
    DDRA=0X00
    PORTA=0XFF
    DDRC=0XFF
    DDRC=0XFF
    while(){
    i=portA
    if ( pinA%2==0)
    portC =i
    else if (pinA%2 !=0)
    portD=i
    }}
    سلام
    این برنامه پر از غلطه کدومو بگم؟ حالا از اینکه کامپایل نمیشه (به دلیل نذاشتن نقطه ویرگول انتهای دستورات و اشتباه بودن اسم رجیسترها به دلیل کوچک بودن حروف) بگذریم و بگیم سهوی بوده، مقدار دهی رجیسترها خارج از تابع main هم غلطه و کامپایلر حتما ارور میده.
    خوب شما گفتید اگر عدد فرد بود، مقدار روی پورت C ریخته بشه و اگر زوج بود روی پورت D. اما این کد کاملا برعکس این حالت رو نشون میده!!! اگر عددی باقی مانده اش در تقسیم به 2، صفر بشه، یعنی اون عدد کامل بر 2 بخش پذیره بنابر این عدد زوجه و برای اعداد فرد باقی مانده تقسیم به 2 همیشه 1 خواهد بود. شما توی کد بالا این شرط ها رو جابجا اعمال کردید!
    مورد بعدی اینکه شما متغیر i رو با مقدار رجیستر PORTA مقدار دهی کردید که این کار عملکرد مطلوب شما رو در بر نمیگیره. باید جای PORTA از PINA استفاده کنید. مقدار رجیستر PORTx در حالت ورودی، نمایانگر روشن یا خاموش بودن مقاومت پول آپ داخلی هستش نه نمایانگر سطح منطقی ورودی!
    ضمنا با توجه به این که ورودی (که همون پورت A هستش) توسط رجیستر PORTA به صورت داخلی pull up شده، در نتیجه کلیدها باید به زمین متصل باشن و عملکرد کلیدها توی این حالت، کاملا برعکس خواهد بود. یعنی کلید باز به معنی 1 منطقی و کلید بسته به معنی 0 منطقی هستش. این نکات رو در نظر گرفته بودید؟
    یک مورد دیگه ای که یادم رفت بگم اینه که شرط حلقه while خالیه. باید داخل پرانتز عدد 1 قرار بگیره تا حلقه تا بی نهایت ادامه داشته باشه.
    جدیدترین ویرایش توسط hossein.m98; ۱۸:۲۳ ۱۳۹۸/۰۷/۲۷. دلیل: تکمیل

    دیدگاه


      #3
      پاسخ : روشن شدن led بصورت شمارنده باینری

      مرسی از پاسختون
      نکاتی که گفته بودید رو من توی کدویژن رعایت کردم ولی بازم نتیجه نمیداد اگه براتون مقدوره کدبرنامه رو خودتون بنویسید تا اون رو هم امتحان کنم.

      دیدگاه


        #4
        پاسخ : روشن شدن led بصورت شمارنده باینری

        نوشته اصلی توسط parsa97 نمایش پست ها
        مرسی از پاسختون
        نکاتی که گفته بودید رو من توی کدویژن رعایت کردم ولی بازم نتیجه نمیداد اگه براتون مقدوره کدبرنامه رو خودتون بنویسید تا اون رو هم امتحان کنم.
        #include <mega32.h>

        void main(void)
        {
        DDRA = 0x00;
        PORTA = 0xFF;


        DDRC = 0xFF;


        DDRD = 0xFF;


        while (1)
        {
        if(PINA%2 == 0)
        PORTD = PINA;


        else
        PORTC = PINA;
        }
        }
        جدیدترین ویرایش توسط hossein.m98; ۱۹:۴۷ ۱۳۹۸/۰۷/۲۷. دلیل: تصحیح اشتباه

        دیدگاه


          #5
          پاسخ : روشن شدن led بصورت شمارنده باینری

          نوشته اصلی توسط parsa97 نمایش پست ها
          کد نویسی در کد ویژن
          برنامه ای باشد که درصورتی که پورت A ( که به dipswitch هشتایی وصل است) عدد فرد بود خروجی پورت c که یک پک led متصل است را بصورت باینری معادل آن عدد فرد را با روشن کردن led های مربوطه نمایش دهد و درصورتی که ورودی پورت A زوج بود معادل آن عدد زوج را در پورت D نمایش دهد نمیدونم اشکال کارم کجاست ولی جواب نمیگیرم


          کدی که خودم نوشتم:

          DDRA=0X00
          PORTA=0XFF
          DDRC=0XFF
          DDRC=0XFF
          void main(){
          DDRA=0X00
          PORTA=0XFF
          DDRC=0XFF
          DDRC=0XFF
          while(){
          i=portA
          if ( pinA%2==0)
          portC =i
          else if (pinA%2 !=0)
          portD=i
          }}

          دوستان توضیحات رو گفتند ولی به عنوان یک راهنمایی اگه عدد شما بصورت باینری هست که در اینجا هم همینطور هست کافیست که تنها بیت اول عدد رو مورد بررسی قرار بدید.(در اینجا ورودی A0).اگه1 بود فرد و اگه 0 بود زوج است
          جدیدترین ویرایش توسط ویرا; ۲۳:۴۴ ۱۳۹۸/۰۸/۰۷.

          دیدگاه


            #6
            پاسخ : روشن شدن led بصورت شمارنده باینری

            وقتتون بخیر دوستان . یک برنامه دارم که باید شمارنده باینری توسط میکرو رو بر روی ۴ LED نشون بده ؛ اگر کمکم کنید ممنون میشم

            دیدگاه


              #7
              پاسخ : روشن شدن led بصورت شمارنده باینری

              نوشته اصلی توسط reza.s1999 نمایش پست ها
              وقتتون بخیر دوستان . یک برنامه دارم که باید شمارنده باینری توسط میکرو رو بر روی ۴ LED نشون بده ؛ اگر کمکم کنید ممنون میشم
              سلام
              با کدوم قسمتش مشکل دارید؟

              دیدگاه


                #8
                پاسخ : روشن شدن led بصورت شمارنده باینری

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

                دیدگاه


                  #9
                  پاسخ : روشن شدن led بصورت شمارنده باینری

                  نوشته اصلی توسط reza.s1999 نمایش پست ها
                  چندین سایت گشتم ولی برنامه ای نزدیک به این هم پیدا نکردم که از روش الگو بگیرم . بخش شبیه سازی پروتئوس رو مشکلی ندارم فقط نمیدونم برای شمارنده باینری باید چه کدی رو بزنم . ممنون که وقت میذارید

                  DDRA = 0x0F;
                  PORTA = 0x00;
                  while (1)
                  {
                  if (PORTA < 0x0F)
                  PORTA++;
                  else
                  PORTA = 0;


                  delay_ms(250);
                  }

                  دیگه از این ساده تر نداریم. شمارش روی 4 بیت پایینی PORTA هستش.

                  دیدگاه


                    #10
                    پاسخ : روشن شدن led بصورت شمارنده باینری

                    بسیار ممنون از لطف شما ، زحمت کشیدید

                    دیدگاه

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