Programlama | Programlama Dilleri | C Programlama Dili |C++

Hata
  • XML Parsing Error at 1:82. Error 9: Invalid character
Anasayfa Programlama C / C++ Proteus Kullanarak MSP430 Alarm Saat Uygulamas?


Proteus Kullanarak MSP430 Alarm Saat Uygulamas?

G?R??

Projenin amac? Proteus program? kullanarak bir alarml? saat simülasyonu yapmakt?r. Labcenter Electronic firmas?n?n bir ürünü olan Proteus görsel olarak elektronik devrelerin simülasyonunu yapabilen yetenekli bir devre çizimi, simülasyonu, animasyonu ve PCB(Bask? Devre Kart?) çizimi program?d?r [1]. Proteus yüklemesiyle birlikte iki adet program gelir. Bunlardan birisi simülasyon için devrelerin haz?rland??? ISIS program?, di?eri bask? devre için devre elemanlar?n?n kart üzerine yerle?tirildi?i ARES program?d?r. Sadece simülasyon yap?laca?? için ISIS program? kullan?lm??t?r.

ISIS program? içerisinde birçok aktif ve pasif devre elemanlar? bar?nd?r?r. Bu program?n kütüphaneleri içinde bulunan devre elemanlar? kolay bir ?ekilde seçilip devreye eklenebilir ve kablo ba?lant?lar? yap?labilir.

Alarml? saat uygulamas? yap?l?rken saat devresinin kontrolünü sa?layacak bir mikrodenetleyici kullan?lmas? gerekmektedir. PROTEUS program? içerisinde çok fazla mikrodenetleyici mevcuttur. Bunlara Motorola firmas?n?n 68 ailesi, Microchip firmas?n?n PIC ailesi, 8051 mikrodenetleyiciler, AVR, Z80 mikroi?lemciler ve Texas Instruments firmas?n?n MSP430 ailesi örnek olarak verilebilir. Projeyi gerçekle?tirmek için seçilen mikrodenetleyicinin çok yüksek i?lem kapasitesi olmas?na gerek yoktur. Mikrodenetleyicinin yapmas? gereken i?lemler aras?nda; saat verisini ekranda göstermek, saati her saniyede bir güncellemek, kullan?c?dan giri?ler al?p saat ve alarm? ayarlamak ve alarm için kullan?c?ya uyar? vermek vard?r. Bu gereksinimler göz önüne al?nd???nda basit bir mikrodenetleyici ihtiyacm?z? kar??layabilmektedir. Mikrodenetleyici seçiminde en uygun seçenek Microchip firmas?ndan bir PIC kullanmak gibi gözükse de Texas Instruments firmas?n?n MSP430 ailesinden bir mikrodenetleyici kullan?lm??t?r. PIC için çok fazla Türkçe kaynak bulunmas?na ra?men daha önce çok az da olsa ara?t?rd???m ve a?ina oldu?um MSP430 seçilmi?tir. MSP430 için Texas Instruments firmas? ücretsiz olarak C derleyicisi ve IDE deste?i sa?lamaktad?r. MSP430 deste?i PROTEUS ile yeni gelen bir özelliktir. Bunun için simülasyonda Proteus 7.6 VSM sürümü kullan?lm??t?r.

 

KULLANILAN MALZEMELER

a.      4 Haneli 7 K?s?ml? Ortak Anotlu LED Görüntü Birimi

Alarm saat hakk?ndaki bilgileri göstermek için bu görüntü birimi kullan?lm??t?r. Saat ve dakika de?erlerini göstermek için 4 hane yeterli olacakt?r.

7 k?s?ml? görüntü birimi ortak anotlu ve ortak katotlu olarak ikiye ayr?l?r. 7 k?s?ml? ismini almas?n?n sebebi say?lar? gösterebilmek için 7 tane baca?a sahiptir. Görüntü birimindeki nokta i?aretini göstermek için bir bacak daha mevcuttur. A?a??daki ?ekilde ortak anotlu bir görüntü biriminin içyap?s? verilmi?tir.

 7 segmet display7 segment iç yap?s? diyotlu

Görüntü biriminde ???k vermeyi sa?layan her bir k?s?m birer LED’den olu?mu?tur. Ortak anotlu olmas? anot ucundan pozitif gerilim verildi?inde hangi k?s?mlar?n ucu topra?a(GND) ba?lanm??sa o k?s?mlar?n yanaca?? anlam?na gelir. Örne?in görüntü biriminde 7 rakam?n? elde etmek için ortak anotun art?(VCC,+); a, b ve c uçlar?n?n topra?a(GND) ba?lanmas? gerekir. Tek haneli görüntü birimi için toplam dokuz uç kullan?lmaktad?r.

Dört haneli görüntüyü sa?lamak için Proteus program?nda bulunan 7SEG-MPX4-CA-BLUE kodlu görüntü birimi kullan?lm??t?r. Bu görüntü biriminin toplam 12 tane ucu vard?r. Bunlardan 8 tanesi rakamlar? gösterecek k?s?mlar için, 4 tanesi de haneleri seçmek içindir. Görüntü biriminin Proteus program?ndaki görünümü ve içyap?s? a?a??daki ?ekilde verilmi?tir.

4 digit 7 segment display4 digit 7 segment display iç yap?s?

Ba?lant? ?emas? Lumex firmas?n?n üretti?i bir görüntü birimine aittir [3]. Bu ?emaya göre hane uçlar?ndan bir tanesi seçilip(pozitif gerilim uygulama) k?s?m uçlar?ndan da istenilen de?eri göstermek için gerekli uçlar? topra?a ba?lamak, istenilen hanede istenilen rakam?n gösterilmesini sa?layacakt?r. Örne?in birinci hanede 7 rakam?n? göstermek için 1 nolu ucu pozitif gerilime; a,b ve c uçlar?n? da topra?a ba?lamak yeterli olacakt?r.

?ekildeki görüntü birimi kullan?larak ayn? anda iki farkl? hanede iki farkl? de?er gösterilemez. Fakat saat de?erlerini göstermek için farkl? hanelerde farkl? de?erlerin gösterilmesi gerekir. Bu i?lemin nas?l yap?ld??? 3. bölümde anlat?lmaktad?r.

b.      MSP430F2131 Mikrodenetleyici

MSP430 Texas Instruments firmas?n?n üretti?i dü?ük güç tüketen yetenekli bir mikrodenetleyicidir. Simülasyonda kullan?lan MSP430F2131’in baz? özellikleri a?a??da verilmi?tir[4].

·         Dü?ük besleme gerilimi ile çal??ma(1.8V-3.6V)

·         Çok dü?ük güç tüketimi (ayg?tlar kapal? iken RAM de?erlerini koruma:0.1µA)

·         Temel Saat Modülü Ayarlar?:

§  16MHz’e kadar ç?kabilen ve ayarlanabilen içsel saat frekans?

§  32kHz kristal

§  D??ar?dan al?nabilen saat i?areti

§  Temel Saat Modülü Ayarlar?:

·         Voltaj dü?üklü?ü alg?lay?c?

·         16 bitlik Timer_A(zamanlay?c? devre)

·         16 adet genel amaçl? G/Ç baca??

MSP430F2131’in 20 bacakl? plastik k?l?f yap?s? a?a??daki ?ekilde verilmi?tir [4].

msp430 20 bacakl? plastik k?l?f bacaklar?

c.       Di?er Malzemeler

Saat modlar? aras?nda geçi? yapmak için ve de?erleri de?i?tirmek için 3 adet dokunsal dü?me(tactile button), Alarm sesini duyabilmek için 1 adet 2V ile çal??an buzzer.

 

ÇIKI?LARIN EKRANDA GÖSTER?LMES?

Bölüm 2.a’da anlat?ld??? gibi görüntü biriminde ayn? anda sadece bir de?er gösterilebilir. Saat de?erini göstermek için görüntü biriminin haneleri sürekli olarak taran?r. Tarama i?leminde ilk olarak birinci hane seçilir ve burada bu hanenin de?eri gösterilir. Sonras?nda ikinci hane seçilir ve burada bu hanenin de?eri gösterilir. Bu i?lemler dördüncü haneye kadar yap?l?r. Dördüncü hanedeki de?er gösterildikten sonra tekrar birinci hanedeki de?er gösterilir. Bu ?ekilde dönel olarak hanelerdeki de?erler sürekli olarak taran?r. Haneler aras?ndaki geçi? insan gözünün alg?layaca?? seviyeden daha dü?ük oldu?u için ayn? anda dört hane de görüntü biriminde gösteriliyormu? gibi olur.

Tarama i?lemi main fonksiyonu içerisinde sonsuz bir döngüde sürekli olarak yap?l?r. Saat de?erinin de?i?tirilmesi ve tu?lara bas?ld???nda yap?lacak i?lemler kesmelerle kontrol edilir. MSP430 mikrodenetleyicisinin G/Ç bacaklar? kesmeleri alg?layacak ?ekilde programlanabilir.

 

??LEMLER?N ZAMANLANMASI

MSP430 mikrodenetleyicilerinin 16 bitlik içsel bir zamanlay?c? birimi (TIMERA) bulunmaktad?r. Bu zamanlay?c? içerisinde basit bir say?c? devresi ve üç adet yakala/kar??la?t?r(capture/compare) birimi vard?r [5]. Bu zamanlay?c? kullan?larak zamanlama i?lemleri kesmeler ile kontrol edilebilir.

Zamanlama biriminin say?c? devresi çe?itli zamanlama i?aretleri kullanabilmektedir. Temel saat modül sisteminde(basic clock module system) tan?mlanan TACLK, ACLK, SMCLK, INCLK zamanlama biriminin kulland??? i?aretlerdir. Zamanlamay? sa?lamak için kristal osilatörden al?nan 32768 Hz’lik bir saat i?areti kullan?labilirdi. Fakat MSP430 mikrodenetleyicisinin içinde bulunan ACLK i?areti kullan?larak devrede kristal osilatör kullan?lmas?na gerek kalmam??t?r. ACLK i?areti Auxilary Clock olarak geçmektedir ve dü?ük h?zda i?lem yapan çevre birimleri için kullan?l?r. ACLK i?areti içsel dü?ük güçlü ve frekansl? bir osilatör i?areti olan VLOCLK’a yaz?l?msal olarak ba?lanabilir. Bu sayede 12kHz’lik bir ACLK i?areti üretilir. TIMERA birimi de zamanlama i?aretini ACLK’dan al?rsa TIMERA’n?n say?c? devresindeki de?er saniyede onikibin defa artar.

TIMERA içerisinde bulunan yakala/kar??la?t?r birimlerinin çe?itli çal??ma ?ekilleri vard?r. Devrede “UP MODE” ad? verilen her saat darbesinde say?c?n?n de?erini bir art?ran ve belirtilen de?ere gelince bir kesme üreten, sonras?nda yine s?f?rdan belirtilen de?ere kadar sayan ?ekilde çal??t?r?lm??t?r. “UP MODE” çal??ma ?ekli a?a??daki ?ekilde de gösterilmi?tir.

TACLK UP çal??ma modu

TIMERA için 12kHz’lik bir saat i?areti kullan?lmaktad?r. Bu birimin yakala/kar??la?t?r de?erine 12000 girmek, her saniyede bir kesme olu?mas?n? sa?layacakt?r. Fakat muhtemelen Proteus program?ndan kaynaklanan bir hatadan dolay? VLOCLK i?aretinin 24kHz frekans?nda olmaktad?r. Ayn? kod MSP430 Launchpad adl? geli?tirme kitinde denendi?inde VLOCLK i?aretinin frekans?n?n 12kHz oldu?u gözükmektedir.

 

KULLANICIDAN G?RD?LER?N ALINMASI

Saat, dakika, alarm?n saati ve dakikas?n? ayarlamak için kullan?c?n?n devreye müdahale edebilmesi gerekir. Bunlar MSP430 mikrodenetleyicisinin genel amaçl? G/Ç bacaklar?na ba?lanan dokunsal dü?melerle sa?lan?r. Devreyi kontrol etmek için üç adet dü?me bulunur. Bunlardan bir tanesi modlar aras?nda geçi? yapmak için, bir tanesi seçilen de?eri art?rmak için ve di?eri de seçilen de?eri azaltmak için kullan?l?r.

Dü?melere bas?ld??? esnada bir kesme olu?ur ve kesmenin kayna??na göre gerekli i?lem yap?l?r. Saatin toplam 6 çal??ma modu vard?r:

§  Normal: Saat ve dakika de?erleri görüntü biriminde gösterilir.

§  Saat Ayar?: Mevcut saat de?erinin de?i?tirilebilece?i moddur. Bu modda saat de?eri görüntü biriminde yan?p söner ve a?a??, yukar? dü?meleri ile de?eri ayarlanabilir.

§  Dakika ayar?: Mevcut dakika de?erinin de?i?tirilebilece?i moddur. Bu modda dakika de?eri görüntü biriminde yan?p söner ve a?a??, yukar? dü?meleri ile de?eri ayarlanabilir.

§  Alarm Saat Ayar?: Alarm?n saat de?erinin de?i?tirilebilece?i moddur. Bu modda alarm?n saat de?eri görüntü biriminde yan?p söner ve a?a??, yukar? dü?meleri ile de?eri ayarlanabilir.

§  Alarm Dakika ayar?: Alarm?n dakika de?erinin de?i?tirilebilece?i moddur. Bu modda alarm?n dakika de?eri görüntü biriminde yan?p söner ve a?a??, yukar? dü?meleri ile de?eri ayarlanabilir.

§  Alarm: Alarm çald??? andaki moddur. Bir dakika boyunca bu modda kal?r, saat ve dakika de?eri görüntü biriminde yan?p söner ve buzzer’ dan kesik kesik alarm sesi gelir.

 DEVRE BA?LANTILARI

MSP430F2131 entegresinin genel amaçl? 16 G/Ç baca??n?n 8 tanesi görüntü biriminin k?s?mlar?n? seçmek için ç?k??, 4 tanesi görüntü biriminin hanelerini seçmek için ç?k??, 3 tanesi dü?melerdeki bas?lmay? anlamak için giri? ve 1 tanesi de buzzer’dan ses alabilmek için ç?k?? olarak programlanm??t?r ve a?a??daki ?ekilde ba?lant?lar yap?lm??t?r. Karma??kl??? önlemek için Proteus’un bir özelli?i olan bus yap?s? kullan?lm??t?r. ?ekildeki mavi kal?n çizgi bu hatt? göstermektedir. Her bir ba?lant? gerekli isimle adland?r?lm??t?r ve ba?lant? noktas?n?n yan?nda yazmaktad?r.

TASARIM NOTLARI

§  Ba?lang?ç olarak program belle?i 1kB olan MSP430F2101 mikrodenetleyicisi kullan?lm??t?r. Fakat program boyutu artt?kça bu mikrodenetleyicinin program belle?i yetersiz kalm??t?r. Yap?lan derleyici optimizasyonlar?yla program boyutu 4kB’a kadar inmi?tir. Bunun üzerine MSP430F2131 mikrodenetleyicisi kullan?lm??t?r.

§  Saati ayarlama modlar?nda saniye de?erinin artmas? durdurulmu?tur. Yani saat veya alarm ayarlan?rken saat de?eri artmaz.

§  Yan?p sönme i?lemini gerçekle?tirmek için kesmeler her yar?m saniyede bir üretilmektedir. Normal modda çal???rken görüntü biriminin ikinci hanesindeki nokta yar?m saniye yanar, yar?m saniye sönük kal?r.

§  Gerçek devrelerde mikrodenetleyicinin bacaklar?na gelen ak?m? s?n?rlamak gerekebilir. Bunun için dirençler kullan?lmaktad?r. Fakat simülasyonda buna ihtiyaç duyulmam??t?r.

§  Görüntü birimine mikrodenetleyiciden giden ak?m? s?n?rlamak için transistorlar kullan?labilir. Fakat transistor kullan?ld???nda hem devre karma??kla?m??t?r hem de görüntü biriminde yan?p sönmeler meydana gelmi?tir.

