Arkadaşlar merhaba,

Uzun bir aradan sonra tekrar birlikteyiz. Gerek işlerin yoğunlundan gerek tembellikten derslerimizin devamını bir türlü getiremedim. İşte uzun bir aradan sonra CCS dersleri ve uygulamalarımıza devam edelim.

Hatırlarsınız, geçen derste Kesme (İnterrupt) ve Timer (zamanlayıcı) dan bahsettik. Timer Hesabı yaptık. Bu dersimizde öğrendiklerimizi uygulayalım ve bir 0-999 arası sayıcı yapalım.

Programımızın timer kesmeleri üzerine kurulu. Programımız size biraz uzun gelebilir, 0-999 arası sayıcı tabi ki daha kolay biçimde yapılabilir ama bizim amacımız timer ve kesme olayını kavramak olduğundan bu şekilde yazdık programımızı..

Kısacası Bu örnekte Timer kesmelerinin çalışma mantığını anlayacağız. Önce programı inceleyin, sonra programın çalışmasını anlatalım:

 

#include "main.h"

unsigned int16 sayac;
  byte yuzler=0;
  byte onlar=0;
  byte birler=0;
 
const byte EkranTablo[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void EkranGoster(void);

#INT_TIMER0
void EkranTarama() //500us
{ static unsigned int8 m=0;
  static byte a=1;
m++;

if (m >= 100)
{
  output_c(a);
  a=a*2;
  if (a>=8) a=1;
  m=0;
}

set_timer0(6);

}

#INT_TIMER2
void SayiciArtir()  //5ms
{
 static unsigned int16 k=0;
 
 k++;
 
if (k >= 500)
{
sayac++;
k=0;
if (sayac>=1000) sayac=0;
}

}

void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
Set_timer0(6);
  
setup_timer_2(T2_DIV_BY_4,249,10);
 
 set_tris_c(0x00);
 set_tris_d(0x00);
 
   Enable_Interrupts(INT_TIMER0);
   Enable_Interrupts(INT_TIMER2);
   Enable_Interrupts(GLOBAL);

while(1)
{
delay_ms(10);
EkranGoster();
delay_ms(10);
}

}

Void  EkranGoster()      
{
  unsigned int16 hammal;
  hammal=sayac;

if (hammal <=999)
{
   while(hammal >= 100)
   {hammal=hammal-100;
   yuzler++;
   }
  
   while(hammal >= 10)
   {hammal=hammal-10;
   onlar++;
   }
  
   while(hammal >= 1)
   {hammal=hammal-1;
   birler++;
   }
  
}  

Output_d(EkranTablo[yuzler]);
delay_us(60);
Output_d(EkranTablo[onlar]);
delay_us(60);
Output_d(EkranTablo[birler]);
delay_us(60);

}

 

TAGS: PIC ile 0-99 sayıcı, 0-9 sayıcı, kesmeler ve zamanlayıcılar, up counter, altium designer indir, altium designer türkçe kaynak, altium designer dersleri, altium designer türkçe kitap, altium öğren, altium devre tasarımı. 

 

Anahtar Kelimeler: Mikrodenetleyici

peynir6 suyu tozu , 31/07/2008-11:08 Facebook'ta Paylas