📄 cooker.dt
字号:
;========================================================================================
; product : 电炒锅
; filename : cooker.dt
; chip type : emc78p153s
; Fosc type : internal RC
; Fosc : 4MHZ
; CLOCK : Fcpu = Fosc/4
; reset pin : disable
; watchdog : disable
; check_sum : 0x0000
;========================================================================================
; define system register
;========================================================================================
iaddr equ 0x00 ;indirect addressing register
tcc equ 0x01 ;timer clock/counter
pc equ 0x02 ;program counter
psw equ 0x03 ;program status register
ram equ 0x04 ;RAM select register
p5 equ 0x05 ;port5 register
p6 equ 0x06 ;port6 register
intsr equ 0x0f ;interrupt status register
p5m equ 0x05 ;port5 control register
p6m equ 0x06 ;port6 control register
pdown equ 0x0b ;port pull down control register
pod equ 0x0c ;port open drain control register
pup equ 0x0d ;port pull high control register
wdtcr equ 0x0e ;WDT control register
intmr equ 0x0f ;interrupt mask register
;========================================================================================
; define system register flag
;========================================================================================
fc == 0 ;cy flag of status register(psw)
fz == 2 ;zero flag of status register(psw)
fp50 == 0 ;define port5,0
fp51 == 1 ;define port5,1
fp52 == 2 ;define port5,2
fp53 == 3 ;define port5,3
fp60 == 0 ;define port6,0 set 0 and 1
fp61 == 1 ;define port6,1
fp62 == 2 ;define port6,2
fp63 == 3 ;define port6,3
fp64 == 4 ;define port6,4
fp65 == 5 ;define port6,5
fp66 == 6 ;define port6,6
fp67 == 7 ;define port6,7
ftcif == 0 ;define timer interrupt flag of intsr
ficif == 1 ;define port6 status change interrupt flag
fexif == 2 ;define define external interrupt flag
fp50m == 0 ;define port5,0 control bit flag
fp51m == 1 ;define port5,1 control bit flag
fp52m == 2 ;define port5,2 control bit flag
fp53m == 3 ;define port5,3 control bit flag
fp60m == 0 ;define port6,0 control bit flag
fp61m == 1 ;define port6,1 control bit flag
fp62m == 2 ;define port6,2 control bit flag
fp64m == 4 ;define port6,4 control bit flag
fp65m == 5 ;define port6,5 control bit flag
fp66m == 6 ;define port6,6 control bit flag
fp67m == 7 ;define port6,7 control bit flag
fpdown50 == 0 ;port pull down of p50 pin 0 is enable
fpdown51 == 1 ;port pull down of p51 pin 1 is disable
fpdown52 == 2 ;port pull down of p52 pin
fpdown60 == 4 ;port pull down of p60 pin
fpdown61 == 5 ;port pull down of p61 pin
fpdown62 == 6 ;port pull down of p62 pin
fpod60 == 0 ;port open drain of p60 pin 0 is disable
fpod61 == 1 ;port open drain of p61 pin 1 is enable
fpod62 == 2 ;port open drain of p62 pin
fpod64 == 4 ;port open drain of p64 pin
fpod65 == 5 ;port open drain of p65 pin
fpod66 == 6 ;port open drain of p66 pin
fpod67 == 7 ;port open drain of p67 pin
fpup60 == 0 ;port pull up of p60 pin 0 is enable
fpup61 == 1 ;port pull up of p61 pin 1 is disable
fpup62 == 2 ;port pull up of p62 pin
fpup64 == 4 ;port pull up of p64 pin
fpup65 == 5 ;port pull up of p65 pin
fpup66 == 6 ;port pull up of p66 pin
fpup67 == 7 ;port pull up of p67 pin
ftccenb == 0 ;timer interrupt enable flag 0 is disable
ficienb == 1 ;port6 change interrupt enable flag 1 is enable
fexienb == 2 ;external interrupt enable flag
;========================================================================================
; define general bit flag
;========================================================================================
key_flag equ 0x2f ;key scan use flag
power_release_fg == 0 ;power key release flag
power_key_ok_fg == 1 ;power key press ok flag
meo_release_fg == 2 ;meo key release flag
meo_key_ok_fg == 3 ;meo key press ok flag
timer equ 0x2e ;time flag
time_1s_fg == 0 ;time one second flag
time_65ms_fg == 1 ;time 65ms flag
time_1s_fg0 == 2 ;time 1s flag for auto time count
mode_flag0 equ 0x2d ;system mode flag
power_fg == 0 ;power flag : 1 is power off status,0 is power on status
duty_fg == 1 ;indicate the on/off status for meo control,0 is off status,1 is on status
;========================================================================================
; define general register
;========================================================================================
del equ 0x2c ;for delay count
main_mode equ 0x2b ;system mode value
acc_buf equ 0x2a ;for storge acc when interrupt occur
psw_buf equ 0x29 ;for storge psw when interrupt occur
key_cnt0 equ 0x28 ;for validate power key count
key_cnt1 equ 0x27 ;for validate meo key count
duty_cnt equ 0x26 ;meo control time count
time_1s_cnt equ 0x25 ;one second time count
temp0 equ 0x24 ;currency RAM for some temporarily data
temp1 equ 0x23 ;currency RAM for some temporarily data
temp2 equ 0x22 ;currency RAM for some temporarily data
temp3 equ 0x21 ;currency RAM for some temporarily data
auto_time0 equ 0x20
auto_time1 equ 0x1f
;=======================================================================================
; define const value
;=======================================================================================
ram_start_addr == 0x10
ram_end_addr == 0xef
meo1_value == 0x00
meo2_value == 0x01
meo3_value == 0x02
meo4_value == 0x03
meo5_value == 0x04
meo_top_value == 0x05
time_1s_cnt_value == 15
time_40s_value == 40
time_35s_value == 35
time_30s_value == 30
time_20s_value == 20
time_15s_value == 15
time_10s_value == 10
;=======================================================================================
; define i/o port function
;=======================================================================================
meo1_led == 0 ;port50
meo2_led == 1 ;port51
meo3_led == 2 ;port52
meo4_led == 3 ;port53
meo5_led == 1 ;port61
power_pin == 0 ;port60
meo_pin == 7 ;port67
heat_pin == 5 ;port65
;*******************************************************************************
; code
;*******************************************************************************
org 0000h
jmp reset
org 0008h
jmp int_sever
org 0010h
;*******************************************************************************
; reset program
;*******************************************************************************
reset:
wdtc ;clr watch dog
disi ;disable interrupt
mov a,@ram_start_addr
mov ram,a
clr_ram:
wdtc
clr iaddr ;clr all ram
inc ram
mov a,ram
sub a,@ram_end_addr
jbs psw,fz ;check complete clr ram
jmp clr_ram
clr iaddr
init_system:
mov a,@0x00 ;set timer count reg
mov tcc,a
mov a,@00000000B ;init i/o port reg
mov p5,a
mov a,@00000000B ;init i/o port reg
mov p6,a
mov a,@01000111B ;enable interrupt and timer prescal 1:256
contw ;control register
mov a,@00000000B
iow p5m ;set port5 control reg, 0 is output mode 1 is input mode
mov a,@10000001B
iow p6m ;set port5 control reg
mov a,@11111111B
iow pdown ;disable all pull down function
mov a,@00000000B
iow pod ;disable open_drain function
mov a,@00000000B
iow pup ;enable pull up function
mov a,@00000000B
iow wdtcr ;disable watchdog
mov a,@00000001B
iow intmr ;enable tc0 and int interrupt
clr intsr ;clr interrupt status register
eni
wdtc
mov a,@time_1s_cnt_value
mov time_1s_cnt,a
bs mode_flag0,power_fg ;set to power off mode
call control_sp
call control_sp
call control_sp
;************************************************************************************
; main program
;************************************************************************************
main:
call time_control
call key_scan
call auto_off_control
call key_control
call heat_control
call led_display
jmp main
;*****************************************************************************************
; interrupt sever program
;*****************************************************************************************
int_sever:
mov acc_buf,a ;65ms int
mov a,psw ;save psw reg
mov psw_buf,a
jbs intsr,ftcif ;check tc0 int flag
jmp exit_int
time_int:
bc intsr,ftcif ;clr tc0 int flag
bs timer,time_65ms_fg ;time 65ms flag
exit_int:
mov a,psw_buf
mov psw,a
mov a,acc_buf
reti
;****************************************************************************************
;input :time_65ms_fg
;
;output :time_1s_fg
;****************************************************************************************
time_control:
jbs timer,time_65ms_fg
ret
bc timer,time_65ms_fg
djz time_1s_cnt ;time_1s_cnt increase each 65ms
ret
bs timer,time_1s_fg ;set time 1s flag
bs timer,time_1s_fg0 ;set time 1s flag for auto time count
mov a,@time_1s_cnt_value
mov time_1s_cnt,a
ret
;*****************************************************************************************
;input :power_fg, time_1s_fg0
;
;output :power_key_ok_fg
;*****************************************************************************************
auto_off_control:
jbc mode_flag0,power_fg ;main on/off flag
ret
mov a,main_mode
sub a,@meo5_value
jbc psw,fz
ret
jbs timer,time_1s_fg0 ;time 1s flag
ret
bc timer,time_1s_fg0
djz auto_time0
ret
djz auto_time1
ret
bs key_flag,power_key_ok_fg ;power key ok flag
ret
;*****************************************************************************************
;input :key pin
;
;output :power_key_ok_fg, meo_ok_fg
;*****************************************************************************************
key_scan:
wdtc
jbc p6,power_pin ;check power key
jmp key_000
jbc key_flag,power_release_fg ;check power key release flag
ret
call key_delay
jz key_cnt0 ;increase check count
jmp key_meo
bs key_flag,power_release_fg ;set power key release flag
bs key_flag,power_key_ok_fg ;set power key ok flag
ret
key_000:
bc key_flag,power_release_fg ;reset power key release flag
bc key_flag,power_key_ok_fg ;reset power key ok flag
clr key_cnt0 ;reset check power key count
key_meo:
jbc p6,meo_pin ;check meo key
jmp key_001
jbc key_flag,meo_release_fg ;meo key release flag
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -