;   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