LED arabirimi ilk şeydir, herhangi bir mikro denetleyiciye başlarken yapmaya çalışılır. Bu eğitimde, bir LED ile 8051 mikrodenetleyici arasında arayüz oluşturacağız ve LED'i yakmak için bir C Programı yazacağız. ATMEL tarafından 8051 ailesinden çok popüler bir mikro denetleyici AT89S52 kullandık.
Ayrıntılara girmeden önce, mikro denetleyici AT89S52 hakkında kısa bir fikir edinmeliyiz. 40 pin mikrodenetleyicidir ve 4 porta (P0, P1, P2, P3) sahiptir, her port 8 pinlidir. Yazılım açısından her portu 8 bitlik kayıt olarak değerlendirebiliriz. Bir Giriş / çıkış hattına sahip olan her pim, her pinin giriş ve çıkış için, yani sensör gibi bazı cihazlardan verileri okumak veya çıkışını bazı çıkış cihazlarına sağlamak için kullanılabileceği anlamına gelir. Bazı pinler, aşağıdaki Pin Şemasında parantez içinde belirtilen İkili işlevselliğe sahiptir. İkili işlevsel olarak kesme, sayaçlar, zamanlayıcılar vb.
AT89S52 iki tür belleğe sahiptir; ilki 256 Bayt belleğe sahip RAM ve ikincisi 8k bayt belleğe sahip EEPROM (Elektronik Olarak Silinebilir ve Programlanabilir Salt Okunur Bellek). RAM, bir programın yürütülmesi sırasında verileri saklamak için kullanılır ve EEPROM, Programın kendisini depolamak için kullanılır. EEPROM, programı yazmak için kullandığımız flash bellektir.
Devre Şeması ve Açıklama
LED'i bağlamak için port 1'in birinci pinini kullanıyoruz. In gömülü C programlama biz P1_0 kullanarak port 1 PIN 1 erişebilirsiniz. PIN 19 ve 18'e, yani XTAL1 ve XTAL2'ye 11.0592MHz frekanslı bir kristal osilatör bağladık. Saat darbeleri oluşturmak için kristal osilatör kullanılır ve tüm olayları senkronize etmek için zorunlu olan zamanlama hesaplaması için ortalama sağlamak için saat darbesi kullanılır. Bilgisayarlar, saatler vb. Gibi hemen hemen her modern dijital ekipmanda kullanılan bu tür kristaller. En çok kullanılan Kristal kuvarsdır. Bu bir rezonant osilatör devresi ve kristali salınım yapmak için kapasitörler kullanılıyor, bu yüzden buraya 22 pf kapasitörler bağladık. Daha fazlasını öğrenmek için "rezonans devreleri" hakkında okuyabilirsiniz.
8051 89S52 ile ara-yüz LED devre şemasıdır yukarıdaki şekilde gösterilmiştir. Pin 31 (EA), aktif bir düşük pin olan Vcc'ye bağlıdır. Bu, herhangi bir harici bellek kullanmadığımız zaman Vcc'ye bağlanmalıdır. Pim 30 (ALE) ve pim 29 (PSEN), mikro denetleyiciyi harici belleğe bağlamak için kullanılır ve Pim 31, mikrodenetleyiciye Toprağa bağlandığında harici bellek kullanmasını söyler. Herhangi bir harici bellek kullanmıyoruz, bu yüzden Pin31'i Vcc'ye bağladık.
Pin 9 (RST), mikrodenetleyiciyi sıfırlamak için kullanılan sıfırlama PIN'idir ve program yeniden baştan başlar. HIGH'a bağlandığında mikro denetleyiciyi sıfırlar. RST pinini bağlamak için standart sıfırlama devresi, 10k ohm direnç ve 1uF Kapasitör kullandık.
Şimdi buradaki ilginç kısım, LED'i tersine bağlamamız, mikro denetleyici PIN'iyle negatif bacak anlamına geliyor, çünkü mikrodenetleyici bir LED'i yakmak için yeterli güç sağlamıyor, bu yüzden burada LED negatif mantık üzerinde çalışıyor, pin P1_0 1'dir daha sonra LED KAPANACAK ve pin çıkışı 0 olduğunda LED AÇIK konuma gelecektir. PIN çıkışı 0 olduğunda, toprak gibi davranır ve LED yanar.
Kod Açıklama
REGX52.h başlığı, temel kayıt tanımlarını içerecek şekilde eklenmiştir. Gömülü C'de int, char, unsigned int, float gibi birçok değişken ve sabit türü vardır, bunları kolayca öğrenebilirsiniz. Burada aralığı 0 ile 65535 arasında olan işaretsiz int kullanıyoruz. Gecikme oluşturmak için "for loop" kullanıyoruz, böylece LED bir süre AÇIK (P1_0 = 0, negatif LED mantığı) ve KAPALI (P1_0 = 1, negatif LED mantığı) gecikmeli süre için. Genellikle "for döngüsü" 1275 kez çalıştığında, 1ms gecikme verir, bu nedenle GECİKME oluşturmak için "gecikme" fonksiyonu oluşturduk ve ana programdan (main ()) çağırdık. Ana fonksiyondan “gecikme” fonksiyonunu çağırırken GECİKME süresini (ms cinsinden) geçebiliriz. Programda, "While (1)", programın sonsuz çalışacağı anlamına gelir.
Kısaca açıklıyorum, 1275 kez "for" döngüsünün çalıştırılması 1ms'lik gecikme verir:
8051'de, 1 makine döngüsü yürütmek için 12 kristal atım gerektirir ve biz 11.0592Mhz kristal kullanıyoruz.
Yani 1 makine döngüsü için gereken süre: 12 / 11.0592 = 1.085us
Yani 1275 * 1.085 = 1.3ms, 1275 kez "for" döngüsü yaklaşık 1ms gecikme verir.
“C” programı tarafından üretilen kesin zaman gecikmesini hesaplamak, osiloskoptan (CRO) ölçerken çok zordur, çünkü (j = 0; j <1275; j ++) yaklaşık 1ms gecikme verir.
Dolayısıyla, LED'i 8051 mikro denetleyiciyle basit bir şekilde arayüzleyerek anlayabiliriz, basit bir kodlama ile, mikrodenetleyiciyi kullanarak yazılım (programlama) aracılığıyla donanımı etkileşime sokabilir ve kontrol edebiliriz. Ayrıca mikro denetleyicinin her portunu ve pinini programlama yoluyla yönetebiliriz.