; PIC TRAINING KIT PROGRAM #1
; JANG01.ASM
; OSC : XT
; WDT : NO
LIST P=PIC16F84 , F=INHX8M
;
; SYSTEM REGISTER
;
INDIR EQU 00H ;PAGE 0
RTCC EQU 01H
PC EQU 02H
STATUS EQU 03H
FSR EQU 04H
PORTA EQU 05H
PORTB EQU 06H
EEDATA EQU 08H
EEADR EQU 09H
PCLATH EQU 0AH
INTCON EQU 0BH
OPTIONR EQU 01H ;PAGE 1
TRISA EQU 05H
TRISB EQU 06H
EECON1 EQU 08H
;
; BIT DEFINITION
;
CF EQU .0 ;STATUS
DC EQU .1
ZF EQU .2
PD EQU .3
TO EQU .4
RP0 EQU .5
; PROGRAM REGISTERS
INIT_CNT EQU 0CH
WRITE_BUF EQU 0DH
FLAGR EQU 0EH
DLY_CNT1 EQU 0FH
DLY_CNT2 EQU 10H
DLY_CNT3 EQU 11H
INSTR_POINTR EQU 12H
DATA_POINTR EQU 13H
DSP_ON_OFF EQU 14H
RIGHT EQU 15H
LEFT EQU 16H
; BIT DEFINITION
DATA_INSTR EQU .0
LCD_RS EQU .0 ;RA 0
LCD_RW EQU .1 ;RA 1
LCD_E EQU .2 ;RA 2
ORG 0
START
BSF STATUS, RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVWF OPTIONR
BCF STATUS, RP0
CLRW
MOVWF PORTA
MOVWF PORTB
MOVWF INTCON
MAIN
MOVLW .20
MOVWF DLY_CNT1
CALL DELAY
MOVLW .3
MOVWF INIT_CNT
LP1
BCF PORTA, LCD_RS
BCF PORTA, LCD_RW
BSF PORTA, LCD_E
MOVLW B'00111100'
MOVWF PORTB
BCF PORTA, LCD_E
MOVLW .6
MOVWF DLY_CNT1
CALL DELAY
DECFSZ INIT_CNT
GOTO LP1
BCF FLAGR, DATA_INSTR
CLRF INSTR_POINTR
LP2
MOVF INSTR_POINTR, W
CALL INSTR_TABLE
MOVWF WRITE_BUF
IORWF WRITE_BUF
BTFSC STATUS,ZF
GOTO LP3
CALL WRITE_TO_LCD
INCF INSTR_POINTR
GOTO LP2
LP3
CALL DSP_TO_LCD
CALL DELAY_2
CALL DELAY_2
CALL DELAY_2
CALL DELAY_2
DSP_CON
MOVLW .255
MOVWF DLY_CNT3
MOVLW .5
MOVWF DSP_ON_OFF
MOVLW .200
MOVWF RIGHT
ON_OFF
CALL BUSY_CHECK
BCF FLAGR,DATA_INSTR
MOVLW B'00001000'
MOVWF WRITE_BUF
CALL DSP_TO_LCD2
CALL DELAY_2
CALL DELAY_2
CALL DELAY_2
CALL BUSY_CHECK
BCF FLAGR,DATA_INSTR
MOVLW B'00001100'
MOVWF WRITE_BUF
CALL DSP_TO_LCD2
CALL DELAY_2
CALL DELAY_2
CALL DELAY_2
DECFSZ DSP_ON_OFF
GOTO ON_OFF
R_SHIFT
CALL BUSY_CHECK
BCF FLAGR,DATA_INSTR
MOVLW B'00011000'
MOVWF WRITE_BUF
CALL DSP_TO_LCD2
CALL DELAY_2
DECFSZ RIGHT
GOTO R_SHIFT
HOME
CALL BUSY_CHECK
BCF FLAGR,DATA_INSTR
MOVLW B'00000010'
MOVWF WRITE_BUF
CALL DSP_TO_LCD2
CALL DELAY_2
CALL DELAY_2
CALL DELAY_2
CALL DELAY_2
GOTO DSP_CON
DELAY
DL_1 CLRF DLY_CNT2
DL_2 DECFSZ DLY_CNT2
GOTO DL_2
DECFSZ DLY_CNT1
GOTO DL_1
RETURN
DELAY_2
DL_3 CLRF DLY_CNT2
DL_4 DECFSZ DLY_CNT2
GOTO DL_4
DECFSZ DLY_CNT3
GOTO DL_3
RETURN
BUSY_CHECK
BCF PORTA, LCD_RS
BSF PORTA, LCD_RW
BSF PORTA, LCD_E
BSF STATUS, RP0
MOVLW B'10000000'
MOVWF TRISB
BCF STATUS, RP0
BTFSS PORTB, 7
GOTO YES
BCF PORTA, LCD_E
GOTO BUSY_CHECK
YES BCF PORTA, LCD_E
RETURN
WRITE_TO_LCD
CALL BUSY_CHECK
BCF PORTA, LCD_RW
BTFSS FLAGR, DATA_INSTR
BCF PORTA, LCD_RS
BTFSC FLAGR, DATA_INSTR
BSF PORTA, LCD_RS
BSF PORTA, LCD_E
BSF STATUS, RP0
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS, RP0
MOVF WRITE_BUF, W
MOVWF PORTB
BCF PORTA, LCD_E
RETURN
INSTR_TABLE
ADDWF PC
RETLW B'00111100' ; FUNCTION SET
RETLW B'00001000' ; DISPLAY OFF
RETLW B'00000001' ; DISPLAY CLEAR
RETLW B'00000110' ; ENTRY MODE SET
RETLW B'00001100' ; DISPLAY ON
RETLW .0
DSP_TO_LCD
BCF FLAGR, DATA_INSTR
MOVLW B'10000000'
MOVWF WRITE_BUF
CALL WRITE_TO_LCD
BSF FLAGR, DATA_INSTR
CLRF DATA_POINTR
DW1
MOVF DATA_POINTR, W ; DATA_POINTR°¡ Áö½ÃÇÏ´Â ¹®ÀÚµ¥ÀÌÅ͸¦
CALL DATA_TABLE ; DATA_TABLE¿¡¼ Â÷·Ê·Î °¡Á®¿Í¼
MOVWF WRITE_BUF
IORWF WRITE_BUF ; µ¥ÀÌÅͰ¡ 0ÀÏ ¶§ ±îÁö
BTFSC STATUS, ZF
RETURN
CALL WRITE_TO_LCD ; °¡Áö°í ¿Â ¹®ÀÚ µ¥ÀÌÅ͸¦ LCD¿¡ Ç¥½ÃÇÑ´Ù.
INCF DATA_POINTR
GOTO DW1
DSP_TO_LCD2
CALL BUSY_CHECK
BCF PORTA,LCD_RW
BCF PORTA,LCD_RS
BSF PORTA,LCD_E
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,RP0
MOVF WRITE_BUF,W
MOVWF PORTB
BCF PORTA,LCD_E
RETURN
DATA_TABLE
ADDWF PC
RETLW 20H
RETLW 2AH ;'*'
RETLW 2AH ;'*'
RETLW 2AH ;'*'
RETLW 41H ;'A'
RETLW 4DH ;'M'
RETLW 43H ;'C'
RETLW 53H ;'S'
RETLW 20H ;' '
RETLW 4CH ;'L'
RETLW 41H ;'A'
RETLW 50H ;'P'
RETLW 2AH ;'*'
RETLW 2AH ;'*'
RETLW 2AH ;'*'
RETLW 20H ;' '
GOTO DT1
GOTO DT2
; ADDWF PCL
RETLW 69H ;'i'
RETLW 6EH ;'n'
RETLW 65H ;'e'
RETLW 20H ;' '
RETLW 4CH ;'L'
RETLW 69H ;'i'
RETLW 6EH ;'n'
RETLW 65H ;'e'
RETLW 20H ;' '
RETLW 54H ;'T'
RETLW 72H ;'r'
RETLW 61H ;'a'
RETLW 63H ;'c'
RETLW 65H ;'e'
RETLW 72H ;'r'
RETLW 0
DT1 BCF FLAGR, DATA_INSTR
RETLW B'11000000'
DT2 BSF FLAGR, DATA_INSTR
RETLW 4DH ;'M'
END