چرا میخوای استک رو پاک کنی؟
اصلا منظورت از پاک کردن استک چیه؟
برهرحال اگه دوبار دستور POP رو بنویسی استک به وضعیت قبلش برمیگرده مثلا دوبار بنویس POP R16
البته معمولا بیشتر رجیسترهای عمومی و Sreg و غیره هم به صورت اتوماتیک توسط کامپایلر در stack ذخیره میشن که در این صورت بایستی اونها رو هم در نظر بگیرید
او یا به گفته دوستمون :
نوشته اصلی توسط SAMAN.ASADI
آقا تو رو به خدا از خیرش بگذر .
روش برنامه نویسی رو تغییر بده همه چی درست میشه
دوست عزیز الان کل تاپیک رو خوندم
شما میخوای هر کار غیر اصولی رو انجام بدی ، ولی برنامه ی خودتو عوض نکنی
قرار گرفتن داده توی حافظه ای که برای استک در نظر گرفته میشه به صورت LIFO هستش (Last In First Out)
شما هر جا از دستور پرش استفاده کنی ، آدرس همونجا میره توی آخرین خونه ی استک قرار میگیره و با دستور Return این آدرس از استک فراخوانی میشه ، در نتیجه بعد از Return برنامه ی شما از همونجایی که قطع شده بود ادامه پیدا میکنه
همونطوری که دوستان اشاره کردن ، دستورات اسمبلی دسترسی به حافظه ی استک PUSH و POP هستند ، و در هر زبان برنامه نویسی قابل اجرا .
ولی معمول بر اینه که شما وقتی کامپایلری مثل بسکام رو برای برنامه نویسیت انتخاب کردی ، دیگه از دستورات اسمبلی استفاده نکنی ، مگر در مواردی و به دلایلی ... (برنامه نویس های حرفه ای برای بهینه کردن برنامه شون ، یا اجرای سری دستوراتی که در کامپایلر معدلی براشون نداره و ... این کار رو انجام میدن)
اگر شما در جایی نادرست و در زمانی نادرست داده ای نا به جا رو توی استک قرار بدی و یا از اون خارج کنی ، مطمئنا برنامه ات با مشکلاتی بیشتر از حال الانش مواجه خواهد شد
پس من هم بهت توصیه میکنم که بیخیال استک شی و یه دستور از برنامه ات رو عوض کنی :agree:
دوست عزیز. چرا از دستور debounce استفاده نمی کنید؟ می توانید مثل زیر عمل کنید:
a:
Debounce pina.0 , 0 , kar , sub
Goto a
Kar:
Set pin b.0
Return
در ضمن در نظر داشته باشید که هیچ وقت از پایه ی reset میکرو استفاده نکنید.چه به عنوان ورودی و چه به عنوان خروجی.چون من خودم استفاده می کردم و داءما ریست می شد.
[glow=red,2,300]بیایید با کمک هم الکترونیک را گسترش دهیم[/glow]
[glow=yellow,2,300]AVR & ARM[/glow]
[glow=green,2,300]عشق است و برنامه نویسی [/glow]
دیدگاه