📄 hearter.dt
字号:
ret
meo_key_control:
bc key_flag,3 ;clr key ok flag 标志位完成任务后需清0
jbc mode_flag0,0 ;main on/off flag 执行下一步需检查电源开关键状态
ret
;将按的次数进行计数,按一次加1
inc main_mode ;进入菜单键后进行档位控制
mov a,main_mode
sub a,@0x05 ;让档位寄存器计数不超过5,因为一共是5档来决定
jbs r3,2 ;Z flag
jmp meo_key_control_0 ;不相等则跳到下一个子程序去判断
mov a,@0x00
mov main_mode,a ;通过赋初值让档位在5档之间循环
ret
meo_key_control_0: ;档位判断子程序
mov a,main_mode
sub a,@0x01 ;注意:0x01对应第二档
jbc r3,2 ;与第二档数值进行判断
jmp meo_key_control_1
mov a,main_mode
sub a,@0x02 ;注意:0x02对应第三档
jbc r3,2 ;与第三档数值进行判断
jmp meo_key_control_2
mov a,main_mode
sub a,@0x03 ;注意:0x03对应第四档
jbc r3,2 ;与第四档数值进行判断
jmp meo_key_control_3
mov a,main_mode
sub a,@0x04 ;注意:0x04对应第五档
jbc r3,2 ;与第五档数值进行判断
jmp meo_key_control_4
ret
meo_key_control_1:
bc r6,5
bc mode_flag0,1 ;duty on/off flag
mov a,@10 ;NB ;作为第二档定时10秒的设置
mov duty_cnt,a ;作为第二档定时10秒的设置 开始值
ret ;每一个子程序的返回都是回到主程序中去
meo_key_control_2:
bc r6,5
bc mode_flag0,1 ;duty on/off flag 标志位代表这种状态的实现
mov a,@20 ;第三档以先停20秒r6,5口输出高电平为起点
mov duty_cnt,a ;直接赋值将时间控制寄存器内的内容覆盖
ret
meo_key_control_3:
bc r6,5
bc mode_flag0,1 ;duty on/off flag
mov a,@20
mov duty_cnt,a
ret
meo_key_control_4:
bc r6,5
bc mode_flag0,1 ;duty on/off flag
mov a,@20
mov duty_cnt,a
ret
;*****************************************************************************************
heat_control: ;
wdtc
jbc mode_flag0,0 ;用于判断输出与否标志,由上可知,键按下后此标志位为0
jmp power_off_ctr ;
mov a,main_mode ;我认为这里不用再进行比较了,因为前面已经判断出了,
sub a,@0x00 ;可以用标志位来确定,这样可以减少指令条数.
jbc r3,2 ;状态寄存器第2位零标志位Z:算术或逻辑操作结果为零时置为1
jmp heat_meo1_ctr ;第一档
mov a,main_mode ;我认为这里不用再进行比较了,因为前面已经判断出了,
sub a,@0x01 ;可以用标志位来确定,这样可以减少指令条数.
jbc r3,2 ;与第二档进行判断
jmp heat_meo2_ctr ;第二档
mov a,main_mode ;我认为这里不用再进行比较了,因为前面已经判断出了,
sub a,@0x02 ;可以用标志位来确定,这样可以减少指令条数.
jbc r3,2 ;与第三档进行判断
jmp heat_meo3_ctr ;第三档
mov a,main_mode ;我认为这里不用再进行比较了,因为前面已经判断出了,
sub a,@0x03 ;可以用标志位来确定,这样可以减少指令条数.
jbc r3,2 ;与第四档进行判断
jmp heat_meo4_ctr ;第四档
mov a,main_mode ;我认为这里不用再进行比较了,因为前面已经判断出了,
sub a,@0x04 ;可以用标志位来确定,这样可以减少指令条数.
jbc r3,2 ;与第五档进行判断
jmp heat_meo5_ctr ;第五档
ret
power_off_ctr: ;接上电后不输出信号程序
bc r6,5
bc r5,0 ;on led
bc r5,1
bc r5,2
bc r5,3
bc r6,1
ret
heat_meo1_ctr: ;第一档执行程序
bs r6,5 ;P6.5口输出高电平
bs r5,0 ;on led LED5灯亮 即P5.0口输出高电平
bc r5,1
bc r5,2
bc r5,3
bc r6,1
ret
heat_meo2_ctr: ;第二档执行程序
bc r5,0 ;on led
bs r5,1 ;LED4灯亮 即P5.1口输出高电平
bc r5,2
bc r5,3
bc r6,1
jbs mode_flag0,1 ;duty on/off flag
jmp heat_meo2_ctr_0
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt
ret
bc r6,5 ;on/off control pin 禁止P6.5口输出高电平
mov a,@10 ;数值用完后需重新赋初值
mov duty_cnt,a ;时间控制寄存器用来存储所要定时的时间
bc mode_flag0,1 ;作为10秒输出子程序的判断位
ret
heat_meo2_ctr_0: ;第二档控制程序
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt ;进入第二档时已经设置10秒初值,P6.5口先停止输出
ret
bs r6,5 ;on/off control pin P6.5口输出高电平
mov a,@10 ;数值用完后需重新赋初值
mov duty_cnt,a ;时间控制寄存器用来存储所要定时的时间常数
bs mode_flag0,1 ;作为停10秒输出子程序的判断位
ret
heat_meo3_ctr: ;第三档执行程序
bc r5,0 ;on led
bc r5,1
bs r5,2 ;LED3灯亮 即P5.2口输出高电平
bc r5,3
bc r6,1
jbs mode_flag0,1 ;duty on/off flag
jmp heat_meo3_ctr_0
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt
ret
bc r6,5 ;on/off control pin 禁止P6.5口输出高电平
mov a,@20
mov duty_cnt,a
bc mode_flag0,1
ret
heat_meo3_ctr_0: ;第三档控制程序
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt ;第三档开始时先禁止r6,5输出高电平
ret
bs r6,5 ;on/off control pin P6.5口输出高电平
mov a,@05 ;开始定时5秒输出高电平
mov duty_cnt,a
bs mode_flag0,1 ;高电平输出状态的标志位
ret
heat_meo4_ctr: ;第四档执行程序
bc r5,0 ;on led
bc r5,1
bc r5,2
bs r5,3 ;LED2灯亮 即P5.3口输出高电平
bc r6,1
jbs mode_flag0,1 ;duty on/off flag
jmp heat_meo4_ctr_0
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt
ret
bc r6,5 ;on/off control pin 禁止P6.5口输出高电平
mov a,@20
mov duty_cnt,a
bc mode_flag0,1
ret
heat_meo4_ctr_0: ;第四档控制程序
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt
ret
bs r6,5 ;on/off control pin P6.5口输出高电平
mov a,@03
mov duty_cnt,a
bs mode_flag0,1
ret
heat_meo5_ctr: ;第五档执行程序
bc r5,0 ;on led
bc r5,1
bc r5,2
bc r5,3
bs r6,1 ;LED1灯亮 即P6.1口输出高电平
jbs mode_flag0,1 ;duty on/off flag
jmp heat_meo5_ctr_0
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt
ret
bc r6,5 ;on/off control pin 禁止P6.5口输出高电平
mov a,@20
mov duty_cnt,a
bc mode_flag0,1
ret
heat_meo5_ctr_0: ;第五档控制程序
jbs timer,0 ;timer 1s flag
ret
bc timer,0
djz duty_cnt
ret
bs r6,5 ;on/off control pin P6.5口输出高电平
mov a,@01
mov duty_cnt,a
bs mode_flag0,1
ret
;*****************************************************************************************
key_delay: ;判别抖动所用的时间程序
mov a,@0x50
mov del,a
djz del
jmp $-1
ret
;*****************************************************************************************
end ;结束标志
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -