PIC24-LED(Karasimsek)

Merhaba,
Daha önce söylediğim gibi önceden hazırladığım küçük örnek programları sırasız olarak paylaşacağımı söylemiştim. Şimdi de led uygulamaları kapsamına giren karaşimsek led uygulamasının programını ekliyorum. Özellikle yeni başlayanlar için faydalı olacaktır.
/*
RB0-RB4 arasında karaşimşek led uygulaması
Aykut ULUSAN,Elektronik Mühendisi,IZMIR
www.uicroarm.com
Uygulama boardu : EX16L-A (16bit development board)
www.expkits.com'dan temin edebilirsiniz.
*/
#include <p24Fxxxx.h> // burada PIC24F serisi kullanacağımızı ifade ettik ama işlemciyi MPLAB içinde seçilir
_CONFIG1(0x3F20) // JTAG, WDF, flash memory'ye yazma kullanılmayacak
_CONFIG2(0x78EF) // Dahili fast rc osc enable, xtal uçları boş olacak
//Karşimşek ledlerindeki RB4'ün yanması için SWDIP6'daki rb4 on konumuna geterilmeli
#define NOP() {__asm__ volatile ("nop");}
#define CLRWDT() {__asm__ volatile ("clrwdt");}
#define SLEEP() {__asm__ volatile ("pwrsav #0");}
#define IDLE() {__asm__ volatile ("pwrsav #1");}
#define akis_hizi 35
void DLY_10US(unsigned int us);
void DLY_MS(unsigned int ms);
unsigned char asm_reg;
int
main(void){
OSCCONbits.COSC=0; // dahili osc
CLKDIV=0;
PORTA=0; // latch'leri temizle
AD1PCFG=0xFFFF; // portlar dijital
TRISA=0; asm("NOP"); // A portu çıkış
TRISB=0;
asm_reg=0x01; // default olarak RB0=1
while(1) {
while(asm_reg!=0x10){
PORTB=asm_reg;
DLY_MS(akis_hizi);
asm_reg<<=1;
}
while(asm_reg!=0x1){
PORTB=asm_reg;
DLY_MS(akis_hizi);
asm_reg>>=1;
}
}
}
// X*10US
void
DLY_10US(unsigned int us){
while(us--) {
__asm__ volatile ("repeat #165");
__asm__ volatile ("nop");
}
}
// 65536ms'ye kadar
void
DLY_MS(unsigned int ms){
while(ms--){
DLY_10US(100);
}
}