Microchip C30 ile LED on/off

dspic_kucuk3 Merhaba, Şimdiki projemizle microchip C30’a ve dsPIC30F’e giriş yapacağız. Uygulamız çok basit ve portu hi/lo yapamayı sağlıyacağız.

Ücretsiz olan C30’un student versiyonunda rahatlıkla derleyebilirsiniz. Bu küçük uygulamayı 2006’da yaptığım için proje resimlerini ekleyemedim, yeniden kurmakta açıkçası zor geldi. Fakat aşağıya eklediğim resimdeki dsPIC4011 geliştirme boardunda ve dsPIC30F3010 için protoboard’ta denemiştim.

dspicled-buyukpic1

Şimdi uygulamaya geçelim.

/*****************************************************************************/
// Aykut ULUSAN, Elektronik Mühendisi, IZMIR
/*****************************************************************************/
// kullanacağımız işlemci dsPIC30F3010
#include "p30F3010.h"			                // header dosyası

// konfigürasyonu girelim, işlemci 20MIPS hızında çalışabilir, 10Mhz xtal ve PLL çarpanı 8
// osc 80Mhz hızında çalışacak bir komut ise 80/4=20Mhz hızında işlenir
_FOSC(CSW_FSCM_OFF & XT_PLL8);		     // osc=10Mhz *8 = 80 MHz
_FWDT(WDT_OFF);					     // Watchdog timer off
_FBORPOR(PBOR_OFF & PWRT_64 & MCLR_EN);	// Brown-out reset off, Power on reset 64ms,MCLR enable
_FGS(CODE_PROT_OFF);				   // code protect off

void DLY_MS(unsigned int ms);			    // 1ms - 65536ms
void DLY_US(unsigned int us);
void BIR_USN(void);
void PORTLARI_HAZIRLA(void);

int
main (void){
PORTLARI_HAZIRLA();
while(1){
LATB=0;                         // ledler off
DLY_MS(1000);               // 1sn bekle
LATB=0x000F;                // ledler on
DLY_MS(1000);              // 1sn bekle
}
}

void
PORTLARI_HAZIRLA(void){
ADPCFG = 0xFFFF;		// tüm portlar digital
PORTB=0;			   // tüm portları sil
PORTC=0;
PORTD=0;
PORTE=0;
TRISB=0x0000;		         // Portb nin tümü çıkış
}

void
BIR_USN(void){				  // 1 usn delay
// call ve return ile toplam 200ns
asm("REPEAT  #15");	       // (15+1)x50ns=800 usn
asm("nop");
}

// 1 usn - 65 535 usn arasında (65,536ms)
void
DLY_US(unsigned int us){
unsigned int c;
for(c=0;c<us;c++)
BIR_USN();
}

void
DLY_MS(unsigned int ms){
unsigned int c;
for(c=0;c<ms;c++)
DLY_US(1000);
}
/*****************************************************************************/
20 Yorum

Kutay için bir cevap yazın Cevabı iptal et

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