§  Simülasyon yap?l?rken görüntü biriminin her bir hanesine de?er gönderildikten sonra gereksiz bir bekleme kodu eklenmi?tir. Bu kod eklenmedi?i takdirde görüntü biriminde anlams?z de?erler al?nmaktad?r.

§  Simülasyonun çal??mas? a?a??daki ba?lant?dan izlenebilir.

http://www.youtube.com/watch?v=8t5jPtU3DMo

 

 

 

Alarm saat devresinin Proteus program?ndaki görünümü


 

 

Program Kodu:

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. #include <io430x20x1.h>
  8.  
  9. #include "in430.h" /*Genel Kesmeleri aktif etmek için gereken ba?l?k dosyas?*/
  10.  
  11. #define DUGME1 P1IN_bit.P1IN_6
  12.  
  13. #define DUGME2 P1IN_bit.P1IN_7
  14.  
  15. //Saatin modlar?
  16.  
  17. #define MD_NORMAL 0;//Saatin normal çal??ma modu
  18.  
  19. #define MD_ST_AYAR 1;//Saat ayarlama modu
  20.  
  21. #define MD_DK_AYAR 2;//Dakika ayarlama modu
  22.  
  23. #define MD_AL_ST_AYAR 3;//Alarm saat ayarlama modu
  24.  
  25. #define MD_AL_DK_AYAR 4;//Alarm dakika ayarlama modu
  26.  
  27. #define MD_ALARM 5;//Alarm çalma modu
  28.  
  29.  
  30.  
  31. unsigned int SaatModu=0;
  32.  
  33. const unsigned char seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  34.  
  35. unsigned char digits[4];
  36.  
  37. int saat=0,dakika=0,saniye=0;
  38.  
  39. int alrsaat=1,alrdakika=1;
  40.  
  41. int yanson=0;
  42.  
  43. unsigned int DurumSayaci=0;
  44.  
  45. void delay(unsigned long int ms)
  46.  
  47. {
  48.  
  49.   for(unsigned long int i=0;i<ms;i++);
  50.  
  51. }
  52.  
  53.  
  54.  
  55. void SaniyeArtir()
  56.  
  57. {
  58.  
  59.   saniye++;
  60.  
  61.   if(saniye==60)
  62.  
  63.   {
  64.  
  65.     saniye=0;
  66.  
  67.     dakika++;
  68.  
  69.     if(dakika==60)
  70.  
  71.     {
  72.  
  73.       dakika=0;
  74.  
  75.       saat++;
  76.  
  77.       if(saat==24)
  78.  
  79.         saat=0;
  80.  
  81.     }
  82.  
  83.   }
  84.  
  85. }
  86.  
  87.  
  88.  
  89. void SaatBastir()
  90.  
  91. {
  92.  
  93.   int bekleme=1000;
  94.  
  95.   if(yanson && SaatModu==5)
  96.  
  97.     P2OUT=0x11;
  98.  
  99.   else    
  100.  
  101.     P2OUT=0x01;
  102.  
  103.   P1OUT=digits[0];
  104.  
  105.   delay(bekleme);
  106.  
  107.   if(yanson && SaatModu==5)
  108.  
  109.     P2OUT=0x12;
  110.  
  111.   else    
  112.  
  113.     P2OUT=0x02;
  114.  
  115.   P1OUT=digits[1];
  116.  
  117.   delay(bekleme);
  118.  
  119.   if(yanson && SaatModu==5)
  120.  
  121.     P2OUT=0x14;
  122.  
  123.   else    
  124.  
  125.     P2OUT=0x04;
  126.  
  127.   P1OUT=digits[2];
  128.  
  129.   delay(bekleme);
  130.  
  131.   if(yanson && SaatModu==5)
  132.  
  133.     P2OUT=0x18;
  134.  
  135.   else    
  136.  
  137.     P2OUT=0x08;
  138.  
  139.   P1OUT=digits[3];
  140.  
  141.   delay(bekleme);
  142.  
  143. }
  144.  
  145.  
  146.  
  147.  
  148.  
  149. void main( void )
  150.  
  151. {
  152.  
  153. WDTCTL = WDTPW + WDTHOLD;//Watchdog timer durduruluyor...
  154.  
  155. BCSCTL3 |= LFXT1S_2;//ACLK için VLO kullan, yakla??k 12Khz
  156.  
  157. BCSCTL1 = CALBC1_1MHZ;// Set DCO to 1MHz
  158.  
  159. DCOCTL = CALDCO_1MHZ;
  160.  
  161. CCR0  = 12000-1;// 12000 saat darbesinde 1 kesme üretilecek
  162.  
  163. CCTL0 = CCIE;// CCR0 kesmeleri aktif
  164.  
  165. TACTL = TASSEL_1+MC_1;// TimerA için ACLK'i saat olarak seç, upmode
  166.  
  167. //TACCTL0|=CM_3;
  168.  
  169. P1DIR = 0xFF;   //P1 ç?k??...
  170.  
  171. P2DIR = 0X1F;   //P2.6 ve P2.7 giri? di?erleri ç?k??
  172.  
  173. //port interruptlar?n? aktif etme
  174.  
  175. P2IE_bit.P2IE_5=1;//P2.5 için interruptlar? aktif yapma
  176.  
  177. P2IES_bit.P2IES_5=1;//P2.5 için interrupt ç?kan kenarda
  178.  
  179. P2IFG_bit.P2IFG_5=0;//P2.5 için interrupt bayra??n? s?f?rla
  180.  
  181. P2IE_bit.P2IE_6=1;//P2.6 için interruptlar? aktif yapma
  182.  
  183. P2IES_bit.P2IES_6=1;//P2.6 için interrupt ç?kan kenarda
  184.  
  185. P2IFG_bit.P2IFG_6=0;//P2.6 için interrupt bayra??n? s?f?rla
  186.  
  187. P2IE_bit.P2IE_7=1;//P2.7 için interruptlar? aktif yapma
  188.  
  189. P2IES_bit.P2IES_7=1;//P2.7 için interrupt ç?kan kenarda
  190.  
  191. P2IFG_bit.P2IFG_7=0;//P2.7 için interrupt bayra??n? s?f?rla
  192.  
  193.  
  194.  
  195. _BIS_SR(GIE);// kesmeleri aktif et
  196.  
  197.  
  198.  
  199.  while(1)
  200.  
  201.  {
  202.  
  203.    DurumSayaci++;
  204.  
  205.    if(SaatModu == 0 ) //MD_NORMAL
  206.  
  207.    {
  208.  
  209.      digits[0]=seg[saat/10];
  210.  
  211.      digits[1]=seg[saat%10];
  212.  
  213.      digits[2]=seg[dakika/10];
  214.  
  215.      digits[3]=seg[dakika%10];
  216.  
  217.      if(yanson)
  218.  
  219.        digits[1]&=0x7F;
  220.  
  221.    }
  222.  
  223.  
  224.  
  225.    else if(SaatModu==1)//MD_ST_AYAR
  226.  
  227.    {
  228.  
  229.      if(DurumSayaci<50)
  230.  
  231.      {
  232.  
  233.         digits[0]=0x88;//A harfi
  234.  
  235.         digits[1]=0x91;//Y Harfi
  236.  
  237.         digits[2]=0x88;//A harfi
  238.  
  239.         digits[3]=0xAF;//r harfi
  240.  
  241.  
  242.  
  243.      }
  244.  
  245.      else
  246.  
  247.      {
  248.  
  249.       if(yanson)
  250.  
  251.       {
  252.  
  253.         digits[0]=seg[saat/10];
  254.  
  255.         digits[1]=seg[saat%10];
  256.  
  257.         digits[2]=seg[dakika/10];
  258.  
  259.         digits[3]=seg[dakika%10];
  260.  
  261.       }
  262.  
  263.       else
  264.  
  265.       {
  266.  
  267.         digits[0]=0xFF;
  268.  
  269.         digits[1]=0xFF;
  270.  
  271.         digits[2]=seg[dakika/10];
  272.  
  273.         digits[3]=seg[dakika%10];
  274.  
  275.       }
  276.  
  277.      }
  278.  
  279.    }
  280.  
  281.    else if(SaatModu==2)//MD_ST_AYAR
  282.  
  283.    {
  284.  
  285.       if(yanson)
  286.  
  287.       {
  288.  
  289.         digits[0]=seg[saat/10];
  290.  
  291.         digits[1]=seg[saat%10];
  292.  
  293.         digits[2]=seg[dakika/10];
  294.  
  295.         digits[3]=seg[dakika%10];
  296.  
  297.       }
  298.  
  299.       else
  300.  
  301.       {
  302.  
  303.         digits[0]=seg[saat/10];
  304.  
  305.         digits[1]=seg[saat%10];
  306.  
  307.         digits[2]=0xFF;
  308.  
  309.         digits[3]=0xFF;
  310.  
  311.       }
  312.  
  313.    }
  314.  
  315.    else if(SaatModu==3)//MD_AL_ST_AYAR
  316.  
  317.    {
  318.  
  319.      if(DurumSayaci<50)
  320.  
  321.      {
  322.  
  323.         digits[0]=0x88;//A harfi
  324.  
  325.         digits[1]=0xC7;//L Harfi
  326.  
  327.         digits[2]=0xAF;//r harfi
  328.  
  329.         digits[3]=0xFF;
  330.  
  331.      }
  332.  
  333.      else
  334.  
  335.      {
  336.  
  337.       if(yanson)
  338.  
  339.       {
  340.  
  341.         digits[0]=seg[alrsaat/10];
  342.  
  343.         digits[1]=seg[alrsaat%10];
  344.  
  345.         digits[2]=seg[alrdakika/10];
  346.  
  347.         digits[3]=seg[alrdakika%10];
  348.  
  349.       }
  350.  
  351.       else
  352.  
  353.       {
  354.  
  355.         digits[0]=0xFF;
  356.  
  357.         digits[1]=0xFF;
  358.  
  359.         digits[2]=seg[alrdakika/10];
  360.  
  361.         digits[3]=seg[alrdakika%10];
  362.  
  363.       }
  364.  
  365.      }
  366.  
  367.    }
  368.  
  369.    else if(SaatModu==4)//MD_AL_DK_AYAR
  370.  
  371.    {
  372.  
  373.       if(yanson)
  374.  
  375.       {
  376.  
  377.         digits[0]=seg[alrsaat/10];
  378.  
  379.         digits[1]=seg[alrsaat%10];
  380.  
  381.         digits[2]=seg[alrdakika/10];
  382.  
  383.         digits[3]=seg[alrdakika%10];
  384.  
  385.       }
  386.  
  387.       else
  388.  
  389.       {
  390.  
  391.         digits[0]=seg[alrsaat/10];
  392.  
  393.         digits[1]=seg[alrsaat%10];
  394.  
  395.         digits[2]=0xFF;
  396.  
  397.         digits[3]=0xFF;
  398.  
  399.       }
  400.  
  401.      }   
  402.  
  403.    else if(SaatModu==5)//MD_ALARM
  404.  
  405.    {
  406.  
  407.       if(yanson)
  408.  
  409.       {
  410.  
  411.         digits[0]=seg[alrsaat/10];
  412.  
  413.         digits[1]=seg[alrsaat%10];
  414.  
  415.         digits[2]=seg[alrdakika/10];
  416.  
  417.         digits[3]=seg[alrdakika%10];
  418.  
  419.       }
  420.  
  421.       else
  422.  
  423.       {
  424.  
  425.         digits[0]=0xFF;
  426.  
  427.         digits[1]=0xFF;
  428.  
  429.         digits[2]=0xFF;
  430.  
  431.         digits[3]=0xFF;
  432.  
  433.       }
  434.  
  435.      }   
  436.  
  437.  SaatBastir();
  438.  
  439.  }
  440.  
  441. }
  442.  
  443.  
  444.  
  445.  
  446.  
  447. #pragma vector=TIMERA0_VECTOR
  448.  
  449. __interrupt void TIMERA0_ISR(void) {
  450.  
  451.   yanson=!yanson;
  452.  
  453.   if(dakika==alrdakika && saat==alrsaat && SaatModu==0)
  454.  
  455.     SaatModu=5;//Alarm çalma moduna geç
  456.  
  457.   if(yanson && SaatModu==0)
  458.  
  459.   {
  460.  
  461.     SaniyeArtir();
  462.  
  463.   }
  464.  
  465.   else if(SaatModu==5)
  466.  
  467.   {
  468.  
  469.     if(yanson)
  470.  
  471.       SaniyeArtir();
  472.  
  473.     if(dakika!=alrdakika || saat!=alrsaat)
  474.  
  475.       SaatModu=0;
  476.  
  477.   }
  478.  
  479.   _BIC_SR_IRQ(LPM3_bits);
  480.  
  481. }
  482.  
  483.  
  484.  
  485. #pragma vector=PORT2_VECTOR
  486.  
  487. __interrupt void PORT2_ISR(void)
  488.  
  489. {
  490.  
  491.   if(P2IFG_bit.P2IFG_7==1)
  492.  
  493.   {
  494.  
  495.     if(SaatModu!=5)
  496.  
  497.     {
  498.  
  499.       SaatModu=(SaatModu+1)%5;//Mod de?i?tirme
  500.  
  501.       DurumSayaci=0;
  502.  
  503.     }
  504.  
  505.     P2IFG_bit.P2IFG_7=0; //P2.7 kesme bayra?? temizleniyor.
  506.  
  507.   }
  508.  
  509.   else if(P2IFG_bit.P2IFG_6==1)
  510.  
  511.   {
  512.  
  513.     if(SaatModu==1)//MD_ST_AYAR
  514.  
  515.     {
  516.  
  517.       saat=(saat+1)%24;
  518.  
  519.     }
  520.  
  521.     else if(SaatModu==2)//MD_ST_AYAR
  522.  
  523.     {
  524.  
  525.       dakika=(dakika+1)%60;
  526.  
  527.     }
  528.  
  529.     else if(SaatModu==3)//MD_AL_ST_AYAR
  530.  
  531.     {
  532.  
  533.       alrsaat=(alrsaat+1)%24;
  534.  
  535.     }
  536.  
  537.     else if(SaatModu==4)//MD__AL_DK_AYAR
  538.  
  539.     {
  540.  
  541.       alrdakika=(alrdakika+1)%60;
  542.  
  543.     }
  544.  
  545.     P2IFG_bit.P2IFG_6=0; //P2.6 kesme bayra?? temizleniyor.
  546.  
  547.   }
  548.  
  549.   else
  550.  
  551.   {
  552.  
  553.     if(SaatModu==1)//MD_ST_AYAR
  554.  
  555.     {
  556.  
  557.       saat=(saat-1+24)%24;
  558.  
  559.     }
  560.  
  561.     else if(SaatModu==2)//MD_ST_AYAR
  562.  
  563.     {
  564.  
  565.       dakika=(dakika-1+60)%60;
  566.  
  567.     }
  568.  
  569.     else if(SaatModu==3)//MD_AL_ST_AYAR
  570.  
  571.     {
  572.  
  573.       alrsaat=(alrsaat-1+24)%24;
  574.  
  575.     }
  576.  
  577.     else if(SaatModu==4)//MD__AL_DK_AYAR
  578.  
  579.     {
  580.  
  581.       alrdakika=(alrdakika-1+60)%60;
  582.  
  583.     }
  584.  
  585.     P2IFG_bit.P2IFG_5=0; //P2.5 kesme bayra?? temizleniyor.
  586.  
  587.   }
  588.  
  589. }

KAYNAKLAR

[1]           http://tr.wikipedia.org/wiki/Proteus , 02.01.11

[2]           http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionId=95&tabId=140&familyId=342, 02.01.11

[3]           http://www.lumex.com/specs/LDQ-M284RI.pdf, 03.01.11

[4]           MSP430x21x1 Mixed Signal Microcontroller (Rev. D)

[5]           MSP430x2xx Family User's Guide (Rev. F)

Yorumlar (0)
Sadece kayıtlı kullanıcılar yorum yazabilir!
Son Güncelleme ( Çarşamba, 10 Ağustos 2011 20:54 )  
amınıza koyayım amınıza koyayım amınıza koyayım amınıza koyayım amınıza koyayım amınıza koyayım