---  C:\ASM\MPLAB\HOME\LCD\V01\LCD_H.ASM  --------------------------------------------------------
                                                  1:     ; lcd_h.asm v0.1
                                                  2:     
                                                  3:     #define	RS	PORTA,0
                                                  4:     #define	RW	PORTA,1
                                                  5:     #define	EE	PORTA,2
                                                  6:     
                                                  7:     TAKT	MACRO
                                                  8:     	
00000D    1505     BSF 0x5, 0x2                   9:     	bsf		EE
000012    1505     BSF 0x5, 0x2
000017    1505     BSF 0x5, 0x2
00001D    1505     BSF 0x5, 0x2
000027    1505     BSF 0x5, 0x2
000034    1505     BSF 0x5, 0x2
00000E    1105     BCF 0x5, 0x2                   10:    	bcf		EE
000013    1105     BCF 0x5, 0x2
000018    1105     BCF 0x5, 0x2
00001E    1105     BCF 0x5, 0x2
000028    1105     BCF 0x5, 0x2
000035    1105     BCF 0x5, 0x2
                                                  11:    
                                                  12:    	ENDM
                                                  13:    
                                                  14:    WAIT	MACRO	TIME
                                                  15:    
000005    301E     MOVLW 0x1e                     16:    	movlw	TIME
000006     08C     MOVWF 0xc                      17:    	movwf	TEMP
000007     B8C     DECFSZ 0xc, F                  18:    	decfsz	TEMP,F
000008    2807     GOTO 0x7                       19:    	goto	$-1
                                                  20:    
                                                  21:    	ENDM
                                                  22:    	
                                                  23:    
                                                  24:    lcd_init:
                                                  25:    
                                                  26:    	WAIT	D'30'
                                                  27:    ;
000009    1005     BCF 0x5, 0                     28:    	bcf		RS
00000A    1085     BCF 0x5, 0x1                   29:    	bcf		RW
                                                  30:    ;
00000B    3034     MOVLW 0x34                     31:    	movlw	B'00110100'
00000C     086     MOVWF 0x6                      32:    	movwf	PORTB
                                                  33:    	TAKT
00000F     000     NOP                            34:    	nop						; i.e. 1us wait
000010    300F     MOVLW 0xf                      35:    	movlw	B'00001111'
000011     086     MOVWF 0x6                      36:    	movwf	PORTB
                                                  37:    	TAKT
000014     000     NOP                            38:    	nop
000015    3001     MOVLW 0x1                      39:    	movlw	B'00000001'
000016     086     MOVWF 0x6                      40:    	movwf	PORTB
                                                  41:    	TAKT
000019     000     NOP                            42:    	nop
00001A     000     NOP                            43:    	nop
00001B    3007     MOVLW 0x7                      44:    	movlw	B'00000111'
00001C     086     MOVWF 0x6                      45:    	movwf	PORTB
                                                  46:    	TAKT
00001F     000     NOP                            47:    	nop
                                                  48:    	; init END :D :P :)
                                                  49:    
000020     008     RETURN                         50:    	return
                                                  51:    ;
                                                  52:    ;
                                                  53:    
                                                  54:    lcdcom:
                                                  55:    
000021     08C     MOVWF 0xc                      56:    	movwf	TEMP
000022    202C     CALL 0x2c                      57:    	call	check_bf
000023     80C     MOVF 0xc, W                    58:    	movf	TEMP,W
000024     086     MOVWF 0x6                      59:    	movwf	PORTB
000025    1005     BCF 0x5, 0                     60:    	bcf		RS
000026    1085     BCF 0x5, 0x1                   61:    	bcf		RW
                                                  62:    	TAKT
000029     000     NOP                            63:    	nop
00002A     000     NOP                            64:    	nop
                                                  65:    ;
00002B     008     RETURN                         66:    	return
                                                  67:    ;
                                                  68:    ;
                                                  69:    
                                                  70:    check_bf:
                                                  71:    
                                                  72:    	BANK1
00002E    30FF     MOVLW 0xff                     73:    	movlw	0xFF
00002F     086     MOVWF 0x6                      74:    	movwf	TRISB
                                                  75:    	BANK0
000032    1005     BCF 0x5, 0                     76:    	bcf		RS
000033    1485     BSF 0x5, 0x1                   77:    	bsf		RW
                                                  78:    	TAKT
000036     806     MOVF 0x6, W                    79:    	movfw	PORTB
000037     08D     MOVWF 0xd                      80:    	movwf	BF_TEMP
000038    1B8D     BTFSC 0xd, 0x7                 81:    	btfsc	BF_TEMP,7
000039    282C     GOTO 0x2c                      82:    	goto	check_bf
00003A    1085     BCF 0x5, 0x1                   83:    	bcf		RW
                                                  84:    	BANK1
00003D     186     CLRF 0x6                       85:    	clrf	TRISB
                                                  86:    	BANK0
000040     008     RETURN                         87:    	return
---  C:\ASM\MPLAB\HOME\LCD\V01\MAIN.ASM  ---------------------------------------------------------
                                                  1:     ; main.asm
                                                  2:     
                                                  3:     	ERRORLEVEL	-302
                                                  4:     
                                                  5:     	LIST	p=16F84A
                                                  6:     	#include <p16F84A.inc>
                                                  7:     	__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
                                                  8:     	#define	RAMBASE		0x0C
                                                  9:     	
                                                  10:    #define	_RESET_VECTOR	0x000
                                                  11:    #define	_INT_VECTOR		0x004
                                                  12:    
                                                  13:    	ORG		_RESET_VECTOR
000000    2841     GOTO 0x41                      14:    	goto	start
                                                  15:    	ORG		_INT_VECTOR
000004    2860     GOTO 0x60                      16:    	goto	interrupt
                                                  17:    	
                                                  18:    	#include "utils.h"
                                                  19:    	#include "lcd_h.asm"
                                                  20:    
                                                  21:    	CBLOCK	RAMBASE
                                                  22:    	TEMP
                                                  23:    	BF_TEMP
                                                  24:    	ENDC
                                                  25:    
                                                  26:    start:
                                                  27:    
000041    2045     CALL 0x45                      28:    	call 	init
000042    2052     CALL 0x52                      29:    	call	main
                                                  30:    
                                                  31:    stop:
                                                  32:    
000043     000     NOP                            33:    	nop
000044    2843     GOTO 0x43                      34:    	goto	stop
                                                  35:    ;
                                                  36:    ;
                                                  37:    
                                                  38:    init:
                                                  39:    
000045    138B     BCF 0xb, 0x7                   40:    	bcf		INTCON,GIE	;no int until init is finish
                                                  41:    	BANK1
000048     185     CLRF 0x5                       42:    	clrf	TRISA
000049     186     CLRF 0x6                       43:    	clrf	TRISB
00004A    308F     MOVLW 0x8f                     44:    	movlw	B'10001111'
00004B     081     MOVWF 0x1                      45:    	movwf	OPTION_REG
                                                  46:    	BANK0
00004E     185     CLRF 0x5                       47:    	clrf	PORTA
00004F     186     CLRF 0x6                       48:    	clrf	PORTB
000050     18B     CLRF 0xb                       49:    	clrf	INTCON
000051     008     RETURN                         50:    	return	
                                                  51:    ;
                                                  52:    ;
                                                  53:    
                                                  54:    main:
                                                  55:    
000052    2005     CALL 0x5                       56:    	call	lcd_init
                                                  57:    ;
000053    2055     CALL 0x55                      58:    	call	message
                                                  59:    ;
000054     008     RETURN                         60:    	return		
                                                  61:    ;
                                                  62:    ;
                                                  63:    
                                                  64:    message:
                                                  65:    
000055    3080     MOVLW 0x80                     66:    	movlw	B'10000000'
000056    2021     CALL 0x21                      67:    	call	lcdcom
000057    3054     MOVLW 0x54                     68:    	movlw	'T'
000058    2021     CALL 0x21                      69:    	call	lcdcom
000059    3045     MOVLW 0x45                     70:    	movlw	'E'
00005A    2021     CALL 0x21                      71:    	call	lcdcom
00005B    3053     MOVLW 0x53                     72:    	movlw	'S'
00005C    2021     CALL 0x21                      73:    	call	lcdcom
00005D    3054     MOVLW 0x54                     74:    	movlw	'T'
00005E    2021     CALL 0x21                      75:    	call	lcdcom
                                                  76:    ;
00005F     008     RETURN                         77:    	return
                                                  78:    ;
                                                  79:    ;
                                                  80:    	
                                                  81:    interrupt:
                                                  82:    
000060     008     RETURN                         83:    	return
---  C:\ASM\MPLAB\HOME\LCD\V01\UTILS.H  ----------------------------------------------------------
1:                 BANK0	MACRO
2:                 
3:                 	bcf		STATUS,RP1
000030    1303     BCF 0x3, 0x6
00003E    1303     BCF 0x3, 0x6
00004C    1303     BCF 0x3, 0x6
4:                 	bcf		STATUS,RP0
000031    1283     BCF 0x3, 0x5
00003F    1283     BCF 0x3, 0x5
00004D    1283     BCF 0x3, 0x5
5:                 	
6:                 	ENDM
7:                 
8:                 BANK1	MACRO
9:                 
10:                	bcf		STATUS,RP1
00002C    1303     BCF 0x3, 0x6
00003B    1303     BCF 0x3, 0x6
000046    1303     BCF 0x3, 0x6
11:                	bsf		STATUS,RP0
00002D    1683     BSF 0x3, 0x5
00003C    1683     BSF 0x3, 0x5
000047    1683     BSF 0x3, 0x5
