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);
	}
}

Etiketler:, , , ,

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir