Timer kullanmadan iç içe döngü ile 1 saniyelik gecikme

Timer modülünü kullanmadan iç içe 3 adet döngü ile 8mhz kristal de yaklaşık 1 saniyelik gecikmeler ile portb ye bağlı butonların yanması. PortA,4 e bağlı butona basıldığında portb,0 portb,1 deki ledlerin sırayla yanması PortA,4 e bağlı butona basılmadığında portb,2 portb,3 deki ledlerin sırayla yanması

Ledlerin Binary Düzende Sayması

PortA,0 a bağlı butona basılmadığında PortB ye bağlı ledlerin ileri yönde sayması başlangıç değerimiz 0 olduğu için 0 dan başlayıp ileri yöne binary düzende sayar (00000000 00000001 00000010 .... 11111111) PortA,0 a bağlı butona basıldığında PortB ye bağlı ledlerin geriye doğru sayması. program başlangıcında butona basılı olmadığı için ileri yöne sayar butona basıldığında son değeri 1-1 azalır. programımız da timer modülü kullanılmadan iç içe döngü ile gecikme sağlanmıştır. 1mhz osilator hızında çalıştırmanız tavsiye edilir yada 3.bir döngü ile gecikme süresini arttırıp istediğiniz osilator hızını verebilirsiniz. iç içe 3 döngünün nasıl yazılacağıyla ilgili fikriniz yoksa bir önceki çalışmama bakabilirsiniz.

Toplama Mantığı Ve Bu Mantıkla Led Kaydırma (50Hz Osilator)

Led Yakmak için o ledin set olması gerekmektedir. Peki Led kaydırmak için RRF RLF komutları dışında toplama yöntemiyle de led kaydırma yapılacağını düşündünüz mü hiç ? Örneğin 0000 0001 değeri ile sıfırıncı led yanar, 0000 0010 değeri ile birinci led yanar, 0000 0100 değeri ile ikinci led yanar, yani sola led kaydırmak bir nevi sayıyı 2 ile çarpmak yani kendisi ile toplamaktır. Bu örneğim de hem basit düzeyde toplama işleminin nasıl yapıldığını hemde 8 led içinden istediğiniz lede kadar nasıl kaydırma yapabileceğinizi göreceksiniz. Hiçbir Gecikme Kullanmadığım için program Osilator Hızlarını iyice düşürüyoruz ben örneğimde 50Hz olarak ayarladım

Her Buton Tetiklenmesinde PortB nin içeriğinin 1 Artması

Ra4 e bağlı buton tetiklemesiyle PortB nin içeriğinin 1 artması ve bu değerin Ledlerle gösterilmesi. Program tamamen buton tetiklemesi ile çalışıyor (pul-down) konumunda PortB yi 1 arttırıyor, basılı konumda beklediği sürece boş döngüde tekrar ediyor ne zaman pul-up konumuna gelirse en baştan döngüye girerek tekrar tetikleme bekliyor. Gecikme Kullanmadığım için Osilator hızınızı 1-4-8 Mhz değerlerinden birini seçerek uygulamayı inceleyebilirsiniz.

7 Segment Sayac (LookupTable Kullanarak) 0-9 arası sayma

Program içeriğinde sizin düzenlemenize bağlı olarak 2 farklı şekilde çalışmaktadır. 1.Çalışma şekli her buton tetiklemesinde 1-1 değerin artması bu kısımda gecikmeye ihtiyaç duyulmaz. 2.Çalışma şekli buton tetiklenmesinde gecikmeye giderek 1-1 değerin artması bu kısımda gecikmeye ihtiyaç duyar. Assembly kod içerisinde yaptığım açıklamalar ile 3 satırı yorum satırından çıkarıp normal kod satırına getirerek iki farklı durumu inceleyebilirsiniz. Not: Katot Display Kullandım osilator hızı olarak gecikme ile çalışacaksınız 1Mhz yada 4mhz tercih ediniz

2x7 Segment Displayde 0-99 Arasında Sayma

Veri girişi PortB ye Seçme Girişi PortA ya Bağlı uygulamada 0-99 arasında Saydırma işlemini yapıyoruz. aynı anda iki segment in nasıl kontrol edildiğini de açıklamaya çalıştım. gecikme kullanılarak yapılmıştır. 4Mhz osilator hızıyla çalışmanızı tavsiye ederim

7 Segment te 1 Saniye ve 0,4 Saniye Aralıklarla Sayan Sayaç

2x7 segment üzerinde 4mhz osilator hızında kullandığım tek Tmr0 kesmesi ve ortak gecikme hesabıyla 1 saniye ve 0.4 saniye aralıklarla sayan Tmr0 örneği. Tmr0 hesaplaması ve konfigürasyon ayarlarını da kod içerisinde detaylı olarak açıklamaya çalıştım.

Timer1 Gecikmesini Kullanarak Farklı Değerlerde Kesmeler Oluşturmak

Tmr1 Gecikmesini kullanarak kesme içerisine girdiğimizde kullandığımız döngümüz ve Tmr1 in 16 bitlik scala sının verdiği imkanla Tmr0 dan çok daha esnek çalışabilme imkanını buluyoruz. çok küçük değerleri de (Nano Saniye Mikro Saniye) çok büyük değerleri de (Mili Saniye Saniye Dakika) hesaplama imkanımız oluyor. kod içerisinde yaptığım açıklamalar ve Tmr1 hesaplaması sayesinde istediğiniz değerleri hesaplaya bileceksiniz. 500 Nano Saniye ... 67 Saniye Arasındaki Değerleri hesaplamak için 8Mhz kristal ile çalışmanızı tavsiye ederim

Buton Tetiklemesiyle Çalışan Timer1 Uygulaması

Ra1 ve Ra4 e bağlı 2 buton üzerinden yapılan tetiklemeler ile D portuna bağlı olan ledleri sırasıyla yakıp söndüren uygulama Ra1 e 5 kere basıldığında D0-D1 portuna Bağlı ledleri 3 er saniye Aralıkla yakıp Söndüren Ra4 e 10 kere basıldığında D2-D3 portuna Bağlı ledleri 1 er saniye Aralıkla yakıp Söndüren uygulama. Timer 1 üzerinden 4 Mhz osilator ile ayarlamalar yapılmıştır Hangi Butonun kaç kere tetikleme yapacağını verdiğim açıklamalar ile ihtiyacınıza göre düzenleyebilir yine aynı şekilde verdiğim açıklamalar ile zaman aralığını da istediğiniz gibi düzenleyebilirsiniz.