16F877 Led Toggle Uygulaması
Daha önceki konularımız anlaması daha kolay, port sayısı daha az olan 16F84A modeliydi. Bugün 16F877 modeline geçeceğiz. 16F877 modeli, birçok yönden 16F84A modelinden üstün bir pic tir. Öncelikle 16F877’ten bahsedersek, A,B,C,d ve E olmak üzere 5 tane port vardır ve toplam 40 ayağı bulunur. CCS’te 16F877’yi programlarken,16F84’te tanımlamadığımız birkaç farklı kod olacaktır.
HEX ve Binary sayı sistemlerinden haberdar olmak önemlli ve gereklidir. Hex sayı sistemi, 16’lık tabanda yazılan sayı sistemidir. Binary ise, ‘lik tabanda. Örneğin 0b0001 bir binary sayıdır. 0b kısmı bu sayının binary olduğunu göstermek içindir. Aynı şekilde 0x00 da bir hex sayısıdır. Burada da 0x kısmı bu sayının hexa desimal bir sayı olduğunu göstermek içindir.
16F877 için hazırlamış olduğumuz kodlara bakacak olursak;
#include “C:\Program Files\PICC\Examples\bilg.-3.h”
#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nowrt,nodebug,nocpd
#use delay(clock=4000000)
#use fast_io(b)
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_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);
// TODO: USER CODE!!
setup_CCP1(CCP_OFF); //CCP1 devre dışı bırakılır
setup_CCP2(CCP_OFF); //CCP2 devre dışı bırakılır
set_tris_b(0x00); //RB portu tamamı çıkış
output_b(0x00); // B portu çıkış olarak ayarlanır.
basla:
delay_ms(400); //400ms gecikme
output_toggle(pin_b0); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b1); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b2); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b3); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b4); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b5); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b6); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
output_toggle(pin_b7); //RB0 ucunun çıkış durumu tersleniyor
delay_ms(400); //400ms gecikme
goto basla;
}
Aynı programı farklı kodlarla ve farklı şekillerde yapmak isterseniz;
Sırayla binary sayı sayan bir kod;
#include “C:\Program Files\PICC\Examples\bilg.-3.h”
#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nowrt,nodebug,nocpd
#use delay(clock=4000000)
#use fast_io(b)
int16 x;// x isminde bir sayı
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_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);
// TODO: USER CODE!!
setup_CCP1(CCP_OFF); //CCP1 devre dışı
setup_CCP2(CCP_OFF); //CCP2 devre dışı
set_tris_b(0x00); //RB portu tümüyle çıkış
output_b(0x00); // B portu çıkış
basla:
x=0;
a:
if (x<0b1111111)
{
x++;
output_b(x);
delay_ms(100);
goto a;
}
goto basla;
}
Bir başka; sırayla yukardan aşağı doğru sönen bir kod;
#include “C:\Program Files\PICC\Examples\bilg.-3.h”
#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nowrt,nodebug,nocpd
#use delay(clock=4000000)
#use fast_io(b)
int16 x;// x isminde bir sayı
int a;
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_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);
// TODO: USER CODE!!
setup_CCP1(CCP_OFF); //CCP1 devre dışı
setup_CCP2(CCP_OFF); //CCP2 devre dışı
set_tris_b(0x00); //RB portu tümüyle çıkış
output_b(0x00); // B portu çıkış
basla:
a=0b11111111;
x=0;
for(x=0;x<8;x++ )
{
output_b(a);
delay_ms(100);
a=a<<1;
}
goto basla;
}
Görüldüğü üzere, komutlarda oynanarak, aynı devre üzerinde farklı oluşumlar hazırlamak mümkündür. Ben hazırladığım bütün devreleri similatör üzerinde test ettim ve sorunsuz çalışıyor, aynı şekilde sizlerde kodları deneyebilirsiniz.
Başarılar…
Yazar: Ahmet Serdar Güldibi
Merhabalar 19 Mayıs 2016 tarihli bu bilgi verici yazımızı SAFFET GÜDER yazarımız Bilgi Ustamız sitemizde, 16F877 Led Toggle Uygulaması başlıklı konu hakkında bilgi ve tecrübelerini bizlerle paylaştı kendisine teşekkür ederiz.
0 yorum:
Yorum Gönder