;
        TITLE   "AZ ELSO PROGRAM"
;

        LIST    P=PIC16F877, F=INHX8M, R=DEC
;
        INCLUDE  <P16F877.INC>
                                ;
        ORG     2000h
        DW      'Z','S','O','L'
        ORG     2007h
        DW      _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _WRT_ENABLE_OFF & _CP_OFF & _BODEN_ON
;
;Macros:
BANK0   MACRO
        BCF     STATUS,RP0
        BCF     STATUS,RP1
        ENDM
BANK1   MACRO
        BSF     STATUS,RP0
        BCF     STATUS,RP1
        ENDM
BANK2   MACRO
        BCF     STATUS,RP0
        BSF     STATUS,RP1
        ENDM
BANK3   MACRO
        BSF     STATUS,RP0
        BSF     STATUS,RP1
        ENDM

PAGE0   MACRO
        BCF     PCLATH,3        ;0h..7FFh
        ENDM
PAGE1   MACRO
        BSF     PCLATH,3        ;800h..FFFh
        ENDM
;


;Ports:
;
DIRRA   EQU     11111111b       ;adatirany  A port bemenet
DIRRB   EQU     00000000b       ;adatirany
DIRRC   EQU     10000111b       ;adatirany
DIRRD   EQU     00000000b       ;adatirany
DIRRE   EQU     00000000b       ;adatirany

DEFARA  EQU     000000b         ;alapérték
DEFARB  EQU     00000000b       ;alapérték
DEFARC  EQU     11000000b       ;alapérték
DEFARD  EQU     00011111b       ;alapérték
DEFARE  EQU     11000000b       ;alapérték

;Variables:
        CBLOCK  20h
          ;Registers:
          R0,R1,R2,R3
          FLAGS
        ENDC
LCD_RS  equ     5               ; 0= parancs, 1= adat reg. választás
LCD_RW  equ     6               ; R/W=0 LCD írás, R/W=1 LCD memória olvasás
LCD_EN  equ     7               ; 0= LCD tiltás, 1= engedélyezés



;--------------------------------------------------------------------------------

        ORG     0
START
        BANK0
        CALL    PORT_INI
        CALL    LCD_INI

MAIN    CALL    LED_KI
        movlw   20
        CALL    DELAY
        CALL    LED_BE
        movlw   20
        CALL    DELAY
        CALL    LED_KI
        movlw   20
        CALL    DELAY
        CALL    LED_BE
        movlw   20
        CALL    DELAY
;------------------------

ADkonv
        BANK0
        BSF     ADCON0,GO       ;AD indul
Wait    BTFSS   PIR1,ADIF       ;var a teljes  konverziora
        GOTO    Wait

        movlw   128+5           ; 01h, Display clear
        call    LCDCMD

        MOVF    ADRESH,W        ;AD ertek a W-be
        CALL    LCDCHR          ;kiir

        movlw   50
        call    DELAY           ; Busy flag olvasását "helyettesíti"

        GOTO    ADkonv          ;elejere



;SZUBRUTINOK--------------------------------------------------------------------------------
PORT_INI                        ;a portok adatiránya és alapértéke
        BANK0
        MOVLW   DEFARA
        MOVWF   PORTA
        MOVLW   DEFARB
        MOVWF   PORTB
        MOVLW   DEFARC
        MOVWF   PORTC
        MOVLW   DEFARD
        MOVWF   PORTD
        MOVLW   DEFARE
        MOVWF   PORTE
        MOVLW   11000001b
        MOVWF   ADCON0

        BANK1                   ;a 128..255 közötti regiszterek irjuk...
        MOVLW   00001110b       ;RA analog in, RE digit I/O ADRES left justified
        MOVWF   ADCON1          ; ADRES left justified (csak 8 bitesnek használjuk)
        MOVLW   DIRRA
        MOVWF   TRISA
        MOVLW   DIRRB
        MOVWF   TRISB
        MOVLW   DIRRC
        MOVWF   TRISC
        MOVLW   DIRRD
        MOVWF   TRISD
        MOVLW   DIRRE
        MOVWF   TRISE           ;Adatirányok...
        MOVLW   00000000b       ;Pull-up on, prescaler timer mode
        MOVWF   OPTION_REG
        BANK0
        RETURN

; LCD kijelző inicializálása
LCD_INI
        movlw   50
        call    DELAY           ; Tapfelallasra var
        movlw   56              ; 38h, 8 bit interface set, 2 soros, 00111000
        call    LCDCMD
        movlw   56
        call    LCDCMD
        movlw   6               ; 06h, Entry mode set: increment,display rogzitett
        call    LCDCMD
        movlw   12              ; Display on, cursor on-off /blink on-off  00001111
        call    LCDCMD
        movlw   20              ; Disp:  leptetes jobbra, kurzor mozog
        call    LCDCMD
        movlw   1               ; 01h, Display clear
        call    LCDCMD
        RETURN
;
LED_BE

        BSF     PORTD,1
        RETURN

LED_KI

        BCF     PORTD,1
        RETURN
;
LCDCHR                  ;W->karakter LCD-re
        BSF     PORTD,LCD_RS    ;LCD R/S:  adatregiszter
        GOTO    LCDWRITE
LCDCMD
        BCF     PORTD,LCD_RS    ;LCD R/S:  parancsregiszter
LCDWRITE
        BCF     PORTD,LCD_RW    ;LCD iras
        BCF     PORTD,LCD_EN    ;LCD. EN:=L
        MOVWF   PORTB           ;PORTB kimeneti tárba beirjuk
        BANK1
        MOVLW   0
        MOVWF   TRISB           ;adatirány mind ki
        BANK0
        BSF     PORTD,LCD_EN    ;LCDEN=H, enable
        BCF     PORTD,LCD_EN    ;LCD disable
        BANK1
        MOVLW   255
        MOVWF   TRISB           ;adatirány mind be
        BANK0
        BCF     PORTD,LCD_RS    ;LCD parancs
        BSF     PORTD,LCD_RW    ;LCD read status reg.
        BSF     PORTD,LCD_EN    ;LCD. EN:=H ENABLE
LCDW_L                          ;8 clk
        BTFSC   PORTB,7         ;LCD kész?
        GOTO    LCDW_L          ;várunk...
LCDW_E
        BCF     PORTD,LCD_EN    ;LCD. EN:=L tiltva
        RETURN
;
;******************************************************
DELAY                   ;W*10ms-et vár

        MOVWF   R2
DEL1_L
        MOVLW   HIGH 3333       ;mivel a DEL_L 3 ciklus, egy ciklus 1us
        MOVWF   R1              ; a 10ms 3333 ciklus lesz...
        MOVLW   LOW 3333        ;az alsó byte-ja az R0-ba
        MOVWF   R0
DEL_L
        DECFSZ  R0              ;R0=R0-1
        GOTO    DEL_L           ;ha R0<>0
        DECFSZ  R1              ;R1=R1-1
        GOTO    DEL_L           ;ha R1<>0
        DECFSZ  R2              ;R2=R2-1
        GOTO    DEL1_L          ;ha R2<>0
        RETURN                  ;vissza a hivóhoz...
;******************************************************
;
        END
