Önceki konularımız, kavraması daha kolay ve daha az bağlantı noktasına sahip olan 16F84A idi. Bugün 16F877’ye döneceğiz. 16F877, birçok yönden 16F84A’nın üstün bir versiyonudur. Öncelikle 16F877’den bahsedecek olursak 5 port A, B, C, d ve E’ye sahiptir ve toplam uzunluğu 40 ft’dir. 16F877’yi CCS’ye programlarken, 16F84’te belirtmediğimiz birkaç farklı kod olacaktır.
HEX sistemlerine ve ikili sayılara aşina olmak önemlidir ve gereklidir. Onaltılık sayı sistemi onaltılık bir sayı sistemidir. Temelde ikili. Örneğin, 0b0001 bir ikili sayıdır. Bölüm 0b, bu sayının ikili olduğunu göstermektir. Benzer şekilde, 0x00 onaltılık bir sayıdır. Burada 0x kısmı bu sayının hexadecimal bir sayı olduğunu göstermek içindir.
16F877 için hazırladığımız kodlara bakacak olursak;
#include “C:\Program Files\PICC\Examples\bilg.-3.h”
#fuses xt, nowdt, noprotect, nobrownout, nolvp, noput, nowrt, nodebug, nocpd
# gecikme kullanımı (saat = 4.000.000)
# fast_io kullan (b)
geçersiz ana()
{
setup_adc_ports (NO_ANALOGS),
kurulum_adc(ADC_OFF),
setup_psp (PSP_DISABLED),
setup_spi(SPI_SS_DISABLED),
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1),
setup_timer_1 (T1_DISABLED),
setup_timer_2 (T2_DISABLED, 0,1),
// YAPILACAKLAR: KULLANICI KODU!!
setup_CCP1 (CCP_OFF), // CCP1 devre dışı
setup_CCP2 (CCP_OFF), // CCP2 devre dışı
set_tris_b(0x00); // Tüm çıktıların RB bağlantı noktası
çıktı_b(0x00); // Port B’yi çıkış olarak ayarlayın.
soğan:
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b0); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b1); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b2); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b3); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b4); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b5); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b6); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
output_toggle(pin_b7); // Terminal RB0’ın çıkış durumu tersine çevrilir
gecikme_ms(400); // 400 milisaniye
Basla’ya git
}
Aynı programı farklı ikonlarla ve farklı şekillerde yapmak isterseniz;
İkili sayıları sırayla hesaplayan kod;
#include “C:\Program Files\PICC\Examples\bilg.-3.h”
#fuses xt, nowdt, noprotect, nobrownout, nolvp, noput, nowrt, nodebug, nocpd
# gecikme kullanımı (saat = 4.000.000)
# fast_io kullan (b)
int16x; // x adlı sayı
geçersiz ana()
{
setup_adc_ports (NO_ANALOGS),
kurulum_adc(ADC_OFF),
setup_psp (PSP_DISABLED),
setup_spi(SPI_SS_DISABLED),
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1),
setup_timer_1 (T1_DISABLED),
setup_timer_2 (T2_DISABLED, 0,1),
// YAPILACAKLAR: KULLANICI KODU!!
setup_CCP1 (CCP_OFF), // CCP1 devre dışı
setup_CCP2 (CCP_OFF), // CCP2 devre dışı
set_tris_b(0x00); // Tüm çıkış RB bağlantı noktası
çıktı_b(0x00); // B çıkış portu
soğan:
x = 0;
a:
eğer (x < 0b1111111)
{
x++;
çıktı_b(x);
gecikme_ms(100);
şuraya git;
}
Basla’ya git
}
Başka; sembolü yukarıdan aşağıya sırayla yanıp söner;
#include “C:\Program Files\PICC\Examples\bilg.-3.h”
#fuses xt, nowdt, noprotect, nobrownout, nolvp, noput, nowrt, nodebug, nocpd
# gecikme kullanımı (saat = 4.000.000)
# fast_io kullan (b)
int16x; // x adlı sayı
araştırmacı A;
geçersiz ana()
{
setup_adc_ports (NO_ANALOGS),
kurulum_adc(ADC_OFF),
setup_psp (PSP_DISABLED),
setup_spi(SPI_SS_DISABLED),
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1),
setup_timer_1 (T1_DISABLED),
setup_timer_2 (T2_DISABLED, 0,1),
// YAPILACAKLAR: KULLANICI KODU!!
setup_CCP1 (CCP_OFF), // CCP1 devre dışı
setup_CCP2 (CCP_OFF), // CCP2 devre dışı
set_tris_b(0x00); // Tüm çıkış RB bağlantı noktası
çıktı_b(0x00); // B çıkış portu
soğan:
bir = 0b11111111;
x = 0;
için (x = 0; x < 8; x++)
{
çıktı_b(a);
gecikme_ms(100);
bir = bir << 1;
}
Basla’ya git
}
Görüldüğü üzere aynı devre üzerinde komutlar çalıştırarak farklı dizilişler hazırlamak mümkün. Yaptığım tüm devreleri simülatör üzerinde test ettim ve sorunsuz çalışıyor, kodları aynı şekilde deneyebilirsiniz.
iyi şanslar…
katip: Ahmed Sardar Jeldaibi
Diğer gönderilerimize göz at
[wpcin-random-posts]