;Не се занимавай с асемблер и особено с този процесор!! Това е голяма грешка

	 list p=16F84A ;Задаване на типа на процесора
	#include <p16F84A.inc>; Дефиниране на SFR регистрите
	errorlevel	-302
	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;************Дефиниране на константи и променливи**********
w EQU 0
f EQU 1
;************Дефиниране на LCD модула**********************
DISP_ON EQU H'0C'
DISP_ON_C EQU H'0E'
DISP_ON_B EQU H'0F'
DISP_OFF EQU H'08'
CLR_DISP EQU H'01'
ENTRY_INC EQU H'06'
ENTRY_INC_S EQU H'07'
ENTRY_DEC EQU H'04'
ENTRY_DEC_S EQU H'05'
DD_RAM_ADR1 EQU H'80'
DD_RAM_ADR2 EQU H'C0'
;************Използвани променливи**************************
	CBLOCK h'0c'
	Counter 
	LCD_temp 
	BF_temp 
	ENDC
;***********Дефиниране на портовете*************************
#define E PORTA,0
#define RW PORTA,1
#define RS PORTA,2
;**********Потрбителска програма***************************
	ORG h'0000'
	goto Start 
;**********Начало на програмата*****************************
Start
	bsf STATUS,RP0
	movlw b'10010001'
	movwf OPTION_REG
	bcf STATUS,RP0 
	clrf PORTA
	clrf PORTB 
	bsf STATUS,RP0
	movlw b'11111000'
	movwf TRISA
	clrf TRISB
	bcf STATUS,RP0
	goto main
;*********Използвани подпрограми***************************
Init_LCD 
	movlw D'15'
	movwf Counter
	call Wait
	movlw b'00110000'
	movwf PORTB
	bsf E
	bcf E
	movlw D'8'
	movwf Counter
	call Wait
	movlw b'00111000'
	movwf PORTB
	bsf E
	bcf E
	movlw DISP_OFF 
	call Send_comand
	movlw DISP_ON
	call Send_comand
	movlw ENTRY_INC
	call Send_comand
	return
;*********************************************************
Wait clrf TMR0
again bcf INTCON,T0IF
loop btfss INTCON,T0IF
	goto loop
	decfsz Counter,f
	goto again
	return
;**********************************************************
Send_comand
	movwf LCD_temp
	call Check_BF
	movf LCD_temp,w
	movwf PORTB
	bcf RW
	bcf RS
	bsf E
	bcf E
	return
;***********************************************************
Send_char
	movwf LCD_temp
	call Check_BF
	movf LCD_temp,w
	movwf PORTB
	bcf RW
	bsf RS
	bsf E
	bcf E
	return
;**********************************************************
Check_BF
	bsf STATUS,RP0
	movlw h'FF'
	movwf TRISB
	bcf STATUS,RP0
	bcf RS
	bsf RW
	bsf E
	bcf E
	movf PORTB,w
	movwf BF_temp
	btfsc BF_temp,7
	goto Check_BF
	bcf RW
	bsf STATUS,RP0
	clrf TRISB
	bcf STATUS,RP0
	movlw D'15'
	movwf Counter
	call Wait
	return
;***********************************************************
main 
	call Init_LCD
	movlw DD_RAM_ADR1
	call Send_comand
	movlw ' '
	call Send_char
	movlw ' '
	call Send_char
	movlw ' '
	call Send_char
	movlw ' '
	call Send_char
	movlw 'L'
	call Send_char
	movlw 'C'
	call Send_char
	movlw 'D' 
	call Send_char
	movlw ' '
	call Send_char
	movlw 'T'
	call Send_char
	movlw 'E'
	call Send_char
	movlw 'S'
	call Send_char
	movlw 'T'
	call Send_char
	movlw ' '
	call Send_char
	movlw ' '
	call Send_char
	movlw ' ' 
	call Send_char
	movlw ' '
	call Send_char

Second_line 
	movlw DD_RAM_ADR2
	call Send_comand
	movlw 'K'
	call Send_char 
	movlw 'a'
	call Send_char
	movlw 't'
	call Send_char
	movlw 'o'
	call Send_char
	movlw ' '
	call Send_char
	movlw 'z'
	call Send_char
	movlw 'a'
	call Send_char
	movlw ' '
	call Send_char
	movlw 'n'
	call Send_char
	movlw 'a'
	call Send_char
	movlw '4'
	call Send_char
	movlw 'a'
	call Send_char
	movlw 'l'
	call Send_char
	movlw 'o'
	call Send_char
	movlw ':' 
	call Send_char
	movlw ')'
	call Send_char
Stop_send
	nop
	goto Stop_send
;------------------------------------------
	END
