Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: stm - 28 Şubat 2015, 21:31:17

Başlık: Atmelci Arkadaşlar Bir Bakın.
Gönderen: stm - 28 Şubat 2015, 21:31:17
aşağıdaki kodların ccs deki karşılığı nedir.

en azından kodların karşısına açıklama yazabilirseniz gerisini çözerim.

mesala hangi satırda ne yapılmış.


//============================================================================

void Init_Timer()
{
   TMOD = 0x02;     
   TL0 = Timer_250us;
   TH0 = Timer_250us;
   
   ET0 = 1;
   EA = 1;
}

//============================================================================
void Timer0_ISR() interrupt 1   using 1
{
   TR0 = 0;
   
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1;
      uc_dsa_timeout--;
   }
}


TR0 = 1;
Init_Timer();
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: SERRO EFE - 28 Şubat 2015, 22:47:10
Kodların karşısına birşey yazmaya gerek yok aslında işlemci hızına göre init timerla 250uS de kesme oluşturulacak bir timer kurulmuş.
Timer0_isr de ise "uc_dsa_timeout" değerini 0 olana kadar her kesmede 1 eksiltmiş.
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: stm - 01 Mart 2015, 20:39:13
hocam bunu ccs ye nasıl uyarlayabilirim
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: bmutlu - 02 Mart 2015, 01:24:20

//============================================================================
//Burada cihaz ilk açıldığında set etme işleminde kullanılır ..
void Init_Timer()
{
   TMOD = 0x02; // ----------> Mode 2: 8-bit auto-reload timer/counter (TL0). Reloaded from TH0 at overflow.
// Burasi Timer 0 kesmesi 8-bit otomatik yükleme yapmakta her kesmede TL0 daki deger TH0 a aktarılır.
   TL0 = Timer_250us; // TL0 registerine ilk yükleme yapılır.
   TH0 = Timer_250us; // TH0 registerine ilk yükleme yapılır.
   
   ET0 = 1; // Timer 0 kesmesinin aktif edildi.
   EA = 1; // Tüm kesmeler aktif edilir.
}

//============================================================================

//============================================================================
//Burasi Timer 0 kesmesinin olduğu yer her kesme olduğunda buraya gelinir..
void Timer0_ISR() interrupt 1   using 1
{
   TR0 = 0; // Kesmenin sayması durdurulur..
   // Burada uc_dsa_timeout durumuna göre koşul sorgulanıyır..
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1; // Kesmenin sayması başlatılır ..
      uc_dsa_timeout--;
   }
}
// Kesmeden çıkılır..
//============================================================================


(http://postimg.cc/image/bp7a2wbtj/)

Anlayamadığınız bir yer varsa yazın yardımcı olalım..

mesaj birleştirme:: 02 Mart 2015, 01:27:35

(http://s7.postimg.cc/p648lrm57/timer0.jpg)

Resmi yükleyemedim o yüzden tekrar gönderdim.
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: stm - 03 Mart 2015, 22:11:37
yardımlarınız için çok teşekkür ederim bazı kısımlarınız ccs ye çevirdim ama takıldığım bir iki nokta var.

Atmel kodları


void Init_Timer()
{
   TMOD = 0x02;     
   TL0 = Timer_250us;
   TH0 = Timer_250us;
   
   ET0 = 1;
   EA = 1;
}

//============================================================================
void Timer0_ISR() interrupt 1   using 1
{
   TR0 = 0;
   
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1;
      uc_dsa_timeout--;
   }
}




CCS ye çevirmeye çalıştığım Kodlar


void Init_Timer()
{
TMOD = 0x02;           // çeviremedim
TL0 = Timer_250us;  // çeviremedim
TH0 = Timer_250us;  // çeviremedim
   
   enable_interrupts(INT_TIMER0);  // KESME AKTİF
   enable_interrupts(GLOBAL);         //TÜM KESMELER AKTİF
}



void  TIMER0_isr(void)  //KESME FONKSİYONU
{
   TR0 = 0; // çeviremedim
   
   if(uc_dsa_timeout > 0)
   {
      TR0 = 1;  // çeviremedim
      uc_dsa_timeout--;
   }
}



Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: stm - 04 Mart 2015, 20:45:49
güncel...
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: stm - 05 Mart 2015, 22:44:59
hala güncel
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: magnetron - 05 Mart 2015, 23:11:43
hocam ilk örnekteki kodlar 8052 işlemcisi için yazılmış

çevirmeye çalıştığınız hangi işlemci ?

8052 ile aynı timer veya registerler onda da var mıdır ? bence yoktur

o yüzden ilk örnekten ancak fikir alabilirsiniz

o da bir timer kesmesi oluşturup kesmenin içinde bir değişkeni birer birer azaltıyor
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: stm - 05 Mart 2015, 23:22:20
hocam asıl işlemci bu STC10F04 8051 tabanlı imiş.

ilk açtığım konu linki burda https://www.picproje.org/index.php/topic,57344.msg447277.html#msg447277 (https://www.picproje.org/index.php/topic,57344.msg447277.html#msg447277)


mesaj birleştirme:: 06 Mart 2015, 00:00:53

bu kodların ccs karşılığı nedir


TMOD = 0x02;         
TL0 = Timer_250us; 
TH0 = Timer_250us; 
TR0 = 0;
Başlık: Ynt: Atmelci Arkadaşlar Bir Bakın.
Gönderen: bmutlu - 06 Mart 2015, 10:28:05
@stm

Devrenizin ne iş yaptığını bilmediğim için ve verilen program parçası seviyesinde ancak yardımcı olabiliyorum size.Çeviremediğiniz kısımları aşağıda çevirdim..


//
// Not: iki entegrenin Timer kesmelerinin mantıgını uydurmak için 39631E.pdf
// dosyasının 124 nolu sayfada Sekil 11-1 e bakarsanız daha önce verdiğim
// sekle uydurmamız gerekir bu yüzden T0CKI pin ni bir dirençle 1 - 2 k
// dirençle GND ye bagla pini giriş yapmayı unutma ve T0SE bitini de 1 yap.
//

void Init_Timer()
{
//  TMOD = 0x02;           // çeviremedim
// Burad Timer0 kesmesini Timer0 8 bit olacak sekilde
// set et ve Timer_250us dan dolayı kesme 250uS olacak sekilde set et.
//
// Timer_250us -> kesmenin 250uS olmasını ayarlamak için TMR0L eklenmesi gereken sayı.
//
TMR0L = Timer_250us;
// TL0 = Timer_250us;  // çeviremedim
// TH0 = Timer_250us;  // çeviremedim
   T0SE = 1;
   enable_interrupts(INT_TIMER0);  // KESME AKTİF
   enable_interrupts(GLOBAL);         //TÜM KESMELER AKTİF
}



void  TIMER0_isr(void)  //KESME FONKSİYONU
{
T0CS = 1; //   TR0 = 0; // çeviremedim
TMR0L = TMR0L + Timer_250us;
TMR0IF = 0;   
if(uc_dsa_timeout > 0)
{
T0CS = 0; //TR0 = 1;  // çeviremedim
uc_dsa_timeout--;
}
}