Sei sulla pagina 1di 20

; Begin

R0L EQU 0x20


R0H EQU 0x21
R1L EQU 0x22
R1H EQU 0x23
R2L EQU 0x24
R2H EQU 0x25
R3L EQU 0x26
R3H EQU 0x27
R4L EQU 0x28
R4H EQU 0x29
R5L EQU 0x2A
R5H EQU 0x2B
ORG 0x0000
BCF PCLATH,3
BCF PCLATH,4
GOTO L0009
ORG 0x0004
RETFIE
L0009:
; 1: Define CONF_WORD = 0x3f72
; 2: Define CLOCK_FREQUENCY = 16
; 3: Define LCD_BITS = 4 'allowed values are 4 and 8 - the number of data interf
ace lines
; 4: Define LCD_DREG = PORTB
; 5: Define LCD_DBIT = 4 '0 or 4 for 4-bit interface, ignored for 8-bit interfac
e
; 6: Define LCD_RSREG = PORTB
; 7: Define LCD_RSBIT = 1
; 8: Define LCD_EREG = PORTB
; 9: Define LCD_EBIT = 3
; 10: Define LCD_RWREG = PORTB 'set to 0 if not used, 0 is default
; 11: Define LCD_RWBIT = 2 'set to 0 if not used, 0 is default
; 12: Define LCD_COMMANDUS = 2000 'delay after LCDCMDOUT, default value is 5000
; 13: Define LCD_DATAUS = 50 'delay after LCDOUT, default value is 100
; 14: Define LCD_INITMS = 2 'delay used by LCDINIT, default value is 100
; 15: TRISC = 0xf0 'set all PORTA pins as inputs
BSF STATUS,RP0
MOVLW 0xF0
MOVWF 0x07
; 16: TRISD = %11001100
MOVLW 0xCC
MOVWF 0x08
BCF STATUS,RP0
; 17: Lcdinit 0 'initialize LCD module; cursor is blinking
BCF 0x06,3
BCF 0x06,1
BCF 0x06,2
BSF STATUS,RP0
BCF 0x06,3
BCF 0x06,1
BCF 0x06,2
MOVLW 0x0F
ANDWF 0x06,F
BCF STATUS,RP0
MOVLW 0x02
MOVWF R0L
MOVLW 0x00
MOVWF R0H
CALL W001

; 18:

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

19:
20:
21:
22:
23:
24:
25:
26:
27:

; 28:
; 29:
; 30:
;
; 31:
;
; 32:
;
; 33:
;
; 34:

MOVLW 0x33
CALL LC02
MOVLW 0x33
CALL LC02
MOVLW 0x33
CALL LC02
MOVLW 0x22
CALL LC02
MOVLW 0x28
CALL LC02
MOVLW 0x0C
CALL LC02
MOVLW 0x01
CALL LC02
AllDigital
BSF STATUS,RP0
MOVLW 0x06
MOVWF 0x1F
Symbol raw1 = RC7
The address of 'raw1' is 0x7,7
Symbol raw2 = RC6
The address of 'raw2' is 0x7,6
Symbol raw3 = RC5
The address of 'raw3' is 0x7,5
Symbol raw4 = RC4
The address of 'raw4' is 0x7,4
Symbol col1 = RC0
The address of 'col1' is 0x7,0
Symbol col2 = RC1
The address of 'col2' is 0x7,1
Symbol col3 = RC2
The address of 'col3' is 0x7,2
Symbol col4 = RC3
The address of 'col4' is 0x7,3
TRISC = 0xf0
MOVLW 0xF0
MOVWF 0x07
TRISD.0 = 0
BCF 0x08,0
TRISD.1 = 0
BCF 0x08,1
BCF STATUS,RP0
Dim button As Byte
The address of 'button' is 0x2C
button EQU 0x2C
Dim i As Byte
The address of 'i' is 0x2D
i EQU 0x2D
Dim j As Byte
The address of 'j' is 0x2E
j EQU 0x2E
Dim a(10) As Byte
The address of 'a' is 0x2F
a EQU 0x2F
PORTD = %00000000
CLRF 0x08
main:

