Langsung ke konten utama

Trik keluar loop fungsi getchar dengan RX interup enabled

Trik ini digunakan untuk keluar dari loop tunggu dalam fungsi getchar ketika menggunakan USART/UART dengan seting RX interup enabled

Kali ini saya menggunakan codevision 3.12, dan gambar diatas adalah codewizardAVR. Biasanya jika kita seting USART0 (atau lainnya) dengan RX interup enabled maka codevision akan meng generate code fungsi getchar() sebagai berikut


char getchar(void)
{
char data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0++];
#if RX_BUFFER_SIZE0 != 256
if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#endif
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
}

Fungsi getchar diatas jika kita panggil misal di main, tentu selama data bytes tidak masuk ke RX fungsi getchar akan loop terus dan tidak mengeksekusi baris code dibawahnya misal

void  main(void)
{
unsigned char buffer;
while(1)
{
buffer=getchar();
lcd_gotoxy(0,0);
lcd_putsf(“Trik”);
}
}

Maka selama getchar tidak memperoleh data bytes maka baris code lcd_gotoxy(0,0) dan seterusnya tidak akan di eksekusi.

Bagaimana caranya agar dapat tereksekusi?

char getchar(void)
{
char data;
unsigned long int limit_timeout0=0;
while (rx_counter0==0)
{
limit_timeout0++;
if(limit_timeout0>22000){ limit_timeout0=0;goto exit;}
};
data=rx_buffer0[rx_rd_index0++];
#if RX_BUFFER_SIZE0 != 256
if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#endif
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
exit:
}

Coba perhatikan code fungsi getchar diatas dan apa bedanya dengan fungsi getchar sebelumnya, silahkan di pelajari dan silahkan bertanya jika kurang paham…



Komentar

  1. Makasih banyak info dan bantuannya kak Azhar
    semoga Allah membalas segala kebaikannya,,
    Aminn...

    BalasHapus
  2. Kalo cvavr pakek exit kok error ya gan

    BalasHapus

Posting Komentar

Postingan populer dari blog ini

Menggunakan USART / UART di CodeVision AVR

Sudah lama saya tidak menulis di blog, dan kali ini saya akan berbagi sedikit pengalaman saya mengenai USART/UART di mikrokontroler AVR ATMEGA series. Kesempatan kali ini saya akan menggunakan Atmega8 dan mengaktifkan fitur USARTnya dengan CodeVision AVR versi 1.xx.x Jalankan aplikasi Codevision kemudian pada menu file pilih new, nanti akan muncul jendela create new file pilih project dan klik OK, akan muncul jendela confirm klik yes,

Keypad Matrix 3x4

Keypad 3x4 yang tersedia di pasaran adalah seperti gambar diatas. Keypad ini biasanya digunakan untuk berbagai aplikasi yang mengharuskan penggunaan tombol sebagai input numeric maupun abjad. Misalnya untuk telepon, tiket printer dll.