Atmelci Arkadaşlar Bir Bakın.

Başlatan stm, 28 Şubat 2015, 21:31:17

stm

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();

SERRO EFE

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ş.

stm

hocam bunu ccs ye nasıl uyarlayabilirim

bmutlu

#3
//============================================================================
//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..
//============================================================================




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

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



Resmi yükleyemedim o yüzden tekrar gönderdim.

stm

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--;
   }
}




stm


stm


magnetron

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

stm

#8
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


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;

bmutlu

@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--;
	}
}