• Forumu kullanabilmek için lütfen üye olunuz. 😊

MS51FB9AE'de 1ms periyodik timer interrupt

Bowman

Üye
Merhabalar. Normalde Nuvoton'un ARM tabanlı işlemcilerini kullanıyordum fakat bu sefer 8051 mimarili bir MS51FB9AE ile çalışıyorum. Arduinodaki millis ya da ARM işlemcilerdeki HAL_GetTick fonksiyonlarının bir benzerini bu işlemcide nasıl yapabilirim? 1mslik bir periyodik timer ayarlayamadım da.
 

iekmekci

Moderator
Yetkili
Merhaba,

Arduinodaki millis fonksiyonu arka planda bir Timer'ın bu değerlere set edilerek sizlere değer döndürmesi ile gerçekleşmekte.
ARM mimaride ise SYSTick Timer bu işi kendisi halletmekte.
Eğer 8051 mimarisinde çalışacak ve bu tarz bir fonksiyona gerek duyulacak ise tavsiyemiz;

Timer0, Timer1 veya Timer3 ü bu özellik için 1ms interrupta ayarlayarak bir değişkeni arttırmanız.
daha sonra oluşturacağınız
uint32_t millis(void)
{
return ms1timer;
}
şeklinde bir fonksiyon ile aynı işlemi gerçekleştirebilirsiniz.
Buradaki ms1timer global olarak volatile olarak set edilmeli ve Timer interrupt içerisinde arttırılmalı.
 

Bowman

Üye
İbrahim Bey cevabınız için teşekkürler. Aslında yolunu buldum da burada paylaşmayı unutmuşum. İhtiyacı olan olursa diye paylaşayım.
Zaten geri kalan systemTick gibi bir değişken tanımlama ve millis fonksiyonu yazma aynı şey olacak.

C:
void Timer2_ISR (void) __interrupt (5)        // Vector @  0x2B
{
    systemTick++;
    // Clear timer interrupt flag
    clr_T2CON_TF2;
}

C:
void Timer2_1ms_Init(void)
{
    TIMER2_DIV_128;
    TIMER2_Auto_Reload_Delay_Mode;
    RCMP2L = TIMER_DIV128_VALUE_1ms_FOSC_24000000;
    RCMP2H = TIMER_DIV128_VALUE_1ms_FOSC_24000000 >> 8;
    TL2 = 0;
    TH2 = 0;

    set_ET2;    // Set timer interrupt
    set_TR2;    // Start timer
    set_EA;    // Enable global interrupt
}
 
Üst