	list	p=16F877A
		#include <p16f877A.inc>		  ; processor specific variable definitions

        CBLOCK  20H
        R1,R0
        COUNT, LBYTE

		BUFFER:	4
        ENDC


        ORG     0x000
		goto	MAIN

		org		0x0004


MAIN
;	    MOVF	ADRESL,w
		movlw	.149
        MOVWF   LBYTE

        CALL    BIN2BCD

		movlw	high(SEGMENTS)
		movwf	PCLATH

		movf	R0,w
		andlw	0x0F
		call	To7segment
		movwf	BUFFER
		swapf	R1,w
		andlw	0x0F
		call	To7segment
		movwf	BUFFER+1
		movf	R1,w
		andlw	0x0F
		call	To7segment
		movwf	BUFFER+2
		movlw	0x9C
		movwf	BUFFER+3

        GOTO    MAIN

BIN2BCD
		MOVLW   .8
        MOVWF   COUNT
        CLRF    R0
        CLRF    R1
        BCF     STATUS,C
        GOTO    BIN2BC2

BIN2L   MOVLW   R1
        MOVWF   FSR
BCDADJ  MOVLW   03H
        ADDWF   INDF,F
        BTFSS   INDF,3
        SUBWF   INDF,F
        MOVLW   30H
        ADDWF   INDF,F
        BTFSS   INDF,7
        SUBWF   INDF,F
        INCF    FSR,F
		MOVF	FSR,W
		XORLW	R0+1
		BTFSS	STATUS,Z
        GOTO    BCDADJ

BIN2BC2 RLF     LBYTE,F
        RLF     R1,F
        RLF     R0,F
        DECFSZ  COUNT,F
        GOTO    BIN2L
        RETLW   0


To7segment
		andlw	0x0F
		addwf	PCL,f

SEGMENTS:		; abcdefg-
		retlw	b'11111100'		;0
		retlw	b'01100000'		;1
		retlw	b'11011010'		;2
		retlw	b'11110010'		;3
		retlw	b'01100110'		;4
		retlw	b'10110110'		;5
		retlw	b'10111110'		;6
		retlw	b'10110000'		;7
		retlw	b'11111110'		;8
		retlw	b'11110110'		;9
		retlw	b'11101110'		;A
		retlw	b'00111110'		;b
		retlw	b'10011100'		;C
		retlw	b'01111010'		;d
		retlw	b'10011110'		;E
		retlw	b'10001110'		;F
SEGMENTS_END:

	if (high(SEGMENTS)!=high(SEGMENTS_END))
		error "Talbe page error: SEGMENTS"
	endif

        END
