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,

Menggunakan ADC Mikrokontroler ATmega 32 dengan CodeVision

Sebenarnya cara ini bisa dipakai untuk mikrokontroler Atmega seri lainnya juga. Saya kali ini akan menggunakan ADC Atmega32 dengan menggunakan CodeVision AVR. Langsung saja buka aplikasi CodeVision AVR kemudian buat project baru setelah itu akan muncul jendela CodeWizard AVR