Devre elemanlarının uçlarına isim vererek bağlantıları anlatmaya çalışacağım.
msp 430 dijital saat uygulaması |
#include "io430.h"
#include "in430.h"
#include "intrinsics.h"
unsigned int saniye=0, dakika=2, saat=16, mod=0;
int digit[4];
void saatbilgisi(void);
void saniyeartir(void);
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //Watchdog Timer'ı Kapattık
BCSCTL1= CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
TACCTL0 = CCIE;
TACCTL1 = CCIE;
__enable_interrupt(); //Genel kesmeler aktir
CCTL0=CCIE; //CCR0 için Kesme Aktif
CCTL1=CCIE;
TACCR0=65535 ; //65535 kesme = 1 saniye
TACCR1=65535 ;
TACTL=TASSEL_2 + MC_3 + ID_3 + TAIE; //ACLK,Up Mod,Timer Kesmesi Aktif
P1DIR = 0xFF; //P1 yönlendirmesi
P2DIR = 0xF0; // P2 Yönlendirmesi
P2SEL = 0x00;
P1OUT = 0x00; //P1 Portu sıfırlandı
P2OUT = 0xF0;
__delay_cycles(50000000); // 5000000 kes çalıştır.
_BIS_SR(LPM3_bits + GIE); // CPU LPM3 Modunda ve Genel Kesmeler Aktif
}
void saniyeartir(void) //saat fonksiyonu
{
saniye++;
if(saniye==60)
{
saniye=0;
dakika++;
if(dakika==60)
{
dakika=0;
saat++;
if(saat==24)
saat=0;
}
}
TACTL_bit.TAIFG=0;
}
void saatbilgisi(void) //tarama fonksiyonu
{
digit[0]=saat/10;
digit[1]=saat%10;
digit[2]=dakika/10;
digit[3]=dakika%10;
P1OUT = 0x10 | digit[0];
__delay_cycles(5000);
P1OUT = 0x20 | digit[1];
__delay_cycles(5000);
P1OUT = 0x40 | digit[2];
__delay_cycles(5000);
P1OUT = 0x80 | digit[3];
__delay_cycles(5000);
TACTL_bit.TAIFG=0;
}
//Kesme vektörleri (A0)
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
saniyeartir();
TACTL_bit.TAIFG = 0;
}
// A1 Kesme Vektörü
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1 (void)
{
saatbilgisi();
TACTL_bit.TAIFG = 0;
}
Umarım işinize yarar. Kolay gelsin.
bu programda dahili kristal mi kullandınız yoksa harici mi
YanıtlaSilDahili kristal kullanıldı.
YanıtlaSilBu yorum yazar tarafından silindi.
YanıtlaSilio430.h dosyası bulunamadı hatası veriyor
YanıtlaSil