;
	LIST P=16F877
            #INCLUDE P16F877.INC
	    __CONFIG 3B32H
	CBLOCK  H'20'
TEMP		;ВРЕМЕННЫЙ.
COUN		;СЧЕТЧИК БИТОВ, СЧЕТЧИК ПЕРЕСЧЕТА.
VAR_1
WAIT2
WAIT1	
	ENDC
RS	EQU	0	;КОМАНДА/ДАННЫЕ.
E	EQU	21	;СИНХРОНИЗАЦИЯ.
;=======================================
; 1. ПУСК.
;======================
        ORG 0
	GOTO	INIT
        ORG 4
	GOTO	INIT

;========================================================
; 7. ТАБЛИЦЫ ПЕРЕВОДА ДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.
;========================================================
DEBIN
	ADDWF	PCL,1	;
	RETLW	.0
	RETLW	.10
	RETLW	.20
	RETLW	.30
	RETLW	.40
	RETLW	.50

;==================================
; 18. ЗАДЕРЖКА МКС, УМНОЖЕННАЯ НА 4.
;==================================
X4
	ADDLW	-1		;
	BTFSS	STATUS,2	;
	GOTO	$-2		;
	RETURN			;

;======================
; 28. ИНИЦИАЛИЗАЦИЯ МК.
;======================
INIT
	CLRW
	MOVF	PORTB
	MOVF	PORTA
	BSF		STATUS,RP0
	MOVLW	B'00000000'
	MOVWF	TRISA
	MOVWF	TRISB
	MOVWF	TRISC	
	MOVWF	TRISD
	BCF	STATUS,RP0
	CLRW
	CLRF	PORTB
	CLRF	PORTA	
	GOTO 	LOOP
;=========================================
; 32. ИНИЦИАЛИЗАЦИЯ ЖКИ.
;========================================= 
JEKINI
	CALL	WAIT
	MOVLW	03		
	CALL	JEKOM		
	CALL	X4

	MOVLW	03		
	CALL	JEKOM		
	CALL	X4	

	MOVLW	03		
	CALL	JEKOM	
	CALL	X4	
	MOVLW	03		
	CALL	JEKOM		
	CALL	WAIT	
	MOVLW	28		
	CALL	JEKOM		;

	MOVLW	01	
	CALL	JEKOM		
	MOVLW	0C		
	CALL	JEKOM		;
	BSF		PORTB,RS
	CALL	STROB		;
	CALL	STROB		;
	CALL	STROB		;		
	MOVLW	01		;СТИРАНИЕ ПАМЯТИ ДИСПЛЕЯ.
	CALL	JEKOM		;	
	RETURN		;НА РАСПРЕДЕЛИТЕЛЬ.
;=========================================
; 33. ФОРМИРОВАНИЕ СТРОБИРУЮЩЕГО ИМПУЛЬСА.
;=========================================
STROB
        BSF     PORTB,E    ;ВКЛЮЧАЕМ СТРОБ-ИМПУЛЬС.
	NOP
        BCF     PORTB,E    ;ВЫКЛЮЧАЕМ СТРОБ.
        RETURN             ;ВЕРНЕМСЯ.
;===============================================
; 34. ПЕРЕДАЧА КОМАНДЫ В ЖКИ.
;===============================================
JEKOM
        MOVWF   TEMP       	;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
        ANDLW   B'11110000'	;ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
        MOVWF   PORTB      	;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".
        CALL    STROB      	;ПРОСТРОБИРУЕМ.
        CALL    PAUSA      	;ПАУЗА.
        MOVFW   TEMP
        SWAPF   TEMP,W     	;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.
        ANDLW   B'11110000'	;ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
        MOVWF   PORTB      	;ПЕРЕПИШЕМ В ПОРТ "В".
        CALL    STROB      	;ПРОСТРОБИРУЕМ.
PAUSA
        MOVLW   .255		;1 МС. ПАУЗА ДЛЯ ЗАПИСИ КОМАНДЫ.
        ADDLW   -1
        BTFSS   STATUS,2
        GOTO    $-2
        RETURN
;=====================================
; 35. ЗАПИСЬ ДАННЫХ В ЖКИ.
;=====================================
JEDAT

        MOVWF   TEMP		;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
		ANDLW   0XF0	;ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
 
        MOVWF   PORTB		;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".
		BSF     PORTB,RS	;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.
        CALL    STROB		;ПРОСТРОБИРУЕМ.
        CALL    PAUS		;ПАУЗА ДЛЯ ОСВОБОЖДЕНИЯ ЖКИ ОТ ЦИКЛА ЗАПИСИ.
        MOVFW   TEMP
         SWAPF   TEMP,0		;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.    
        ANDLW   0XF0	;ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
        MOVWF   PORTB		;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".
		BSF     PORTB,RS	;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.
        CALL    STROB		;ПРОСТРОБИРУЕМ.
PAUS
        MOVLW   .10		;40 МКС. ПАУЗА ДЛЯ ЗАПИСИ ДАННЫХ.
        ADDLW   -1
        BTFSS   STATUS,2
        GOTO    $-2
        RETURN
LOOP
	CALL	JEKINI
L1	
	MOVLW	20
	CALL	JEDAT
	MOVLW	20
	CALL	JEDAT
	MOVLW	20
	CALL	JEDAT
	MOVLW	20
	CALL	JEDAT
	MOVLW	20
	CALL	JEDAT
	MOVLW	20
	CALL	JEDAT
	MOVLW	'H'
	CALL	JEDAT
		
	MOVLW	'E'
	CALL	JEDAT
	MOVLW	'L'
	CALL	JEDAT	
	MOVLW	'L'
	CALL	JEDAT	
	MOVLW	'0'
	CALL	JEDAT	
	MOVLW	20
	CALL	JEDAT
	MOVLW	'W'
	CALL	JEDAT				
	MOVLW	'O'
	CALL	JEDAT	
	MOVLW	'R'
	CALL	JEDAT	
	MOVLW	'L'
	CALL	JEDAT	
	MOVLW	'D'
	CALL	JEDAT	
	MOVLW	'!'
	CALL	JEDAT
LOOP1
	NOP
	GOTO	LOOP1
	INCF	VAR_1,F
	MOVF	VAR_1,W
	CALL	JEDAT
	CALL	WAIT
	CALL	WAIT
	GOTO 	LOOP1

	
WAIT
	MOVWF	WAIT2
SP_01
	MOVLW	0XFF
	MOVWF	WAIT1
SP_02
	NOP
	DECFSZ	WAIT1,F
	GOTO	SP_02
	
	DECFSZ	WAIT2,F
	GOTO	SP_01
	RETURN		
;========================================
	END
;========================================