; 35:
L0001:
; 36: Lcdcmdout LcdLine2Clear 'clear LCD display
MOVLW 0xC0

CALL LC02
MOVLW 0x28
MOVWF R0L
L0010: MOVLW 0x20
CALL LC01
DECFSZ R0L,F
GOTO L0010
MOVLW 0xC0
CALL LC02
; 37: Lcdcmdout LcdLine1Home 'set cursor at the beginning of line 2
MOVLW 0x80
CALL LC02
; 38: Lcdout "
WELCOME
" 'formatted text for line 2
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x57
CALL LC01
MOVLW 0x45
CALL LC01
MOVLW 0x4C
CALL LC01
MOVLW 0x43
CALL LC01
MOVLW 0x4F
CALL LC01
MOVLW 0x4D
CALL LC01
MOVLW 0x45
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
; 39: WaitMs 500 'larger value should be used in real device
MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001
; 40: loop:
L0002:
; 41: Gosub get_button
CALL L0007
; 42: If button = "*" Then
MOVF 0x2C,W
SUBLW 0x2A
BTFSS STATUS,Z
GOTO L0011

; 43: Lcdcmdout LcdLine1Home 'set cursor at the beginning of line 2


MOVLW 0x80
CALL LC02
; 44: Lcdout " Enter Password " 'formatted text for line 2
MOVLW 0x20
CALL LC01
MOVLW 0x45
CALL LC01
MOVLW 0x6E
CALL LC01
MOVLW 0x74
CALL LC01
MOVLW 0x65
CALL LC01
MOVLW 0x72
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x50
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x73
CALL LC01
MOVLW 0x73
CALL LC01
MOVLW 0x77
CALL LC01
MOVLW 0x6F
CALL LC01
MOVLW 0x72
CALL LC01
MOVLW 0x64
CALL LC01
MOVLW 0x20
CALL LC01
; 45: WaitMs 500
MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001
; 46:
; 47: For i = 0 To 3
CLRF 0x2D
L0012:
MOVF 0x2D,W
SUBLW 0x03
BTFSS STATUS,C
GOTO L0013
; 48: loop1:
L0003:
; 49: Gosub get_button
CALL L0007
; 50: WaitMs 500
MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001

; 51: If button = 0 Then


MOVF 0x2C,W
SUBLW 0x00
BTFSS STATUS,Z
GOTO L0014
; 52: Goto loop1
GOTO L0003
; 53: Else
GOTO L0015
L0014: MOVLW 0x1F
ANDWF STATUS,F
; 54: If button = "*" Then
MOVF 0x2C,W
SUBLW 0x2A
BTFSS STATUS,Z
GOTO L0016
; 55: Goto loop1
GOTO L0003
; 56: Else
GOTO L0017
L0016: MOVLW 0x1F
ANDWF STATUS,F
; 57: j = j + 1
MOVF 0x2E,W
ADDLW 0x01
MOVWF 0x2E
; 58: a(i) = button
MOVF 0x2C,W
MOVWF R5L
MOVF 0x2D,W
ADDLW 0x2F
MOVWF FSR
MOVF R5L,W
MOVWF INDF
; 59: Lcdcmdout LcdLine2Clear
MOVLW 0xC0
CALL LC02
MOVLW 0x28
MOVWF R0L
L0018: MOVLW 0x20
CALL LC01
DECFSZ R0L,F
GOTO L0018
MOVLW 0xC0
CALL LC02
; 60: Lcdcmdout LcdLine2Pos(j) 'set cursor at the beginning of line 2
DECF 0x2E,W
IORLW 0xC0
CALL LC02
; 61: Lcdout "*"
MOVLW 0x2A
CALL LC01
; 62: PORTD.0 = 1
BSF 0x08,0
; 63: WaitMs 500
MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001

