Arkadaşlar merhaba , devrede üç buton var +,- ve onay fakat arttırma butonuna bastığımda değer bir anda çok artıyor anca delay koyarak çözebiliyorum.
Çalışmıyor
#define p109 LPC_GPIO1->FIOPIN & 0x01<<9
while (!(p109)){tip=tip+1;while(p109);}
Çalışmıyor
#define p109 LPC_GPIO1->FIOPIN & 0x01<<9
while (!(p109)){tip=tip+1;}while(p109);
Çalışan
#define p109 LPC_GPIO1->FIOPIN & 0x01<<9
while (!(p109)){tip=tip+1;DelayMs(1000);}
Hocam bu sistem sadece arm için olan bir şey değil. delay koymak en basit çözümdür ancak daha kullanışlı çözümler mevcuttur. Butonun bırakılmasını beklemek ve işlemi daha sonra gerçekleştirmek yada buton basıldığı zaman bir sayaç başlatıp bu sayacın belirli değerlerinde işlemi gerçekleştirmek yada bbuton bir kez basıldıktan sonro bırakılana kadar butonun yapacağı işlemi pasifleştirmek gibi değişik metodlar geliştirilir ve duruma uygun olanı kullanılır.
while(butona basıldımı)
{
if (buton bırakıldımı) {işlemler}
}
mikroişlemci, saniyede milyonlarca komut yorumlar. Bu sebeple bir butonun test edilmesi sadece mikrosaniyerde tamamlanır. Bir insanın bir tuşa basma sıklığı ve basık kalma sürelerinin geçerli limitlerde olması gerekir. Mesela bir insan bir butona 1ms sürede basıp bırakamaz. Bu bir parazitik etki olarak değerlendirilebilir.
Ben bir tuşu okumak için timer kullanırım ve tuşa baılınca timer sayar. Süre dolmadan tekrar basılması kabul görmez ve tuşun geçerli olabilmesi için enaz 50ms gibi tuş basılı kalmış olması timer ile beklerim.