دادا volatile برا متغیرهایی استفاده میشه که سریع عوض میشن یا مثلآ از پروتکل ارتباطی از جمله usart دریافت میشن..و احتمال از دست رفتن اطلاعات وجود داره...
بدون volatile میکرو متغیر ها رو بهینه میکنه خودش..ولی وقتی متغیری از نوع volatile باشه، دیگه میکرو باهاش کاری نداره و همونجوری که هست نگه داشته میشه...
ولی دادا اینجا دلیلی نداره که از این نوع تعریف یشه..
حالا یه چنتا کار کن ببین بدون volatile هم کار میکنه یا نه...
واسه پایه وقفه ها مقاومت pull up در حد 1k بذار..
تو روتین وقفه ات اینجوری بنویس که وقتی وارد وقفه شد(یعنی پایه 1بار صفر شده) در حد مثلآ 30ms صبر کنه و دوباره پایه رو چک کنه..اگه هنوز صفر بود مقدار متغیر رو افزایش یا کاهش بده...این برا جلوگیری از نویزه...
البته قبل همه ی اینها اینو امتحان کن شاید جواب بده ولی بعدش برا اینکه برنامه ات بهتر باشه حتمآ بالایی ها رو انجام بده:
بعد از دستورات count++ یا count-- یه وقفه ی کوچیک بذار...همو در حد چند میلی ثانیه...ببین چی میشه.
معمولآ اینجوری هست که اول روتین وقفه، وقفه ها رو غیر فعال میکنن و آخر روتینش دوباره وقفه ها رو فعال میکنن..(با cli )
موفق باشی دادا