; 64: PORTD.0 = 0
BCF 0x08,0
; 65:
; 66: Endif
L0017: MOVLW 0x1F
ANDWF STATUS,F
; 67: Endif
L0015: MOVLW 0x1F
ANDWF STATUS,F
; 68: Next i
MOVLW 0x01
ADDWF 0x2D,F
BTFSS STATUS,C
GOTO L0012
L0013: MOVLW 0x1F
ANDWF STATUS,F
; 69: j = 0
CLRF 0x2E
; 70: For i = 4 To 7
MOVLW 0x04
MOVWF 0x2D
L0019:
MOVF 0x2D,W
SUBLW 0x07
BTFSS STATUS,C
GOTO L0020
; 71: Read i, a(i)
MOVF 0x2D,W
BSF STATUS,RP1
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
NOP
BCF STATUS,RP0
MOVF EEDATA,W
BCF STATUS,RP1
MOVWF R5L
MOVF 0x2D,W
ADDLW 0x2F
MOVWF FSR
MOVF R5L,W
MOVWF INDF
; 72: Next i
MOVLW 0x01
ADDWF 0x2D,F
BTFSS STATUS,C
GOTO L0019
L0020: MOVLW 0x1F
ANDWF STATUS,F
; 73: If a(0) = a(4) Then
MOVF 0x2F,W
SUBWF 0x33,W
BTFSS STATUS,Z
GOTO L0021
; 74: If a(1) = a(5) Then
MOVF 0x30,W
SUBWF 0x34,W
BTFSS STATUS,Z
GOTO L0022

; 75: If a(2) = a(6) Then


MOVF 0x31,W
SUBWF 0x35,W
BTFSS STATUS,Z
GOTO L0023
; 76: If a(3) = a(7) Then
MOVF 0x32,W
SUBWF 0x36,W
BTFSS STATUS,Z
GOTO L0024
; 77: PORTD = %00000010
MOVLW 0x02
MOVWF 0x08
; 78: Lcdcmdout LcdLine2Home
MOVLW 0xC0
CALL LC02
; 79: Lcdout " PASSWORD OK "
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x50
CALL LC01
MOVLW 0x41
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x57
CALL LC01
MOVLW 0x4F
CALL LC01
MOVLW 0x52
CALL LC01
MOVLW 0x44
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x4F
CALL LC01
MOVLW 0x4B
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
; 80: loop12:
L0004:
; 81: Gosub get_button
CALL L0007
; 82: If button = "1" Then
MOVF 0x2C,W
SUBLW 0x31
BTFSS STATUS,Z
GOTO L0025
; 83: PORTD.4 = 1
BSF 0x08,4

; 84: WaitMs 100


MOVLW 0x64
MOVWF R0L
CLRF R0H
CALL W001
; 85: Goto loop12
GOTO L0004
; 86: Else
GOTO L0026
L0025: MOVLW 0x1F
ANDWF STATUS,F
; 87: If button = "2" Then
MOVF 0x2C,W
SUBLW 0x32
BTFSS STATUS,Z
GOTO L0027
; 88: PORTD.5 = 1
BSF 0x08,5
; 89: WaitMs 100
MOVLW 0x64
MOVWF R0L
CLRF R0H
CALL W001
; 90: Goto loop12
GOTO L0004
; 91: Else
GOTO L0028
L0027: MOVLW 0x1F
ANDWF STATUS,F
; 92: If button = "3" Then
MOVF 0x2C,W
SUBLW 0x33
BTFSS STATUS,Z
GOTO L0029
; 93: PORTD.4 = 0
BCF 0x08,4
; 94: WaitMs 100
MOVLW 0x64
MOVWF R0L
CLRF R0H
CALL W001
; 95: Goto loop12
GOTO L0004
; 96:
; 97: Else
GOTO L0030
L0029: MOVLW 0x1F
ANDWF STATUS,F
; 98: If button = "4" Then
MOVF 0x2C,W
SUBLW 0x34
BTFSS STATUS,Z
GOTO L0031
; 99: PORTD.5 = 0
BCF 0x08,5
; 100: WaitMs 100
MOVLW 0x64
MOVWF R0L
CLRF R0H
CALL W001

; 101: Goto loop12


