Şimdi asıl yazacağımız blink programını yazalım. Bunun için öncelikle kullandığımız işlemcinin registerlerinin adres tanımlarının gelmesi için
xc.h
isimli header'i program dahil etmemiz lazım. Sonra da blink zamanlamasını tutabilmek için,
_delay_ms
fonksiyonunun tanımlandığı
<util/delay.h>
header'i programa dahil etmemiz lazım. Ayrıca
_delay_ms
fonksiyonunun doğru çalışması için, işlemcinin saat hızını da tanımlamamız lazım.
#include <xc.h>
/* Arduino varsayilan saat hizi 16 MHz */
#define F_CPU 16000000L
#include <util/delay.h>
int main()
{
/* PB5 pinini OUTPUT yap */
DDRB = 0x20;
while (1)
{
PORTB = 0x20;
_delay_ms(500);
PORTB = 0x00;
_delay_ms(500);
}
return 0;
}
Şimdi bu programda ne yaptık? Öncelikle Arduino 16 MHz de çalıştığı için
F_CPU
yu 16 milyon olarak tanımladık. Böylece _delay_ms fonksiyonu milisaniye olarak doğru gecikmeyi üretir oldu.
Sonra Arduino devre şemasına bakarak üzerindeki LED'nin hangi pine bağlı olduğunu tespit ettik. LED, U5B bufferi üzerinden atmega328P nin PB5 portuna bağlı, yani PORT B ye bağlı.
Sonrasında PORTB nin 5 numaralı pinini output yaptık. Ondan sonra da sonsuz döngü içinde PORTB nin 5 numaralı pinini 1 ve 0 yapıyoruz.