;------------------- Han-cho game -------------------- INCLUDE"p16F84A.inc" list p=16F84A ;----------------------------------------------------- __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF ;----------- Declaration of variables ---------------- Memory EQU 0x0C DX EQU Memory+0 DXX EQU DX+1 WORK1 EQU DXX+1 WORK2 EQU WORK1+1 WORK3 EQU WORK2+1 TIME1 EQU WORK3+1 TIME2 EQU TIME1+1 TIME3 EQU TIME2+1 CUR1 EQU TIME3+1 CUR2 EQU CUR1+1 BUF EQU CUR2+1 RAND EQU BUF+1 FLAG EQU RAND+1 SCORE EQU FLAG+1 MAX_SC EQU SCORE+1 ; MAX_SC < 10 CHARA EQU MAX_SC+1 WN_LS EQU CHARA+1 ;----------------------------------------------------- ORG 0 GOTO START ORG 4 START ;------------ Initialization of variables ------------ MOVLW B'10000000' MOVWF CUR1 MOVLW B'11000000' MOVWF CUR2 MOVLW D'6' MOVWF MAX_SC MOVLW 0x30 MOVWF CHARA ;------------------- Port Setting -------------------- BSF STATUS,RP0 MOVLW 0x00 MOVWF TRISA MOVLW B'00000111' MOVWF TRISB BCF STATUS,RP0 CALL ini_lcd MAIN CALL CLRLCD CALL MENU MOVLW B'01010101' MOVWF RAND MOVLW D'3' MOVWF SCORE ;----------------------------------------------------- CALL CLRPORTB ;------------------- Main Routine -------------------- MAINLOOP BTFSS PORTB,0 CALL G_START BTFSS PORTB,1 CALL G_RULE BTFSS PORTB,2 CALL G_END GOTO MAINLOOP ;----------------------------------------------------- ;--------------- Clear display of LCD ---------------- CLRLCD MOVLW D'15' MOVWF BUF MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0x20 CALL PUTCHAR CLRPOS1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x20 CALL PUTCHAR DECFSZ BUF,1 GOTO CLRPOS1 MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x20 CALL PUTCHAR MOVLW D'15' MOVWF BUF CLRPOS2 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x20 CALL PUTCHAR DECFSZ BUF,1 GOTO CLRPOS2 RETURN ;------------------------------------------------- CLRPORTB BTFSS PORTB,0 GOTO CLRPORTB BTFSS PORTB,1 GOTO CLRPORTB BTFSS PORTB,2 GOTO CLRPORTB RETURN ;------------- Display main menu ----------------- MENU CALL DISPGAME MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x42 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xBD CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC0 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xB0 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC4 CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x59 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD9 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xB0 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD9 CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x52 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xB5 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xDC CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD8 CALL PUTCHAR RETURN ;--------------------------------------------------- ;------------------ Game start --------------------- G_START CALL CLRPORTB CALL CLRLCD CALL HANCHO INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x3F CALL PUTCHAR MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x42 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xCA CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xDD CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x59 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC1 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xAE CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xB3 CALL PUTCHAR SUBLOOP1 RRF RAND,1 ; Sub Routine CLRF FLAG BTFSS PORTB,0 CALL HAN BTFSS PORTB,1 CALL CHO ; URAWAZA BTFSS PORTB,2 CALL URAWAZA BTFSS FLAG,0 GOTO SUBLOOP1 MOVF RAND,0 XORWF WN_LS,1 BTFSC WN_LS,0 CALL YOUWIN BTFSS WN_LS,0 CALL YOULOSE CALL DISPSCR MOVF SCORE,0 CALL DISPVAL CALL JUDGE CALL CONT_NOT RETURN HAN CALL CLRPORTB BSF FLAG,0 BSF WN_LS,0 RETURN CHO CALL CLRPORTB BSF FLAG,0 BCF WN_LS,0 RETURN URAWAZA CALL CLRPORTB CALL CLRLCD CLRF FLAG MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0x50 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x41 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x53 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x53 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x58 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x52 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x44 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x3F CALL PUTCHAR CALL CLRPORTB URALOOP1 BTFSS PORTB,0 GOTO ACCEPT1 BTFSS PORTB,1 GOTO REJECT1 BTFSS PORTB,2 GOTO REJECT1 GOTO URALOOP1 ACCEPT1 CALL CLRPORTB BSF FLAG,1 REJECT1 CALL CLRPORTB INCF WORK1,1 CALL ASTA URALOOP2 BTFSS PORTB,0 GOTO ACCEPT2 BTFSS PORTB,1 GOTO REJECT2 BTFSS PORTB,2 GOTO REJECT2 GOTO URALOOP2 ACCEPT2 CALL CLRPORTB BSF FLAG,2 REJECT2 CALL CLRPORTB CALL ASTA URALOOP3 BTFSS PORTB,0 GOTO REJECT3 BTFSS PORTB,1 GOTO REJECT3 BTFSS PORTB,2 GOTO ACCEPT3 GOTO URALOOP3 ACCEPT3 CALL ASTA BSF FLAG,3 CALL CLRPORTB MOVLW B'00001110' XORWF FLAG,0 BTFSC STATUS,Z CALL CH_RAND GOTO G_START REJECT3 CALL ASTA MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x4E CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x47 CALL PUTCHAR GOTO G_OVER CH_RAND CALL CLRPORTB MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x4B CALL PUTCHAR MOVLW B'00000000' MOVWF RAND RLF RAND,1 BCF RAND,0 RETURN ASTA INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xFF CALL PUTCHAR RETURN ; ---- Explanation of the rules for the game ----- G_RULE CALL CLRPORTB CALL CLRLCD CALL HANCHO INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xA6 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB1 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xC3 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xD9 CALL PUTCHAR MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x4B CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x28 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x42 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x29 CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xBE CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xAF CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC3 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xB2 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x28 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x52 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x29 CALL PUTCHAR RULELOOP BTFSS PORTB,0 GOTO MAIN BTFSS PORTB,1 GOTO MAIN BTFSS PORTB,2 GOTO SETNUM GOTO RULELOOP RETURN SETNUM CALL CLRLCD CALL CLRPORTB MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0xB8 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xD8 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB1 CALL PUTCHAR CALL DISPSCR MOVF MAX_SC,0 CALL DISPVAL MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x42 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x3C CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x59 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x3E CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x52 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD3 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC4 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xDE CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD9 CALL PUTCHAR SETLOOP BTFSS PORTB,0 CALL MAXUP BTFSS PORTB,1 CALL MAXDWN BTFSS PORTB,2 GOTO MAIN GOTO SETLOOP MAXUP CALL CLRPORTB INCF MAX_SC,1 MOVLW D'10' XORWF MAX_SC,0 BTFSC STATUS,Z GOTO MAX_LIM CALL DISPMAX RETURN MAXDWN CALL CLRPORTB DECF MAX_SC,1 MOVLW D'3' XORWF MAX_SC,0 BTFSC STATUS,Z GOTO MIN_LIM CALL DISPMAX RETURN DISPMAX MOVLW B'10000110' MOVWF WORK1 MOVF MAX_SC,0 CALL DISPVAL RETURN MAX_LIM MOVLW D'9' MOVWF MAX_SC RETURN MIN_LIM MOVLW D'4' MOVWF MAX_SC RETURN ; --------------------------------------------------- ; ------------------- End game ---------------------- G_END CALL CLRLCD MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0xB5 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xC2 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB6 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xDA CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xBB CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xCF CALL PUTCHAR MOVLW D'10' MOVWF BUF FINLOOP MOVLW D'255' CALL wait_ms DECFSZ BUF,1 GOTO FINLOOP CLRF PORTB INFLOOP GOTO INFLOOP RETURN ; ---------------------------------------------------- START_END CALL DISPCONT STLOOP BTFSS PORTB,0 GOTO MAIN BTFSS PORTB,1 GOTO G_END GOTO STLOOP CONT_NOT CALL CLRPORTB CALL DISPCONT CONTLOOP BTFSS PORTB,0 GOTO G_START BTFSS PORTB,1 GOTO MAIN GOTO CONTLOOP DISPCONT MOVF CUR2,0 MOVWF WORK2 CALL SETMODE MOVLW 0x42 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC2 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xC2 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xDE CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xB9 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD9 CALL PUTCHAR INCF WORK2,1 INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0x59 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD4 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD2 CALL PUTCHAR INCF WORK2,1 MOVF WORK2,0 CALL SETMODE MOVLW 0xD9 CALL PUTCHAR RETURN ;------------------ When you won ---------------------- YOUWIN INCF SCORE,1 CALL CLRLCD CALL DISPYOU INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x57 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4E CALL PUTCHAR RETURN ;------------------------------------------------------ ;------------------ When you lost --------------------- YOULOSE DECF SCORE,1 CALL CLRLCD CALL DISPYOU INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4C CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x53 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x54 CALL PUTCHAR RETURN ; Judge JUDGE MOVF MAX_SC,0 XORWF SCORE,0 BTFSC STATUS,Z GOTO G_CLEAR MOVF SCORE,1 BTFSC STATUS,Z GOTO G_OVER RETURN ;------------------------------------------------------- DISPSCR INCF WORK1,1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xBD CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xBA CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB1 CALL PUTCHAR RETURN DISPVAL MOVWF WORK3 INCF WORK1,1 MOVF CHARA,0 MOVWF BUF MOVF WORK3,0 ADDWF BUF,1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVF BUF,0 CALL PUTCHAR RETURN G_CLEAR CALL LNGSTOP CALL CLRLCD MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0x43 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x6F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x6E CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x67 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x72 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x61 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x74 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x75 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x7C CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x61 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x74 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x69 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x6F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x6E CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x21 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x21 CALL PUTCHAR MOVLW D'10' MOVWF BUF CNGLOOP1 MOVLW B'00010111' MOVWF PORTB MOVLW D'200' CALL wait_ms MOVLW B'00100111' MOVWF PORTB MOVLW D'200' CALL wait_ms MOVLW B'01000111' MOVWF PORTB MOVLW D'200' CALL wait_ms DECFSZ BUF,1 GOTO CNGLOOP1 MOVLW D'5' MOVWF BUF CNGLOOP2 MOVLW B'01100111' MOVWF PORTB MOVLW D'200' CALL wait_ms MOVLW B'00110111' MOVWF PORTB MOVLW D'200' CALL wait_ms MOVLW B'01010111' MOVWF PORTB MOVLW D'200' CALL wait_ms DECFSZ BUF,1 GOTO CNGLOOP2 MOVLW B'01110111' MOVWF PORTB CALL LNGSTOP GOTO START_END G_OVER CALL LNGSTOP CALL CLRLCD CALL DISPGAME INCF WORK1,1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x56 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x45 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x52 CALL PUTCHAR CALL LNGSTOP GOTO START_END DISPGAME MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0x47 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x41 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4D CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x45 CALL PUTCHAR RETURN DISPYOU MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0x59 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x4F CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0x55 CALL PUTCHAR INCF WORK1,1 RETURN HANCHO MOVF CUR1,0 MOVWF WORK1 CALL SETMODE MOVLW 0xCA CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xDD CALL PUTCHAR INCF WORK1,1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB6 CALL PUTCHAR INCF WORK1,1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xC1 CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xAE CALL PUTCHAR INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB3 CALL PUTCHAR INCF WORK1,1 INCF WORK1,1 MOVF WORK1,0 CALL SETMODE MOVLW 0xB6 CALL PUTCHAR RETURN ;---------------------------------------------------- ;---------------- Temporisation --------------------- LNGSTOP MOVLW D'15' MOVWF BUF OVRLOOP MOVLW D'255' CALL wait_ms DECFSZ BUF,1 GOTO OVRLOOP RETURN ;---------------------------------------------------- ;----------- Cursor Pos. Setting Mode --------------- SETMODE BCF PORTA,1 MOVWF DXX CALL WR_LCD4 RETURN ;---------------------------------------------------- ;------- Character Display Sub Program -------------- PUTCHAR BSF PORTA,1 MOVWF DXX CALL WR_LCD4 RETURN WR_LCD8 MOVF DX,0 MOVWF PORTB NOP BSF PORTA,0 NOP BCF PORTA,0 MOVLW D'20' CALL wait_ms RETURN WR_LCD4 MOVF DXX,0 MOVWF DX CALL WR_LCD8 SWAPF DX,1 CALL WR_LCD8 RETURN ;----------------------------------------------------- ;----------- Waiting time Sub Program ---------------- wait_ms MOVWF TIME1 STEPM MOVLW 0xFF MOVWF TIME2 STEPM1 MOVLW 0xFF DECFSZ TIME2,1 GOTO STEPM1 DECFSZ TIME1,1 GOTO STEPM RETURN ini_lcd MOVLW D'255' CALL wait_ms MOVLW B'00000000' MOVWF PORTA MOVLW B'00110000' MOVWF DX CALL WR_LCD8 MOVLW D'255' CALL wait_ms MOVLW B'00110000' MOVWF DX CALL WR_LCD8 MOVLW B'00100000' MOVWF DX CALL WR_LCD8 MOVLW B'00101000' MOVWF DXX CALL WR_LCD4 MOVLW B'00000001' MOVWF DXX CALL WR_LCD4 MOVLW D'255' CALL wait_ms MOVLW B'00000110' MOVWF DXX CALL WR_LCD4 MOVLW B'00001110' MOVWF DXX CALL WR_LCD4 RETURN END ;-----------------------------------------------------