GOTO L0004
; 102: Else
GOTO L0032
L0031: MOVLW 0x1F
ANDWF STATUS,F
; 103: If button = "0" Then
MOVF 0x2C,W
SUBLW 0x30
BTFSS STATUS,Z
GOTO L0033
; 104: PORTD.4 = 0
BCF 0x08,4
; 105: PORTD.5 = 0
BCF 0x08,5
; 106: WaitMs 100
MOVLW 0x64
MOVWF R0L
CLRF R0H
CALL W001
; 107: Goto loop12
GOTO L0004
; 108: Else
GOTO L0034
L0033: MOVLW 0x1F
ANDWF STATUS,F
; 109: If button = "6" Then
MOVF 0x2C,W
SUBLW 0x36
BTFSS STATUS,Z
GOTO L0035
; 110: Goto loop11
GOTO L0005
; 111: Else
GOTO L0036
L0035: MOVLW 0x1F
ANDWF STATUS,F
; 112: Goto loop12
GOTO L0004
; 113: Endif
L0036: MOVLW 0x1F
ANDWF STATUS,F
; 114: Goto loop12
GOTO L0004
; 115:
; 116: Endif
L0034: MOVLW 0x1F
ANDWF STATUS,F
; 117: Goto loop12
GOTO L0004
; 118:
; 119: Endif
L0032: MOVLW 0x1F
ANDWF STATUS,F
; 120: Goto loop12
GOTO L0004
; 121:
; 122: Endif
L0030: MOVLW 0x1F
ANDWF STATUS,F

; 123: Goto loop12


GOTO L0004
; 124:
; 125: Endif
L0028: MOVLW 0x1F
ANDWF STATUS,F
; 126: Goto loop12
GOTO L0004
; 127:
; 128: Endif
L0026: MOVLW 0x1F
ANDWF STATUS,F
; 129: Goto loop12
GOTO L0004
; 130: loop11:
L0005:
; 131: WaitMs 5000
MOVLW 0x88
MOVWF R0L
MOVLW 0x13
MOVWF R0H
CALL W001
; 132: Else
GOTO L0037
L0024: MOVLW 0x1F
ANDWF STATUS,F
; 133: 'PORTD = %00000000
; 134: Gosub lcd
CALL L0008
; 135: Endif
L0037: MOVLW 0x1F
ANDWF STATUS,F
; 136: Else
GOTO L0038
L0023: MOVLW 0x1F
ANDWF STATUS,F
; 137: 'PORTD = %00000000
; 138: Gosub lcd
CALL L0008
; 139: Endif
L0038: MOVLW 0x1F
ANDWF STATUS,F
; 140: Else
GOTO L0039
L0022: MOVLW 0x1F
ANDWF STATUS,F
; 141: 'PORTD = %00000000
; 142: Gosub lcd
CALL L0008
; 143: Endif
L0039: MOVLW 0x1F
ANDWF STATUS,F
; 144: Else
GOTO L0040
L0021: MOVLW 0x1F
ANDWF STATUS,F
; 145: 'PORTD = %00000000
; 146: Gosub lcd
CALL L0008
; 147: Endif

L0040: MOVLW 0x1F


ANDWF STATUS,F
; 148: WaitMs 1000 'larger value should be used in real device
MOVLW 0xE8
MOVWF R0L
MOVLW 0x03
MOVWF R0H
CALL W001
; 149: Else
GOTO L0041
L0011: MOVLW 0x1F
ANDWF STATUS,F
; 150: 'PORTD = %00000000
; 151:
; 152:
; 153: If button = "#" Then
MOVF 0x2C,W
SUBLW 0x23
BTFSS STATUS,Z
GOTO L0042
; 154: j = 0
CLRF 0x2E
; 155: PORTD = %00000000
CLRF 0x08
; 156: Lcdcmdout LcdLine1Home 'set cursor at the beginning of line 2
MOVLW 0x80
CALL LC02
; 157: Lcdout " New Password " 'formatted text for line 2
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x4E
CALL LC01
MOVLW 0x65
CALL LC01
MOVLW 0x77
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x50
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x73
CALL LC01
MOVLW 0x73
CALL LC01
MOVLW 0x77
CALL LC01
MOVLW 0x6F
CALL LC01
MOVLW 0x72
CALL LC01
MOVLW 0x64
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01

; 158: WaitMs 500


MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001
; 159:
; 160: For i = 4 To 7
MOVLW 0x04
MOVWF 0x2D
L0043:
MOVF 0x2D,W
SUBLW 0x07
BTFSS STATUS,C
GOTO L0044
; 161: loop2:
L0006:
; 162: Gosub get_button
CALL L0007
; 163: WaitMs 500
MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001
; 164: If button = 0 Then
MOVF 0x2C,W
SUBLW 0x00
BTFSS STATUS,Z
GOTO L0045
; 165: Goto loop2
GOTO L0006
; 166: Else
GOTO L0046
L0045: MOVLW 0x1F
ANDWF STATUS,F
; 167: If button = "*" Then
MOVF 0x2C,W
SUBLW 0x2A
BTFSS STATUS,Z
GOTO L0047
; 168: Goto loop2
GOTO L0006
; 169: Else
GOTO L0048
L0047: MOVLW 0x1F
ANDWF STATUS,F
; 170: j = j + 1
MOVF 0x2E,W
ADDLW 0x01
MOVWF 0x2E
; 171: Write i, button
MOVF 0x2D,W
BSF STATUS,RP1
MOVWF EEADR
BCF STATUS,RP1
MOVF 0x2C,W
BSF STATUS,RP1
MOVWF EEDATA
BSF STATUS,RP0

L0049:

; 172:

L0050:

; 173:

; 174:
; 175:
; 176:

; 177:
; 178:
L0048:
; 179:
L0046:
; 180:

L0044:
; 181:

L0051:

BCF EECON1,EEPGD
BSF EECON1,WREN
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
BTFSC EECON1,WR
GOTO L0049
BCF EECON1,WREN
BCF STATUS,RP1
BCF STATUS,RP0
BCF PIR2,EEIF
Lcdcmdout LcdLine2Clear
MOVLW 0xC0
CALL LC02
MOVLW 0x28
MOVWF R0L
MOVLW 0x20
CALL LC01
DECFSZ R0L,F
GOTO L0050
MOVLW 0xC0
CALL LC02
Lcdcmdout LcdLine2Pos(j) 'set cursor at the beginning of line 2
DECF 0x2E,W
IORLW 0xC0
CALL LC02
Lcdout "*"
MOVLW 0x2A
CALL LC01
PORTD.0 = 1
BSF 0x08,0
WaitMs 500
MOVLW 0xF4
MOVWF R0L
MOVLW 0x01
MOVWF R0H
CALL W001
PORTD.0 = 0
BCF 0x08,0
Endif
MOVLW 0x1F
ANDWF STATUS,F
Endif
MOVLW 0x1F
ANDWF STATUS,F
Next i
MOVLW 0x01
ADDWF 0x2D,F
BTFSS STATUS,C
GOTO L0043
MOVLW 0x1F
ANDWF STATUS,F
Lcdcmdout LcdLine2Clear
MOVLW 0xC0
CALL LC02
MOVLW 0x28
MOVWF R0L
MOVLW 0x20

; 182:

; 183:
; 184:

; 185:
; 186:
; 187:
L0042:
; 188:
; 189:
L0041:
; 190:

CALL LC01
DECFSZ R0L,F
GOTO L0051
MOVLW 0xC0
CALL LC02
Lcdout "
SUCCESS
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x55
CALL LC01
MOVLW 0x43
CALL LC01
MOVLW 0x43
CALL LC01
MOVLW 0x45
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
PORTD.0 = 1
BSF 0x08,0
WaitMs 1000
MOVLW 0xE8
MOVWF R0L
MOVLW 0x03
MOVWF R0H
CALL W001
PORTD.0 = 0
BCF 0x08,0
j = 0
CLRF 0x2E
Endif
MOVLW 0x1F
ANDWF STATUS,F
Goto main
GOTO L0001
Endif
MOVLW 0x1F
ANDWF STATUS,F
Goto main
GOTO L0001

"

; 191:
; 192:
L0052:
; 193:
; 194:
L0007:
; 195:
; 196:
; 197:

L0053:
; 198:

L0054:
; 199:

L0055:
; 200:

L0056:
; 201:
; 202:
; 203:

L0057:
; 204:

L0058:
; 205:

End
GOTO L0052
get_button:
button = 0
CLRF 0x2C
col1 = 1
BSF 0x07,0
If raw1 = 1 Then
BTFSS 0x07,7
GOTO L0053
MOVLW 0x41
MOVWF 0x2C
MOVLW 0x1F
ANDWF STATUS,F
If raw2 = 1 Then
BTFSS 0x07,6
GOTO L0054
MOVLW 0x42
MOVWF 0x2C
MOVLW 0x1F
ANDWF STATUS,F
If raw3 = 1 Then
BTFSS 0x07,5
GOTO L0055
MOVLW 0x43
MOVWF 0x2C
MOVLW 0x1F
ANDWF STATUS,F
If raw4 = 1 Then
BTFSS 0x07,4
GOTO L0056
MOVLW 0x44
MOVWF 0x2C
MOVLW 0x1F
ANDWF STATUS,F
col1 = 0
BCF 0x07,0
col2 = 1
BSF 0x07,1
If raw1 = 1 Then
BTFSS 0x07,7
GOTO L0057
MOVLW 0x33
MOVWF 0x2C
MOVLW 0x1F
ANDWF STATUS,F
If raw2 = 1 Then
BTFSS 0x07,6
GOTO L0058
MOVLW 0x36
MOVWF 0x2C
MOVLW 0x1F
ANDWF STATUS,F
If raw3 = 1 Then
BTFSS 0x07,5
GOTO L0059
MOVLW 0x39

button = "A"

button = "B"

button = "C"

button = "D"

button = "3"

button = "6"

button = "9"

MOVWF 0x2C
L0059: MOVLW 0x1F
ANDWF STATUS,F
; 206: If raw4 = 1 Then
BTFSS 0x07,4
GOTO L0060
MOVLW 0x23
MOVWF 0x2C
L0060: MOVLW 0x1F
ANDWF STATUS,F
; 207: col2 = 0
BCF 0x07,1
; 208: col3 = 1
BSF 0x07,2
; 209: If raw1 = 1 Then
BTFSS 0x07,7
GOTO L0061
MOVLW 0x32
MOVWF 0x2C
L0061: MOVLW 0x1F
ANDWF STATUS,F
; 210: If raw2 = 1 Then
BTFSS 0x07,6
GOTO L0062
MOVLW 0x35
MOVWF 0x2C
L0062: MOVLW 0x1F
ANDWF STATUS,F
; 211: If raw3 = 1 Then
BTFSS 0x07,5
GOTO L0063
MOVLW 0x38
MOVWF 0x2C
L0063: MOVLW 0x1F
ANDWF STATUS,F
; 212: If raw4 = 1 Then
BTFSS 0x07,4
GOTO L0064
MOVLW 0x30
MOVWF 0x2C
L0064: MOVLW 0x1F
ANDWF STATUS,F
; 213: col3 = 0
BCF 0x07,2
; 214: col4 = 1
BSF 0x07,3
; 215: If raw1 = 1 Then
BTFSS 0x07,7
GOTO L0065
MOVLW 0x31
MOVWF 0x2C
L0065: MOVLW 0x1F
ANDWF STATUS,F
; 216: If raw2 = 1 Then
BTFSS 0x07,6
GOTO L0066
MOVLW 0x34
MOVWF 0x2C
L0066: MOVLW 0x1F
ANDWF STATUS,F

button = "#"

button = "2"

button = "5"

button = "8"

button = "0"

button = "1"

button = "4"

; 217: If raw3 = 1 Then button = "7"


BTFSS 0x07,5
GOTO L0067
MOVLW 0x37
MOVWF 0x2C
L0067: MOVLW 0x1F
ANDWF STATUS,F
; 218: If raw4 = 1 Then button = "*"
BTFSS 0x07,4
GOTO L0068
MOVLW 0x2A
MOVWF 0x2C
L0068: MOVLW 0x1F
ANDWF STATUS,F
; 219: col4 = 0
BCF 0x07,3
; 220: Return
RETURN
; 221: lcd:
L0008:
; 222: Lcdcmdout LcdLine2Home
MOVLW 0xC0
CALL LC02
; 223: Lcdout "PASSWORD NOT OK"
MOVLW 0x50
CALL LC01
MOVLW 0x41
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x53
CALL LC01
MOVLW 0x57
CALL LC01
MOVLW 0x4F
CALL LC01
MOVLW 0x52
CALL LC01
MOVLW 0x44
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x4E
CALL LC01
MOVLW 0x4F
CALL LC01
MOVLW 0x54
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x4F
CALL LC01
MOVLW 0x4B
CALL LC01
; 224: WaitMs 1000
MOVLW 0xE8
MOVWF R0L
MOVLW 0x03

MOVWF R0H
CALL W001
; 225: Return
RETURN
; End of program
L0069: GOTO L0069
; Waitms Routine
W001: MOVF R0L,F
BTFSC STATUS,Z
GOTO W002
CALL W003
DECF R0L,F
NOP
NOP
NOP
NOP
NOP
GOTO W001
W002: MOVF R0H,F
BTFSC STATUS,Z
RETURN
CALL W003
DECF R0H,F
DECF R0L,F
GOTO W001
W003: MOVLW 0x0C
MOVWF R2H
W004: DECFSZ R2H,F
GOTO W004
NOP
NOP
MOVLW 0x4E
MOVWF R1L
W005: DECFSZ R1L,F
GOTO W006
CALL W007
CALL W007
NOP
NOP
RETURN
W006: CALL W007
GOTO W005
W007: MOVLW 0x0D
MOVWF R2L
W008: DECFSZ R2L,F
GOTO W008
NOP
RETURN
; Waitus Routine - Byte Argument
X001: MOVLW 0x03
SUBWF R4L,F
BTFSS STATUS,C
RETURN
GOTO X002
X002: MOVLW 0x02
SUBWF R4L,F
NOP
NOP
BTFSS STATUS,C
RETURN

GOTO X002
; Waitus Routine - Word Argument
Y001: MOVLW 0x04
SUBWF R4L,F
CLRW
BTFSS STATUS,C
ADDLW 0x01
SUBWF R4H,F
BTFSS STATUS,C
RETURN
GOTO Y002
Y002: MOVLW 0x03
SUBWF R4L,F
CLRW
BTFSS STATUS,C
ADDLW 0x01
SUBWF R4H,F
NOP
NOP
BTFSS STATUS,C
RETURN
GOTO Y002
; Lcdout Routine
LC01: MOVWF R4L
BSF 0x06,1
BCF 0x06,2
MOVLW 0x0F
ANDWF 0x06,F
MOVF R4L,W
ANDLW 0xF0
IORWF 0x06,F
CALL LCX1
SWAPF R4L,F
MOVLW 0x0F
ANDWF 0x06,F
MOVF R4L,W
ANDLW 0xF0
IORWF 0x06,F
CALL LCX1
MOVLW 0x32
MOVWF R4L
CALL X001
RETURN
LCX1: BSF 0x06,3
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF 0x06,3
RETURN
; Lcdcmdout Routine
LC02: MOVWF R4L
BCF 0x06,1
BCF 0x06,2
MOVLW 0x0F
ANDWF 0x06,F

MOVF R4L,W
ANDLW 0xF0
IORWF 0x06,F
CALL LCX1
SWAPF R4L,F
MOVLW 0x0F
ANDWF 0x06,F
MOVF R4L,W
ANDLW 0xF0
IORWF 0x06,F
CALL LCX1
MOVLW 0xD0
MOVWF R4L
MOVLW 0x07
MOVWF R4H
CALL Y001
RETURN
; Configuration word settings
ORG 0x2007
DW 0x3F72
; End of listing
END

Potrebbero piacerti anche