program timer_teszt;
    
var LCD_RS : sbit  at RB4_bit;
var LCD_EN : sbit  at RB5_bit;
var LCD_D4 : sbit  at RB0_bit;
var LCD_D5 : sbit  at RB1_bit;
var LCD_D6 : sbit  at RB2_bit;
var LCD_D7 : sbit  at RB3_bit;

var LCD_RS_Direction : sbit at TRISB4_bit;
var LCD_EN_Direction : sbit at TRISB5_bit;
var LCD_D4_Direction : sbit at TRISB0_bit;
var LCD_D5_Direction : sbit at TRISB1_bit;
var LCD_D6_Direction : sbit at TRISB2_bit;
var LCD_D7_Direction : sbit at TRISB3_bit;

var t1: integer;
    s: string[10];

procedure Interrupt;
begin
  if PIR1.TMR1IF = 1 then
  begin
    inc(t1);
    PIR1.TMR1IF := 0;
  end;
end;

procedure timer1_init;
begin
  TMR1H          := 255;       //A két TMR1IF billenés kezdőértéke
  TMR1L          := 255;
  t1             := 0;

//  OPTION_REG.NOT_RBPU := 0;     //PortB megszakítás engedélyezése / tiltása  (1-tilt, 0- enged)

  T1CON.T1CKPS1     := 0;       //Sebesség osztó beállítások (PS1, PS0)
  T1CON.T1CKPS0     := 0;
  T1CON.T1OSCEN     := 1;       //Külső időzítő választó bit (1- kvarc (T1OSO-T1OSI/RB6-RB7), 0- impulzus(T1CKI/RB6))
  T1CON.NOT_T1SYNC  := 1;       //Külső oszcillátor órajel szinkronizáló bit (1- Nincs szinkronizáció, 0- Szinkronizálva van)
  T1CON.TMR1CS      := 1;       //Óra választás:   1 - Külső kvarc(T1OSO/T1OSI) vagy impulzus(T1CKI), 0 - Belső ciklus óra
  T1CON.TMR1ON      := 1;       //Timer1 indítása

  PIR1.EEIF         := 0;       //Komparátor megszakítás állapota
  PIR1.CMIF         := 0;       //DISABLE EE Teljes írás megszakítás állapota
  PIR1.RCIF         := 0;       //EUSART modul adatfogadásakori (RX) megszakítás állapota
  PIR1.TXIF         := 0;       //EUSART modul adatküldési (TX) megszakítás állapota
  PIR1.CCP1IF       := 0;       //CCP1 modul megszakítás állapota
  PIR1.TMR2IF       := 0;       //Timer2 megszakítás állapota
  PIR1.TMR1IF       := 0;       //Timer1 megszakítás állapota

  PIE1.EEIE         := 0;       //Komparátor megszakítás engedélyezése / tiltása
  PIE1.CMIE         := 0;       //DISABLE EE Teljes írás megszakítás engedélyezése / tiltása
  PIE1.RCIE         := 0;       //EUSART modul adatfogadásakori (RX) megszakítás engedélyezése / tiltása
  PIE1.TXIE         := 0;       //EUSART modul adatküldési (TX) megszakítás engedélyezése / tiltása
  PIE1.CCP1IE       := 0;       //CCP1 modul megszakítás engedélyezése / tiltása
  PIE1.TMR2IE       := 0;       //Timer2 megszakítás engedélyezése
  PIE1.TMR1IE       := 1;       //Timer1 megszakítás engedélyezése

  INTCON.GIE        := 1;       //Globális megszakítás engedélyezése
  INTCON.PEIE       := 1;       //Perifériás megszakítások engedélyezése / tiltása (PortB, RB0/Int)
  INTCON.T0IE       := 0;       //Timer0 engedélyezése
  INTCON.INTE       := 0;       //RB0 INT Sleep felébresztés engedélyezése / tiltása
  INTCON.RBIE       := 0;       //PortB állapotváltozása miatti megszakítás engedélyezése / tiltása
  INTCON.T0IF       := 0;       //TMR0 túlcsordulásának állapota (0- nem csordult túl, 1- Túlcsordult)
  INTCON.INTF       := 0;       //RB0/Int port megszakítás állapota (0- nem történt megszakítás, 1- megszalítás történt)
  INTCON.RBIF       := 0;       //PortB állapotváltozása miatti megszakítás állapota (0- nem történt megszakítás, 1- megszalítás történt)
end;

begin
  CMCON := %00000111;

  Lcd_Init();
  delay_ms(100);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  Lcd_Out(1, 1, 'T1:');

  Timer1_init;
  delay_ms(100);

  while true do
  begin
    bytetostr(t1, s); ltrim(s);
    Lcd_Out(1, 7, s);
  end;
end.