اطلاعیه

Collapse
No announcement yet.

سوالات اسمبلی

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

    #31
    پاسخ : سوالات اسمبلی

    توی انجمن یکی از دوستان برنامه ای می خواست که با فشردن یک کلید برنامه avr متوقف بشه و avr از کار بیافته و با فشردن دوباره همون کلید avr شروع به کار کنه

    که من برنامه زیر رو برای اینکار نوشتم که با اینتراپت صفر و حالت power down کار میکنه و با حذف نویز ورودی میکروسوییچ به خوبی کار میکنه

    اما مشکل اینجاست که در برنامه زیر اگر بجای عبارت inc r18 (در زیر برنامه int0_isr) عبارت com r18 رو قرار بدیم در پروتئوس مدار جواب میده اما در عمل با فشردن میکروسوییچ اعداد نامعتبر روی پورت c نمایش داده میشه من برای تست مقدار اولیه 1 رو به r18 دادم و دیدم که مشکل بر طرف شد پس میشه نتیجه گرفت که مشکل به صفر شدن r18 برمیگرده و مربوط به رجیستر sreg میشه

    اما چرا باعث به هم ریختن مقادیر پورت c میشه ؟

    برنامه :

    کد:
     .include "m32adef.inc"
     .org 0000
     jmp main
     .org 0002
     jmp int0_isr
    
    
    
    
     main:
     ldi r16,high(ramend)
     out sph,r16
     ldi r16,low(ramend)
     out spl,r16
     clr r17
     clr r18
     
     ser r16
     out ddrc,r16 
     cbi ddrd,2
     sbi portd,2
    
     sei
     in r16,gicr
     ori r16,$40
     out gicr,r16
    
     in r16,mcucr
     ori r16,$a0
     out mcucr,r16
    
     main1:
     inc r17
     out portc,r17
     call delay
     sbrs r18,0
     rjmp m0
     sleep
     m0:rjmp main1
    
     delay:
     ldi r20,250
     l3:ldi r21,200
     l2:ldi r22,30
     l1:nop
     dec r22
     brne l1
     dec r21
     brne l2
     dec r20
     brne l3
     ret
    
     int0_isr:
     inc r18
     reti
    فایل های asm و hex و پروتئوس برنامه :
    http://www.mediafire.com/download/wzyozqbal29t98t/sleep.zip
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    دیدگاه


      #32
      پاسخ : سوالات اسمبلی

      در برنامه شما در هنگام پرش به وقفه، وضعیت sreg ذخیره سازی نمی شود. بنابراین با توجه به وجود دستورات brne در زیر برنامه delay چنانچه وضعیت Z flag تغییر کند، زمان بندی این زیر برنامه تغییر می کند و شکل موج قرار گرفته روی portc از نظر زمانی می تواند مختل شود. با فرض مقدار اولیه صفر برای r18 با هر بار اجرای دستور com r18 وضعیت Z flag عوض می شود و عملکرد دستورات brne بسته به مرحله برنامه می تواند تغییر کند. برای برطرف شدن این وضعیت می توانید sreg را در ابتدای وقفه ذخیره کنید و در هنگام خروج از وقفه آن را مجددا بازیابی کنید.
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه

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