fork download
  1. #include <xc.h>
  2. #define _XTAL_FREQ 4000000
  3.  
  4. // LCD bağlantıları
  5. #define RS RC0
  6. #define E RC1
  7. #define D4 RC2
  8. #define D5 RC3
  9. #define D6 RC4
  10. #define D7 RC5
  11.  
  12. // Sayaç değişkenleri
  13. unsigned int sayac = 0;
  14. unsigned int kesme_sayisi = 0;
  15.  
  16. // LCD fonksiyon prototipleri
  17. void lcd_init();
  18. void lcd_cmd(char cmd);
  19. void lcd_yaz(char data);
  20. void lcd_yaz_str(const char* str);
  21. void lcd_gotoxy(char x, char y);
  22. void lcd_clear();
  23.  
  24. // Interrupt yapılandırması
  25. void interrupt ISR() {
  26. if (TMR0IF) {
  27. TMR0IF = 0;
  28. TMR0 = 131; // 500 µs için TMR0 değeri (prescaler 1:4)
  29.  
  30. RB0 = !RB0; // Osiloskop sinyali
  31.  
  32. kesme_sayisi++;
  33. if (kesme_sayisi >= 1000) { // 500 ms tamamlandı
  34. kesme_sayisi = 0;
  35. sayac++;
  36. if (sayac > 99) sayac = 0;
  37.  
  38. lcd_gotoxy(0, 1);
  39. lcd_yaz_str("SAYAC: ");
  40. lcd_yaz((sayac / 10) + '0');
  41. lcd_yaz((sayac % 10) + '0');
  42. }
  43. }
  44. }
  45.  
  46. void timer0_init() {
  47. OPTION_REG = 0b00000001; // Prescaler 1:4 (PS2:PS0 = 001)
  48. TMR0 = 131;
  49. INTCON = 0b10100000; // GIE ve TMR0IE aktif
  50. }
  51.  
  52. void main() {
  53. TRISB0 = 0; // RB0 çıkış
  54. TRISC = 0; // LCD pinleri çıkış
  55.  
  56. lcd_init();
  57. timer0_init();
  58.  
  59. // Açılış ekranı
  60. lcd_gotoxy(0, 0);
  61. lcd_yaz_str("YUNUS EMRE NAS");
  62. lcd_gotoxy(0, 1);
  63. lcd_yaz_str("G210101037");
  64. __delay_ms(3000);
  65.  
  66. lcd_clear();
  67. lcd_gotoxy(3, 0);
  68. lcd_yaz_str("SUBU EEM");
  69. lcd_gotoxy(0, 1);
  70. lcd_yaz_str("SAYAC: 00");
  71.  
  72. while (1) {
  73. // İşlem kesmede yapılır
  74. }
  75. }
  76.  
Success #stdin #stdout 0.03s 25984KB
stdin
Standard input is empty
stdout
#include <xc.h>
#define _XTAL_FREQ 4000000

// LCD bağlantıları
#define RS RC0
#define E  RC1
#define D4 RC2
#define D5 RC3
#define D6 RC4
#define D7 RC5

// Sayaç değişkenleri
unsigned int sayac = 0;
unsigned int kesme_sayisi = 0;

// LCD fonksiyon prototipleri
void lcd_init();
void lcd_cmd(char cmd);
void lcd_yaz(char data);
void lcd_yaz_str(const char* str);
void lcd_gotoxy(char x, char y);
void lcd_clear();

// Interrupt yapılandırması
void interrupt ISR() {
    if (TMR0IF) {
        TMR0IF = 0;
        TMR0 = 131; // 500 µs için TMR0 değeri (prescaler 1:4)

        RB0 = !RB0; // Osiloskop sinyali

        kesme_sayisi++;
        if (kesme_sayisi >= 1000) { // 500 ms tamamlandı
            kesme_sayisi = 0;
            sayac++;
            if (sayac > 99) sayac = 0;

            lcd_gotoxy(0, 1);
            lcd_yaz_str("SAYAC: ");
            lcd_yaz((sayac / 10) + '0');
            lcd_yaz((sayac % 10) + '0');
        }
    }
}

void timer0_init() {
    OPTION_REG = 0b00000001; // Prescaler 1:4 (PS2:PS0 = 001)
    TMR0 = 131;
    INTCON = 0b10100000; // GIE ve TMR0IE aktif
}

void main() {
    TRISB0 = 0; // RB0 çıkış
    TRISC = 0;  // LCD pinleri çıkış

    lcd_init();
    timer0_init();

    // Açılış ekranı
    lcd_gotoxy(0, 0);
    lcd_yaz_str("YUNUS EMRE NAS");
    lcd_gotoxy(0, 1);
    lcd_yaz_str("G210101037");
    __delay_ms(3000);

    lcd_clear();
    lcd_gotoxy(3, 0);
    lcd_yaz_str("SUBU EEM");
    lcd_gotoxy(0, 1);
    lcd_yaz_str("SAYAC: 00");

    while (1) {
        // İşlem kesmede yapılır
    }
}