Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
; 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
; 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
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"
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