📄 main02.asm
字号:
ldhx keyDown
sthx keyTemp
mov keyDown+2,keyTemp+2
jsr keypadSub
ldhx keyTemp ; subroutine
sthx keyDown
mov keyTemp+2,keyDown+2
bra keyLP02
keyLP020
clr keyDown
clr keyDown+1
clr keyDown+2
keyLP02:
brset 3,PORTA,keyLP030
; ---------------------
ldhx keyLamp
sthx keyTemp
mov keyLamp+2,keyTemp+2
jsr keypadSub
ldhx keyTemp ; subroutine
sthx keyLamp
mov keyTemp+2,keyLamp+2
rts
keyLP030
clr keyLamp
clr keyLamp+1
clr keyLamp+2
rts
; --------no any keys----------
nokeyLP00:
lda #$0c
ldhx #keySet
nokeyLP10
clr ,x
incx
dbnza nokeyLP10
ldhx #$bb8
cphx nokeyCounter
blo nokeyLP01 ; 60S
inc nokeyCounter+1
lda nokeyCounter+1
beq nokeyLP02
rts
nokeyLP02:
inc nokeyCounter
rts
nokeyLP01:
bset 0,keyFlag ; no any key 60S flag
rts
; -------------------------------------
; input: none
; output: 5S,1S,excute flag
; -------------------------------------
keypadSub
jsr key5S
brset 4,keyTemp,keyLP50 ; 2S flag
brset 3,keyTemp,keyLP20 ; 1S flag
brset 0,keyTemp,keyLP21 ; confirm flag
bset 0,keyTemp
rts
keyLP50:
dbnz keyTemp+1,keyRts
mov #$05,keyTemp+1
bset 1,keyTemp
rts
keyLP20:
dbnz keyTemp+1,keyRts
mov #$10,keyTemp+1
bset 1,keyTemp
rts
keyLP21:
brset 2,keyTemp,keyRts
bset 1,keyTemp
bset 2,keyTemp
rts
; -----------------
key5S:
brset 5,keyTemp,keyRts
lda #$20
cmp keyTemp+2
beq keyLP32
lda #$80
cmp keyTemp+2
beq keyLP33
lda #$fa
cmp keyTemp+2
blo keyLP31
inc keyTemp+2
keyRts
rts
keyLP31
bset 5,keyTemp ; 5S flag
rts
keyLP32
bset 3,keyTemp ; 1S flag
mov #$11,keyTemp+1
inc keyTemp+2
rts
keyLP33
bset 4,keyTemp ; 2S flag
mov #$06,keyTemp+1
inc keyTemp+2
rts
; -------------------------------------
; level seting
; -------------------------------------
levoutSet
brset 1,levelFlag,levelFirst ; first level
brset 0,levelFlag,levelLP00 ; out level
brclr 3,keySet,levelRts ; key "SET" 1S flag
brset 7,keySet,levelRts ; key invalid
inc levelFlag
bset 7,keySet
mov settemp,settempBak ; --
levelRts
rts
exitLevout
clr levelFlag
rts
levelLP00
brset 0,keyFlag,exitLevout ; no any key 60S flag
jsr levoutSetting
jsr levoutDisplay
rts
levoutSetting
brset 1,keySet,levelLP01
brset 1,keyUp,levelLP02
brset 1,keyDown,levelLP03
rts
levelLP01
brset 7,keySet,levelLP04 ; key invalid
bclr 0,levelFlag
bset 7,keySet
bset 6,eepFlag ; save settempBak
mov settempBak,settemp ; confirm the new value
rts
levelLP02
bclr 1,keyUp
inc settempBak
rts
levelLP03
bclr 1,keyDown
dec settempBak
rts
levelLP04
brclr 5,keySet,levelRts
; ----------------------------------
inc levelFlag ; enter the first level
clr parameterNum
clr settingMode
; ----------------------------------
rts
levoutDisplay
ldhx #$0a
lda settempBak
div
psha
pshh
pula
sta dispBuf0
pula
clrh
div
sta dispBuf2
pshh
pula
sta dispBuf1
rts
; -------------------------------------
; first level setting
; -------------------------------------
levelFirst
jsr levelFirSet
jsr levelFirDis
rts
; -----------------------------
; level first setting subrountine
; -----------------------------
levelFirSet
brset 7,keySet,levRts
brset 0,keyFlag,levelFirexit ; no any key for more than 60S
brset 5,keySet,levFirExitSave ; set key for 5S,exit
jsr parasetting
levRts
rts
levFirExitSave
bset 7,eepFlag ; save parameter flag
clr levelFlag
ldhx #sc
levFirLP00
lda $14,x ; copy scBak~spaBak to sc~spa
sta ,x ; 0x14
incx
cpx #spa
bls levFirLP00
rts
levelFirexit
clr levelFlag
rts
; -----------------------------
; set key dispose
; settingMode=0 parameter setting
; settingMode=1 value setting
; -----------------------------
levFirSubSet
brclr 1,keySet,levFirRts
inc settingMode
levFirRts
rts
; -----------------------------
; parameter and value setting
; -----------------------------
parasetting
brset 1,keySet,levFirSubSet
brset 0,settingMode,valueSetting
; -----------------------------
; parameter order setting
; -----------------------------
parameterSetting
brset 1,keyUp,upLP00
brset 1,keyDown,downLP00
rts
upLP00
inc parameterNum
lda #$12
cmp parameterNum
bhi upLP00Rts
clr parameterNum
upLP00Rts
rts
downLP00
dec parameterNum
brclr 7,parameterNum,upLP00Rts
mov #$12,parameterNum
rts
; -----------------------------
; parameter value setting(parameterNum=1)
; -----------------------------
valueSetting
clrh
lda parameterNum
lsla
add parameterNum
tax
jmp offsetTable,x
offsetTable
jmp setsc
jmp sets5
jmp setsrd
jmp setsr1
jmp setsr2
jmp setsc0
jmp setsc1
jmp setsc2
jmp setsc3
jmp setsc4
jmp setsc5
jmp setsdl
jmp setsdt
jmp setsdp
jmp setsdd
jmp setsds
jmp setsal
jmp setsah
jmp setspa
rts
setsc
rts
sets5
rts
setsrd
rts
setsr1
rts
setsr2
rts
setsc0
rts
setsc1
rts
setsc2
rts
setsc3
rts
setsc4
rts
setsc5
rts
setsdl
rts
setsdt
rts
setsdp
rts
setsdd
rts
setsds
rts
setsal
rts
setsah
rts
setspa
rts
; -----------------------------
; -----------------------------
levelFirDis
rts
; -------------------------------------
; 74LS164 shift
; -------------------------------------
shifter:
ldx #$08
shifterLP02
rola
bclr CLK,PORTB
bset DAT,PORTB
bcc shifterLP01
shifterLP03
bset CLK,PORTB
dbnzx shifterLP02
rts
shifterLP01
bclr DAT,PORTB
bra shifterLP03
; -------------------------------------
; LED display segment table
; -------------------------------------
convert:
fcb %11000000,%11001111,%10100100,%10000110,%10001011
fcb %10010010,%10010000,%11000111,%10000000,%10000010 ; 0~9
fcb %10000001,%10011000,%10111100,%10001100,%10110000 ; a~e
fcb %10110001,%11111000,%10001001,%10100001,%10111101 ; F 10,L 11,H 12,P 13,r 14
fcb %10101101,%10111111,$ff,$ff,$ff ; / 15,- 16,
; --------------------------------------
; TIM overflow vector
; --------------------------------------
dispHandler:
pshh
clrh
bclr 7,T2SC
tst counterDisp
beq dispCom0
lda #$1
cmp counterDisp
beq dispCom1
lda #$2
cmp counterDisp
beq dispCom2
clr counterDisp
exitLP00:
pulh
rti
dispCom0:
bclr 7,PORTD
ldx dispBuf0
lda convert,x
jsr shifter
;sta PORTB
bset 5,PORTD
inc counterDisp
bra exitLP00
dispCom1:
bclr 5,PORTD
ldx dispBuf1
lda convert,x
jsr shifter
;sta PORTB
bset 6,PORTD
inc counterDisp
bra exitLP00
dispCom2:
bclr 6,PORTD
ldx dispBuf2
lda convert,x
jsr shifter
;sta PORTB
bset 7,PORTD
clr counterDisp
inc flag
bra exitLP00
; -----------------------------------
; TIM1 channel 0 input capture interrupt
; -----------------------------------
sampleEnd
bclr 7,T1SC0
brset 6,sampleFlag,exitSampleLP00
clr sampleCounter
brclr 0,sampleFlag,sampleEndLP00 ; sampleFlag.0=0,res charge
bclr 0,sampleFlag ; sample shift
bset 1,sampleFlag ; sample end
mov T1CH0H,TMRES
mov T1CH0L,TMRES+1 ; fix res
bset 6,sampleFlag
exitSampleLP00:
rti
sampleEndLP00:
inc sampleFlag
mov T1CH0H,TMSTR
mov T1CH0L,TMSTR+1 ; thermister
bset 6,sampleFlag
rti
; -----------------------------------
; TIM1 overflow
; -----------------------------------
sampleErr:
bclr 7,T1SC
bclr 0,sampleFlag
clr sampleCounter
bset 7,sampleFlag
mov #$01,errCode ; TIM overflow err
rti
; -----------------------------------
; interrupt vector
; -----------------------------------
org $FFD0
fcb $ff
org $FFEC
fdb dispHandler ; TIM2 overflow interept vector
fdb dummyVector ; TIM2 channel 1
fdb dummyVector ; TIM2 channel 0
fdb sampleErr ; TIM1 overflow
fdb dummyVector ; TIM1 channel 1
fdb sampleEnd ; TIM1 channel 0
; org $FFFE
fdb main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -