Everything works except the START subroutine. It won't output the correct characters. Anyone know anything about the "cnc", "cc" commands? Am I using them incorrectly, let me know ASAP. THANKS!!
;ORG 0000h
INIT:
lxi sp, 0a50h
mvi a,3h ;8bit mode
sta 3000
call enable
mvi a,3h ;8bit mode
sta 3000
call enable
mvi a,3h ;8bit mode
sta 3000
call enable
mvi a,2h ;set 4bit mode
sta 3000
call enable
mvi a,2h ;1/16 duty, 5x8 font
sta 3000
call enable
mvi a,8h
sta 3000
call enable
mvi a,0h ;display off,
sta 3000
call enable
mvi a,8h
sta 3000
call enable
mvi a,0h ;cursor, blink on
sta 3000
call enable
mvi a,fh
sta 3000
call enable
mvi a,0h ;set entry mode, cursor move right
sta 3000
call enable
mvi a,6h
sta 3000
call enable
START:
mvi a,0h
sta 3000
call enable
mvi a,1h
sta 3000
call enable
LDA 2000 ;READ INPUT PORT
CPI 80h ;X < 80
cnc lcd_plus
cpi 80h ;X < 80
cc lcd_minus
CPI 9h ;X < 9
cc lcd_3
CPI F7h ;X < F7
cnc lcd_3
CPI 31h ;X < 31
cc lcd_2
CPI cfh ;X < cf
cnc lcd_2
CPI 59h ;X < 59
cc lcd_1
CPI A7h ;X < A7
cnc lcd_1
CPI 1h ;X < 1
cc lcd_2
CPI 5h ;X < 5
cc lcd_1
CPI 9h ;X < 9
cc lcd_0
CPI Dh ;X < D
cc lcd_9
CPI 11h ;X < 11
cc lcd_8
CPI 15h ;X < 15
cc lcd_7
CPI 19h ;X < 19
cc lcd_6
CPI 1Dh ;X < 1D
cc lcd_5
CPI 21h ;X < 21
cc lcd_4
CPI 25h ;X < 25
cc lcd_3
CPI 29h ;X < 29
cc lcd_2
CPI 2Dh ;X < 2D
cc lcd_1
CPI 31h ;X < 31
cc lcd_0
CPI 35h ;X < 35
cc lcd_9
CPI 39h ;X < 39
cc lcd_8
CPI 3Dh ;X < 3D
cc lcd_7
CPI 41h ;X < 41
cc lcd_6
CPI 45h ;X < 45
cc lcd_5
CPI 49h ;X < 49
cc lcd_4
CPI 4Dh ;X < 4D
cc lcd_3
CPI 51h ;X < 51
cc lcd_2
CPI 55h ;X < 55
cc lcd_1
CPI 59h ;X < 59
cc lcd_0
CPI 5Dh ;X < 5D
cc lcd_9
CPI 61h ;X < 61
cc lcd_8
CPI 65h ;X < 65
cc lcd_7
CPI 69h ;X < 69
cc lcd_6
CPI 6Dh ;X < 6D
cc lcd_5
CPI 71h ;X < 71
cc lcd_4
CPI 75h ;X < 75
cc lcd_3
CPI 79h ;X < 79
cc lcd_2
CPI 7Dh ;X < 7D
cc lcd_1
CPI 84h ;X < 84
cc lcd_0
CPI 88h ;X < 88
cc lcd_1
CPI 8Ch ;X < 8C
cc lcd_2
CPI 90h ;X < 90
cc lcd_3
CPI 94h ;X < 94
cc lcd_4
CPI 98h ;X < 98
cc lcd_5
CPI 9Ch ;X < 9C
cc lcd_6
CPI A0h ;X < A0
cc lcd_7
CPI A4h ;X < A4
cc lcd_8
CPI A8h ;X < A8
cc lcd_9
CPI ACh ;X < AC
cc lcd_0
CPI B0h ;X < B0
cc lcd_1
CPI B4h ;X < B4
cc lcd_2
CPI B8h ;X < B8
cc lcd_3
CPI BCh ;X < BC
cc lcd_4
CPI C0h ;X < C0
cc lcd_5
CPI C4h ;X < C4
cc lcd_6
CPI C8h ;X < C8
cc lcd_7
CPI CCh ;X < CC
cc lcd_8
CPI D0h ;X < D0
cc lcd_9
CPI D4h ;X < D4
cc lcd_0
CPI D8h ;X < D8
cc lcd_1
CPI DCh ;X < DC
cc lcd_2
CPI E0h ;X < E0
cc lcd_3
CPI E4h ;X < E4
cc lcd_4
CPI E8h ;X < E8
cc lcd_5
CPI ECh ;X < EC
cc lcd_6
CPI F0h ;X < F0
cc lcd_7
CPI F4h ;X < F4
cc lcd_8
CPI F8h ;X < F8
cc lcd_9
CPI FCh ;X < FC
cc lcd_0
CPI FFh ;X < FF
cc lcd_1
cpi ffh
cz lcd_2
jmp START
HLT
lcd_plus:
push psw
mvi a,12h
sta 3000
call enable
mvi a,1bh
sta 3000
call enable
pop psw
ret
lcd_minus:
push psw
mvi a,12h
sta 3000
call enable
mvi a,1dh
sta 3000
call enable
pop psw
ret
lcd_0:
push psw
mvi a,13h
sta 3000
call enable
mvi a,10h
sta 3000
call enable
pop psw
ret
lcd_1:
push psw
mvi a,13h
sta 3000
call enable
mvi a,11h
sta 3000
call enable
pop psw
ret
lcd_2:
push psw
mvi a,13h
sta 3000
call enable
mvi a,12h
sta 3000
call enable
pop psw
ret
lcd_3:
push psw
mvi a,13h
sta 3000
call enable
mvi a,13h
sta 3000
call enable
pop psw
ret
lcd_4:
push psw
mvi a,13h
sta 3000
call enable
mvi a,14h
sta 3000
call enable
pop psw
ret
lcd_5:
push psw
mvi a,13h
sta 3000
call enable
mvi a,15h
sta 3000
call enable
pop psw
ret
lcd_6:
push psw
mvi a,13h
sta 3000
call enable
mvi a,16h
sta 3000
call enable
pop psw
ret
lcd_7:
push psw
mvi a,13h
sta 3000
call enable
mvi a,17h
sta 3000
call enable
pop psw
ret
lcd_8:
push psw
mvi a,13h
sta 3000
call enable
mvi a,18h
sta 3000
call enable
pop psw
ret
lcd_9:
push psw
mvi a,13h
sta 3000
call enable
mvi a,19h
sta 3000
call enable
pop psw
ret
enable:
push psw
push d
mvi d,20h
add d ;enable goes high
sta 3000
call delay
mvi d,20h ;enable goes low
sub d
sta 3000
pop d
pop psw
ret
delay:
push psw
push b
mvi b,03h
mvi c,c0h
dcr c
jnz 2e5h
dcr b
jnz 2e3h
pop b
pop psw
ret
Comments
:
: ;ORG 0000h
:
: INIT:
: lxi sp, 0a50h
:
: mvi a,3h ;8bit mode
: sta 3000
: call enable
:
: mvi a,3h ;8bit mode
: sta 3000
: call enable
:
: mvi a,3h ;8bit mode
: sta 3000
: call enable
:
: mvi a,2h ;set 4bit mode
: sta 3000
: call enable
:
: mvi a,2h ;1/16 duty, 5x8 font
: sta 3000
: call enable
: mvi a,8h
: sta 3000
: call enable
:
: mvi a,0h ;display off,
: sta 3000
: call enable
: mvi a,8h
: sta 3000
: call enable
:
: mvi a,0h ;cursor, blink on
: sta 3000
: call enable
: mvi a,fh
: sta 3000
: call enable
:
: mvi a,0h ;set entry mode, cursor move right
: sta 3000
: call enable
: mvi a,6h
: sta 3000
: call enable
:
: START:
: mvi a,0h
: sta 3000
: call enable
: mvi a,1h
: sta 3000
: call enable
:
: LDA 2000 ;READ INPUT PORT
:
: CPI 80h ;X < 80
: cnc lcd_plus
:
: cpi 80h ;X < 80
: cc lcd_minus
:
: CPI 9h ;X < 9
: cc lcd_3
:
: CPI F7h ;X < F7
: cnc lcd_3
:
: CPI 31h ;X < 31
: cc lcd_2
:
: CPI cfh ;X < cf
: cnc lcd_2
:
: CPI 59h ;X < 59
: cc lcd_1
:
: CPI A7h ;X < A7
: cnc lcd_1
:
: CPI 1h ;X < 1
: cc lcd_2
:
: CPI 5h ;X < 5
: cc lcd_1
:
: CPI 9h ;X < 9
: cc lcd_0
:
: CPI Dh ;X < D
: cc lcd_9
:
: CPI 11h ;X < 11
: cc lcd_8
:
: CPI 15h ;X < 15
: cc lcd_7
:
: CPI 19h ;X < 19
: cc lcd_6
:
: CPI 1Dh ;X < 1D
: cc lcd_5
:
: CPI 21h ;X < 21
: cc lcd_4
:
: CPI 25h ;X < 25
: cc lcd_3
:
: CPI 29h ;X < 29
: cc lcd_2
:
: CPI 2Dh ;X < 2D
: cc lcd_1
:
: CPI 31h ;X < 31
: cc lcd_0
:
: CPI 35h ;X < 35
: cc lcd_9
:
: CPI 39h ;X < 39
: cc lcd_8
:
: CPI 3Dh ;X < 3D
: cc lcd_7
:
: CPI 41h ;X < 41
: cc lcd_6
:
: CPI 45h ;X < 45
: cc lcd_5
:
: CPI 49h ;X < 49
: cc lcd_4
:
: CPI 4Dh ;X < 4D
: cc lcd_3
:
: CPI 51h ;X < 51
: cc lcd_2
:
: CPI 55h ;X < 55
: cc lcd_1
:
: CPI 59h ;X < 59
: cc lcd_0
:
: CPI 5Dh ;X < 5D
: cc lcd_9
:
: CPI 61h ;X < 61
: cc lcd_8
:
: CPI 65h ;X < 65
: cc lcd_7
:
: CPI 69h ;X < 69
: cc lcd_6
:
: CPI 6Dh ;X < 6D
: cc lcd_5
:
: CPI 71h ;X < 71
: cc lcd_4
:
: CPI 75h ;X < 75
: cc lcd_3
:
: CPI 79h ;X < 79
: cc lcd_2
:
: CPI 7Dh ;X < 7D
: cc lcd_1
:
: CPI 84h ;X < 84
: cc lcd_0
:
: CPI 88h ;X < 88
: cc lcd_1
:
: CPI 8Ch ;X < 8C
: cc lcd_2
:
: CPI 90h ;X < 90
: cc lcd_3
:
: CPI 94h ;X < 94
: cc lcd_4
:
: CPI 98h ;X < 98
: cc lcd_5
:
: CPI 9Ch ;X < 9C
: cc lcd_6
:
: CPI A0h ;X < A0
: cc lcd_7
:
: CPI A4h ;X < A4
: cc lcd_8
:
: CPI A8h ;X < A8
: cc lcd_9
:
: CPI ACh ;X < AC
: cc lcd_0
:
: CPI B0h ;X < B0
: cc lcd_1
:
: CPI B4h ;X < B4
: cc lcd_2
:
: CPI B8h ;X < B8
: cc lcd_3
:
: CPI BCh ;X < BC
: cc lcd_4
:
: CPI C0h ;X < C0
: cc lcd_5
:
: CPI C4h ;X < C4
: cc lcd_6
:
: CPI C8h ;X < C8
: cc lcd_7
:
: CPI CCh ;X < CC
: cc lcd_8
:
: CPI D0h ;X < D0
: cc lcd_9
:
: CPI D4h ;X < D4
: cc lcd_0
:
: CPI D8h ;X < D8
: cc lcd_1
:
: CPI DCh ;X < DC
: cc lcd_2
:
: CPI E0h ;X < E0
: cc lcd_3
:
: CPI E4h ;X < E4
: cc lcd_4
:
: CPI E8h ;X < E8
: cc lcd_5
:
: CPI ECh ;X < EC
: cc lcd_6
:
: CPI F0h ;X < F0
: cc lcd_7
:
: CPI F4h ;X < F4
: cc lcd_8
:
: CPI F8h ;X < F8
: cc lcd_9
:
: CPI FCh ;X < FC
: cc lcd_0
:
: CPI FFh ;X < FF
: cc lcd_1
:
: cpi ffh
: cz lcd_2
:
: jmp START
:
: HLT
:
: lcd_plus:
: push psw
: mvi a,12h
: sta 3000
: call enable
: mvi a,1bh
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_minus:
: push psw
: mvi a,12h
: sta 3000
: call enable
: mvi a,1dh
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_0:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,10h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_1:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,11h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_2:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,12h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_3:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,13h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_4:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,14h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_5:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,15h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_6:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,16h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_7:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,17h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_8:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,18h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_9:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,19h
: sta 3000
: call enable
: pop psw
: ret
:
:
: enable:
: push psw
: push d
: mvi d,20h
: add d ;enable goes high
: sta 3000
: call delay
: mvi d,20h ;enable goes low
: sub d
: sta 3000
: pop d
: pop psw
: ret
:
: delay:
: push psw
: push b
: mvi b,03h
: mvi c,c0h
: dcr c
: jnz 2e5h
: dcr b
: jnz 2e3h
: pop b
: pop psw
: ret
:
:
http:/www.insoluz.com/Micro/Micro.html
: Everything works except the START subroutine. It won't output the correct characters. Anyone know anything about the "cnc", "cc" commands? Am I using them incorrectly, let me know ASAP. THANKS!!
:
: ;ORG 0000h
:
: INIT:
: lxi sp, 0a50h
:
: mvi a,3h ;8bit mode
: sta 3000
: call enable
:
: mvi a,3h ;8bit mode
: sta 3000
: call enable
:
: mvi a,3h ;8bit mode
: sta 3000
: call enable
:
: mvi a,2h ;set 4bit mode
: sta 3000
: call enable
:
: mvi a,2h ;1/16 duty, 5x8 font
: sta 3000
: call enable
: mvi a,8h
: sta 3000
: call enable
:
: mvi a,0h ;display off,
: sta 3000
: call enable
: mvi a,8h
: sta 3000
: call enable
:
: mvi a,0h ;cursor, blink on
: sta 3000
: call enable
: mvi a,fh
: sta 3000
: call enable
:
: mvi a,0h ;set entry mode, cursor move right
: sta 3000
: call enable
: mvi a,6h
: sta 3000
: call enable
:
: START:
: mvi a,0h
: sta 3000
: call enable
: mvi a,1h
: sta 3000
: call enable
:
: LDA 2000 ;READ INPUT PORT
:
: CPI 80h ;X < 80
: cnc lcd_plus
:
: cpi 80h ;X < 80
: cc lcd_minus
:
: CPI 9h ;X < 9
: cc lcd_3
:
: CPI F7h ;X < F7
: cnc lcd_3
:
: CPI 31h ;X < 31
: cc lcd_2
:
: CPI cfh ;X < cf
: cnc lcd_2
:
: CPI 59h ;X < 59
: cc lcd_1
:
: CPI A7h ;X < A7
: cnc lcd_1
:
: CPI 1h ;X < 1
: cc lcd_2
:
: CPI 5h ;X < 5
: cc lcd_1
:
: CPI 9h ;X < 9
: cc lcd_0
:
: CPI Dh ;X < D
: cc lcd_9
:
: CPI 11h ;X < 11
: cc lcd_8
:
: CPI 15h ;X < 15
: cc lcd_7
:
: CPI 19h ;X < 19
: cc lcd_6
:
: CPI 1Dh ;X < 1D
: cc lcd_5
:
: CPI 21h ;X < 21
: cc lcd_4
:
: CPI 25h ;X < 25
: cc lcd_3
:
: CPI 29h ;X < 29
: cc lcd_2
:
: CPI 2Dh ;X < 2D
: cc lcd_1
:
: CPI 31h ;X < 31
: cc lcd_0
:
: CPI 35h ;X < 35
: cc lcd_9
:
: CPI 39h ;X < 39
: cc lcd_8
:
: CPI 3Dh ;X < 3D
: cc lcd_7
:
: CPI 41h ;X < 41
: cc lcd_6
:
: CPI 45h ;X < 45
: cc lcd_5
:
: CPI 49h ;X < 49
: cc lcd_4
:
: CPI 4Dh ;X < 4D
: cc lcd_3
:
: CPI 51h ;X < 51
: cc lcd_2
:
: CPI 55h ;X < 55
: cc lcd_1
:
: CPI 59h ;X < 59
: cc lcd_0
:
: CPI 5Dh ;X < 5D
: cc lcd_9
:
: CPI 61h ;X < 61
: cc lcd_8
:
: CPI 65h ;X < 65
: cc lcd_7
:
: CPI 69h ;X < 69
: cc lcd_6
:
: CPI 6Dh ;X < 6D
: cc lcd_5
:
: CPI 71h ;X < 71
: cc lcd_4
:
: CPI 75h ;X < 75
: cc lcd_3
:
: CPI 79h ;X < 79
: cc lcd_2
:
: CPI 7Dh ;X < 7D
: cc lcd_1
:
: CPI 84h ;X < 84
: cc lcd_0
:
: CPI 88h ;X < 88
: cc lcd_1
:
: CPI 8Ch ;X < 8C
: cc lcd_2
:
: CPI 90h ;X < 90
: cc lcd_3
:
: CPI 94h ;X < 94
: cc lcd_4
:
: CPI 98h ;X < 98
: cc lcd_5
:
: CPI 9Ch ;X < 9C
: cc lcd_6
:
: CPI A0h ;X < A0
: cc lcd_7
:
: CPI A4h ;X < A4
: cc lcd_8
:
: CPI A8h ;X < A8
: cc lcd_9
:
: CPI ACh ;X < AC
: cc lcd_0
:
: CPI B0h ;X < B0
: cc lcd_1
:
: CPI B4h ;X < B4
: cc lcd_2
:
: CPI B8h ;X < B8
: cc lcd_3
:
: CPI BCh ;X < BC
: cc lcd_4
:
: CPI C0h ;X < C0
: cc lcd_5
:
: CPI C4h ;X < C4
: cc lcd_6
:
: CPI C8h ;X < C8
: cc lcd_7
:
: CPI CCh ;X < CC
: cc lcd_8
:
: CPI D0h ;X < D0
: cc lcd_9
:
: CPI D4h ;X < D4
: cc lcd_0
:
: CPI D8h ;X < D8
: cc lcd_1
:
: CPI DCh ;X < DC
: cc lcd_2
:
: CPI E0h ;X < E0
: cc lcd_3
:
: CPI E4h ;X < E4
: cc lcd_4
:
: CPI E8h ;X < E8
: cc lcd_5
:
: CPI ECh ;X < EC
: cc lcd_6
:
: CPI F0h ;X < F0
: cc lcd_7
:
: CPI F4h ;X < F4
: cc lcd_8
:
: CPI F8h ;X < F8
: cc lcd_9
:
: CPI FCh ;X < FC
: cc lcd_0
:
: CPI FFh ;X < FF
: cc lcd_1
:
: cpi ffh
: cz lcd_2
:
: jmp START
:
: HLT
:
: lcd_plus:
: push psw
: mvi a,12h
: sta 3000
: call enable
: mvi a,1bh
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_minus:
: push psw
: mvi a,12h
: sta 3000
: call enable
: mvi a,1dh
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_0:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,10h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_1:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,11h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_2:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,12h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_3:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,13h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_4:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,14h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_5:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,15h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_6:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,16h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_7:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,17h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_8:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,18h
: sta 3000
: call enable
: pop psw
: ret
:
: lcd_9:
: push psw
: mvi a,13h
: sta 3000
: call enable
: mvi a,19h
: sta 3000
: call enable
: pop psw
: ret
:
:
: enable:
: push psw
: push d
: mvi d,20h
: add d ;enable goes high
: sta 3000
: call delay
: mvi d,20h ;enable goes low
: sub d
: sta 3000
: pop d
: pop psw
: ret
:
: delay:
: push psw
: push b
: mvi b,03h
: mvi c,c0h
: dcr c
: jnz 2e5h
: dcr b
: jnz 2e3h
: pop b
: pop psw
: ret
:
: