اطلاعیه

Collapse
No announcement yet.

کمک در اسمبلی

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

    کمک در اسمبلی

    سلام دوستان میشه کمکم کنید
    میخوام یک کد بنویسم که مثلا پایه A ورودی باشه و پایه D خروجی باشه
    و با دو تا کلید دو تا لامپ رو روشن خاموش کنم
    یعنی دو تا کلید وضعیت ورودی رو بگیرن و بعد ال ای دی متناظر باهاش رو روشن کنه
    من با سی همیشه برنامه می نوشتم اما الان موندم چطور با اسمبلی این کارو انجام بدم یه کد نوشتم اما خطا داره خیلی
    لطفا کمکم کنید
    ممنون

    #2
    پاسخ : کمک در اسمبلی

    سلام.
    کدتو بذار شاید بتونم کمکت کنم.
    یه کد تو stodio گذاشتم شاید بدردت بخوره

    کد:
    #include "m16def.inc"
    ldi r16,255
    out ddrd,r16
    ldi r17,0
    out ddra,r17
    out porta,r16
    out portd,r17
    
    s:
    sbis pina,0
    rjmp pc+3
    cbi portd,0
    rjmp pc+2
    sbi portd,0
    
    sbis pina,1
    rjmp pc+3
    cbi portd,1
    rjmp pc+2
    sbi portd,1
    
    rjmp s

    دیدگاه


      #3
      پاسخ : کمک در اسمبلی

      خوب چرا کلیدو مستقیم وصل نمیکنی به LED ؟؟!
      کم گوی و گزیده گوی

      دیدگاه


        #4
        پاسخ : کمک در اسمبلی

        سلام دوست عزیر این هم کدی که من نوشتم
        میدونم اشکال علمی داره (آخه این اولین برنامه اسمبلیم هست من همیشه با سی می نوشتم برنامه هام رو واسه همین الان خیلی در موندم که چطور با اسمبلی بنویسمش)
        .include "m16def.inc"
        IN DDRB,R1
        OUT DDRD,R16
        CLR R1
        CLR R16
        LOOP:
        CPI R1,1
        BREQ P0
        CPI R1,2
        BREQ P1

        RJMP LOOP
        P0:
        SBI PORTB,0

        P1:
        SBI PORTB,1

        دیدگاه


          #5
          پاسخ : کمک در اسمبلی

          نوشته اصلی توسط fever
          سلام دوست عزیر این هم کدی که من نوشتم
          میدونم اشکال علمی داره (آخه این اولین برنامه اسمبلیم هست من همیشه با سی می نوشتم برنامه هام رو واسه همین الان خیلی در موندم که چطور با اسمبلی بنویسمش)
          .include "m16def.inc"
          IN DDRB,R1
          OUT DDRD,R16
          CLR R1
          CLR R16
          LOOP:
          CPI R1,1
          BREQ P0
          CPI R1,2
          BREQ P1

          RJMP LOOP
          P0:
          SBI PORTB,0

          P1:
          SBI PORTB,1
          شدیدا غلط داره هم از نظر عملی هم تئوری.اون برنامرو ک گذاشتم واست کار میکنه.اگه خاستی اشکالات این برنامرو بهت میگم.

          دیدگاه


            #6
            پاسخ : کمک در اسمبلی

            اگه زحمتی نیست
            اشکالام رو بهم بگید
            در ضمن اگه امکانش هست راجع به خط کد هاتون بهم توضیح بدید ممنون میشم

            دیدگاه


              #7
              پاسخ : کمک در اسمبلی

              کد:
              #include "m16def.inc"
              ldi r16,255
              out ddrd,r16 //خروجی کردن پورت دی
              ldi r17,0
              out ddra,r17 //ورودی کردن پورت آ
              out porta,r16 //فعال کردن مقاومتهای پول پ برای دریافت صحیح ورودی در این حالت مقدار اولیه پورتهای ورودی یک میشود و قتی کلید زده میشود مقدار ورودی صفر میشود
              out portd,r17 //پایه دی که خروجی است صفر میکنیم(چراغها فعلا خاموش)
              
              s:
              sbis pina,0 //پایه صفرم آ را چک میکنیم اگر یک بود (یعنی کلید را هنوز نزده ایم)دستور بعدی اجرا نمیشود
              rjmp pc+3 //اگر پایه صفرم آ صفر بود این دستور اجرا میشود (پرش به سه خط بعدی)
              cbi portd,0 //پایه صفرم دی صفر میشود
              rjmp pc+2 //بعد از اینکه پایه صفرم صفر شد نباید دستور بعدی که یک کردن همان پایه است اجرا شود.در نتیجه پرش به دو خط پایینتر صورت میگیرد
              sbi portd,0 //پایه صفرم دی یک میشود.
              
              sbis pina,1//این قسمت مانند بالاست که برای پایه بعدی چک میشود
              rjmp pc+3
              cbi portd,1
              rjmp pc+2
              sbi portd,1
              
              rjmp s

              دیدگاه

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