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();
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ş.
hocam bunu ccs ye nasıl uyarlayabilirim
//============================================================================
//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.
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--;
}
}
güncel...
hala güncel
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
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;
@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--;
}
}