

LIST    P=18F452

 include "P18F452.INC"

	__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
	__CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_ON_2L
	__CONFIG _CONFIG2H, _WDT_OFF_2H
	__CONFIG _CONFIG3H, _CCP2MX_OFF_3H
	__CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
	__CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
	__CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
	__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 
	__CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
	__CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
	__CONFIG _CONFIG7H, _EBTRB_OFF_7H
	
	
			ORG 		0x000			;Начало на главната програма
			GOTO		0x10

			ORG		0x10
BR			EQU		0x71 			;брояч			
BIN_DIG			EQU		0x73			;двоичен -> десетичен код	
W 			EQU 		0 
F 			EQU 		1 
Macros_vars	SET			0x40

;-------------Променливи, използвани от макросите-------
CBLOCK	Macros_vars
			DIG_1	
			DIG_10
			DIG_100
			ENDC

;(BIN_DIG) -> DIG_100,DIG_10,DIG_1
BIN08BCD3 	macro		BIN_DIG
			LOCAL		ch_100
			LOCAL		ch_10
			LOCAL		end_conv
			CLRF		DIG_10
			CLRF		DIG_100
			MOVF		BIN_DIG,w
			MOVWF		DIG_1
ch_100			MOVLW		D'100'
			SUBWF		DIG_1,w
			BNC		ch_10
			MOVWF		DIG_1
			INCF		DIG_100,f
			BRA		ch_100
ch_10			MOVLW		D'10'
			SUBWF		DIG_1,w
			BNC		end_conv
			MOVWF		DIG_1
			INCF		DIG_10,f
			BRA		ch_10
end_conv
			ENDM
	
;-------------Главна програма----------------------------	
	 		CLRF		PORTA			
			MOVLW		0x07
			MOVWF		ADCON1			
			CLRF		PORTB			
			MOVLW		0XFF			
			MOVWF		TMR0L			
			MOVLW		b'11000111'		;Определяне режима на работа на TMR0		
			MOVWF		T0CON			;Определя коеф. На деление 1:256
			CLRF		PIE1			
										
			CLRF		TRISA			;Конфигуриране на 
								;PORTA като изходи RS, R/W, E
			CLRF		TRISB			; Конфигуриране на
								;PORTB като изходи DB0...DB7
			MOVLW		0xFF
			MOVWF		TRISC			
			
			CLRF		INTCON								
			BSF         		INTCON,2		
E1			BTFSS		INTCON,T0IF		
			GOTO		E1 		
;-------------------------------------------------------------	
			MOVLW		0x3C			;Function set, 2 line, display on						
			CALL		SCLCD														
			CALL		delay						
;-------------------------------------------------------------					
			MOVLW		0xC			;display on, blik, cursor
			CALL		SCLCD						
			CALL		delay			
;--------------------------------------------------------------
			MOVLW		0x1			;Display clear
			CALL		SCLCD
			CALL		delay

			MOVLW		0x21		
			MOVWF		BR
E4			CALL		delay			;Закъснение >2 ms
			DECFSZ		BR,1
			GOTO		E4		
;-------------------------------------------------------------
			MOVLW		0x6			;Entry mode set
			CALL		SCLCD
			CALL		delay		
	
;----------- КРАЙ НА ИНИЦИАЛИЗАЦИЯТА--------------------------

begin			MOVLW		0xC9
			MOVWF		BIN_DIG
		
BIN08BCD3 	BIN_DIG
;--------------- Изписване еденици -------------------------------------
			MOVLW		0x82
			CALL		SCLCD
			CALL		delay

			MOVLW		0x2
			MULWF		DIG_1
			MOVFF		PRODL,DIG_1
			MOVF		DIG_1,W
			CALL		LCDTABLE1
			CALL		SDLCD	
			CALL		delay	
;--------------Изписване десетици-----------------------------------------
			MOVLW		0x81
			CALL		SCLCD
			CALL		delay

			MOVLW		0x2
			MULWF		DIG_10
			MOVFF		PRODL,DIG_10
			MOVF		DIG_10,W
			CALL		LCDTABLE10
			CALL		SDLCD
			CALL		delay	
;--------------- Изписване стотици ------------------------------------------
			MOVLW		0x80
			CALL		SCLCD
			CALL		delay
			
			MOVLW		0x2
			MULWF		DIG_100
			MOVFF		PRODL,DIG_100
			MOVF		DIG_100,W
			CALL		LCDTABLE100
			CALL		SDLCD
			CALL		delay
	
			GOTO 		begin	
;-----------------------------------
LCDTABLE1		ADDWF		PCL,F
			RETLW		A'0'	; 0
			RETLW		A'1'	; 1
			RETLW		A'2'	; 2
			RETLW		A'3'	; 3
			RETLW		A'4'	; 4
			RETLW		A'5'	; 5
			RETLW		A'6'	; 6
			RETLW		A'7'	; 7
			RETLW		A'8'	; 8
			RETLW		A'9'	; 9
;-------------------------------------
LCDTABLE10		ADDWF		PCL,F
			RETLW		A'0'	; 0
			RETLW		A'1'	; 1
			RETLW		A'2'	; 2
			RETLW		A'3'	; 3
			RETLW		A'4'	; 4
			RETLW		A'5'	; 5
			RETLW		A'6'	; 6
			RETLW		A'7'	; 7
			RETLW		A'8'	; 8
			RETLW		A'9'	; 9
;-------------------------------------
LCDTABLE100		ADDWF		PCL,F
			RETLW		A'0'	; 0
			RETLW		A'1'	; 1
			RETLW		A'2'	; 2
			RETLW		A'3'	; 3
			RETLW		A'4'	; 4
			RETLW		A'5'	; 5
			RETLW		A'6'	; 6
			RETLW		A'7'	; 7
			RETLW		A'8'	; 8
			RETLW		A'9'	; 9
		
;-------------- ПОДПРОГРАМИ  ------------

;---------------send command--------------

SCLCD	BCF			PORTA,0			; RS =0		
		BCF		PORTA,1			; R/W=0	
		MOVWF		PORTB
 		BSF		PORTA,2			;Вдигане на Еnable (E)	
		CALL		delay
		BCF		PORTA,2			;Смъкване на Еnable (E)	
		CALL		delay
		CLRF		PORTA
		CLRF		PORTB				
		RETURN	
;---------------send data-------------------
SDLCD		BSF		PORTA,0
		BCF		PORTA,1
		MOVWF		PORTB
		BSF		PORTA,2
		CALL		delay
		BCF		PORTA,2
		CLRF		PORTB
		CLRF		PORTA
		RETURN
;----------------WAIT >40us------------------	
delay		MOVLW		0xCD
		MOVWF		TMR0L
		MOVLW		b'11000000'
		MOVWF		T0CON
		CLRF		INTCON
E7		BTFSS		INTCON,T0IF
		GOTO		E7
		RETURN
		END
		


	



