📄 lu.asm
字号:
Title induction cooker controller
;OSC:16.000MHz
chip SN8P1706
//{{SONIX_CODE_OPTION
.Code_Option OSG Enable
.Code_Option High_Clk 12M_X'tal
.Code_Option High_Clk/2 Disable
.Code_Option Security Enable
.Code_Option LVD Enable
.Code_Option Watch_Dog Enable
//}}SONIX_CODE_OPTION
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
InitPort macro
mov a,#01110000b ;p4.7,p4.3 as A/D input
b0mov P4M,a
mov a,#00111111b
b0mov P5M,a
mov a,#0xff
b0mov P2M,a
mov a,#11000000b
b0mov P1M,a
@set_pur 0x23
clr P1
clr P2
clr P4
clr P5
mov a,#0x44
b0mov TC1M,a
mov a,#225 ;225
b0mov TC1R,a
b0bset FTC1OUT ;buzzer on
b0bset FTC1ENB
mov a,#11110101b ;1:16 16uS
b0mov TC0M,a
mov a,#0xff
b0mov TC0R,a
mov a,#11110000b ;1:2 1uS
b0mov T0M,a
mov a,#00010000b
b0mov INTEN,a
clr INTRQ
endm
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;*****************************
;clear ram (00h-->7fh)
;*****************************
ClearRam macro
clr Y
b0mov Z,#0x7f
Clear_Ram01:
clr @YZ
decms Z
jmp Clear_Ram01
endm
;\\\\\\\\\\\\\\\\\\\\\\
BuzzerActive macro
b0bts1 BuzzerEnable
jmp BuzzerStop
b0mov a,BuzNumber
b0bts0 FZ
jmp BuzzerStop
b0bts1 BuzzerShort
jmp BuzNormal01
mov a,#50
jmp BuzNormal02
BuzNormal01:
mov a,#100
BuzNormal02:
sub a,TimerBuz
b0bts0 FC
jmp BuzzerRet
;else buzzer time over
BuzzerTimeOver:
clr TimerBuz
b0bts1 BuzzerIsOn
jmp BuzzerTimeOver01
b0bclr BuzzerIsOn ;buzzer on
b0bset BUZZER
jmp BuzzerTimeOver02
BuzzerTimeOver01:
b0bclr BUZZER ;buzzer off
b0bset BuzzerIsOn
BuzzerTimeOver02:
b0bts0 BuzzerIsOn
jmp BuzzerRet
decms BuzNumber
jmp BuzzerRet
BuzzerStop:
b0bclr BuzzerEnable
b0bclr BuzzerIsOn
BuzzerRet:
endm
;*****************************
include define.asm
.CODE
org 0x00
jmp Reset
org 0x08
jmp Interrupt
org 0x10
;*******************
Multiplication:
; b0mov a,CurrentL
b0mov a,VoltageL
mul a,VoltageL
b0mov ELO,a
b0mov a,R
b0mov ALO,a
; b0mov a,CurrentH
b0mov a,VoltageH
mul a,VoltageL
add a,ALO
b0mov EHI,a
b0mov a,R
b0mov DLO,a
b0bts0 FC
incms DLO
nop
clr DHI
; b0mov a,CurrentL
b0mov a,VoltageL
mul a,VoltageH
b0mov CLO,a
b0mov a,R
b0mov ALO,a
; b0mov a,CurrentH
b0mov a,VoltageH
mul a,VoltageH
add a,ALO
b0mov CHI,a
b0mov a,R
b0mov BLO,a
b0bts0 FC
incms BLO
nop
b0bclr FC
b0mov a,CLO
adc EHI,a
b0mov a,CHI
adc DLO,a
b0mov a,BLO
adc DHI,a
b0mov a,ELO
mul a,CurrentH
b0mov CLO,a
b0mov a,R
b0mov ALO,a
b0mov a,EHI
mul a,CurrentH
add a,ALO
b0mov CHI,a
b0mov a,R
b0mov ALO,a
b0mov a,DLO
mul a,CurrentH
add a,ALO
b0mov BLO,a
b0mov a,R
b0mov BHI,a
b0mov a,ELO
mul a,CurrentL
b0mov ELO,a
b0mov a,R
b0mov ALO,a
b0mov a,EHI
mul a,CurrentL
add a,ALO
b0mov EHI,a
b0mov a,R
b0mov ALO,a
b0mov a,DLO
mul a,CurrentL
add a,ALO
b0mov DLO,a
b0mov a,R
b0mov DHI,a
b0bclr FC
b0mov a,CLO
adc EHI,a
b0mov a,CHI
adc DLO,a
b0mov a,BLO
adc DHI,a
b0bts0 FC
incms BHI
nop
ret
;;;;;====================================
Mpy16: ;;;INPUT (BY MULTIPLIER)AHI,ALO;(MULTIPLIER)BHI,BLO
;;;OUT DHI,DLO,EHI,ELO
;;;======================================
mov a,#10h
b0mov counter,a
clr DHI
clr DLO
b0bclr FC
;;;;;
Mpyloop:
rrcm BHI
rrcm BLO
b0bts1 FC
jmp Notadd
;;;;
mov a,ALO
add DLO,a
b0bts0 FC
incms DHI
nop
mov a,AHI
add DHI,a
;;;;
Notadd:
rrcm DHI
rrcm DLO
rrcm EHI
rrcm ELO
decms counter
jmp Mpyloop
ret
;;==========================================
Div32: ;;;INPUT :(DIVID)AHI,ALO;(BY DIVID)DHI,DLO,EHI,ELO
;;;OUTPUT :(RESULT)BHI,BLO;(REST)CHI,CLO
;;==========================================
mov a,#20h
b0mov counter,a
clr BHI
clr BLO
clr CHI
clr CLO
;;;;;;;;;;;
Divloop:
b0bclr FC
rlcm ELO
rlcm EHI
rlcm DLO
rlcm DHI
rlcm CLO
rlcm CHI
b0mov a,CHI
sub a,AHI
b0bts1 FZ
jmp Nochk
b0mov a,CLO
sub a,ALO
b0bts1 FC
jmp Nogo
jmp Nochk01
Nochk:
b0bts1 FC
jmp Nogo
b0mov a,CLO
sub a,ALO
b0bts1 FC
decms CHI
nop
Nochk01:
b0mov a,CLO
sub a,ALO
b0mov CLO,a
b0mov a,CHI
sub a,AHI
b0mov CHI,a
b0bset FC
Nogo:
rlcm BLO
rlcm BHI
decms counter
jmp Divloop
ret
;*********
;***************************
CalculatePower:
; CLR AHI
; mov a,#0xdc
; b0mov ALO,a ;220V
; b0mov a,CurrentL
; b0mov BLO,a
; b0mov a,CurrentH
; b0mov BHI,a
; call Mpy16
b0mov a,CurrentH
sub a,#3
b0bts1 FC
; jmp $+5
; b0mov a,CurrentL
; sub a,#0xf0
; b0bts1 FC
jmp CalculatePowerError
clr errorcounter1
b0bclr CurrentError
call Multiplication
b0mov a,BHI
b0bts1 FZ
jmp DecTime
b0mov a,DHI
sub a,PowerBufferHH
b0bts1 FZ
jmp NotAdj
b0mov a,DLO
sub a,PowerBufferH
b0bts1 FZ
jmp NotAdj
AdjMiddle:
b0mov a,EHI
sub a,PowerBufferM
b0bts1 FZ
jmp NotAdj
AdjLow:
b0mov a,ELO
sub a,PowerBufferL
NotAdj:
b0bts1 FC
jmp IncTime
DecTime:
b0mov a,TimerDrvH
sub a,#0x30
b0bts1 FC
ret
decms TimerDrvH
nop
ret
IncTime:
b0mov a,TimerDrvH
sub a,#0xf0
b0bts0 FC
ret
incms TimerDrvH
nop
ret
CalculatePowerError:
b0mov a,errorcounter1
sub a,#250
b0bts0 FC
jmp $+3
incms errorcounter1
ret
b0bset CurrentError
ret
;****************************
BuzShort_10:
b0bset BuzzerShort
mov a,#10
jmp BuzActive
BuzLong_5:
b0bclr BuzzerShort
mov a,#5
jmp BuzActive
BuzShort_3:
mov a,#3
jmp $+2
BuzShort_1:
mov a,#1
b0bset BuzzerShort
BuzActive:
b0mov BuzNumber,a
b0bset BuzzerIsOn
clr TimerBuz
b0bclr BUZZER
b0bset BuzzerEnable
ret
;****************************
;Test temperature subroutine
;****************************
TestTemperature:
; b0bclr TestTemperatureEnable
b0bclr FADLEN
mov a,#0x93
b0mov ADM,a
mov a,#0x20
b0mov ADR,a
b0bset FADS
b0bts1 FEOC
jmp $-1
b0mov a,ADB
b0mov resultH,a
b0mov a,ADR
and a,#00001111b
b0mov resultL,a
swap resultH
and a,#11110000b
or resultL,a
swapm resultH
mov a,#00001111b
and resultH,a
b0mov a,resultH
b0bts1 FZ
jmp $+5
b0mov a,resultL
sub a,#0x10
b0bts1 FC
jmp TestTemperature01
b0mov a,resultH
sub a,#0x0f
b0bts0 FC
jmp TestTemperature01
clr errorcounter
b0bclr TempError
ret
TestTemperature01:
b0mov a,errorcounter
sub a,#5
b0bts0 FC
jmp $+3
incms errorcounter
ret
b0bset TempError
ret
;****************************
;Test current subroutine
;****************************
TestCurrent:
b0bclr FADLEN
mov a,#0x97
b0mov ADM,a
mov a,#0x20
b0mov ADR,a
b0bset FADS
b0bts1 FEOC
jmp $-1
b0mov a,ADB
b0mov CurrentH,a
b0mov a,ADR
and a,#00001111b
b0mov CurrentL,a
swap CurrentH
and a,#11110000b
or CurrentL,a
swapm CurrentH
mov a,#00001111b
and CurrentH,a
ret
;****************************
;Test voltage subroutine
;****************************
TestVoltage:
b0bclr FADLEN
mov a,#0x91
b0mov ADM,a
mov a,#0x20
b0mov ADR,a
b0bset FADS
b0bts1 FEOC
jmp $-1
b0mov a,ADB
b0mov VoltageH,a
b0mov a,ADR
and a,#00001111b
b0mov VoltageL,a
swap VoltageH
and a,#11110000b
or VoltageL,a
swapm VoltageH
mov a,#00001111b
and VoltageH,a
ret
;*********************
SystemTimerEnd:
b0bclr F4mS
incms TimerBuz
nop
incms Timer
nop
b0bclr Flash
b0mov a,Timer
sub a,#125
b0bts1 FC
jmp SystemTimerEnd01
b0bset Flash
b0mov a,Timer
sub a,#250
b0bts1 FC
jmp SystemTimerEnd01
clr Timer
b0bts1 FanActive
jmp $+5
decms FanTime
jmp $+3
b0bclr FanActive
b0bclr Fan
b0bts1 Timering
jmp SystemTimerEnd01
incms Second
nop
b0mov a,Second
sub a,#60
b0bts1 FC
jmp SystemTimerEnd01
clr Second
decms Minute
nop
SystemTimerEnd01:
incms TestTemperatureTime
nop
b0mov a,TestTemperatureTime
sub a,#125
b0bts1 FC
jmp $+3
clr TestTemperatureTime
b0bset TestTemperatureEnable
incms TestCurrentTime
nop
mov a,TestCurrentTime
sub a,#10
b0bts1 FC
jmp $+3
clr TestCurrentTime
b0bset TestCurrentEnable
incms KeyScanTime
nop
mov a,KeyScanTime
sub a,#10
b0bts1 FC
jmp $+3
clr KeyScanTime
b0bset KeyScanEnable
DisplayScan:
clr P2
call TimeDisplay
incms commbuffer
nop
b0mov a,commbuffer
sub a,#0x05
b0bts1 FC
jmp DisplayScan01
clr commbuffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -