主要采用程序主周期固定就解决,如下面的是2ms为主周期的(每条指令执行时间是0.5us,则2ms就可以完成4000条指令,足以对付一般产品),扫描10次(即2ms*10=20ms)都是低电平,则判为按键按下.我的所有子程序是没有delay的,否则实时性不强.
main:
mov
a,t_125us
sub
a,8
snz
c
;到了2mS吗
jmp
main
;没到,则跳到main
main1:
clr
t_125us
;到了,则清t_125us变量
snz
halt_b
;halt_b 等于1则进入睡眠状态
jmp
$+2
;为0则正常执行指令
jmp
sleep_man
;睡眠管理
clr
wdt
;喂狗
call
key_scan_man
;按键扫描管理
call
display
;直接显示数码管内容
call
test_sleep_man
;测试是否符合进入睡眠条件
call
open_inspection_man
;开门行程开关检测管理
call
voltage_chk
;电池电压检测管理
call
time_man
;时间管理
call
motor_man
;电磁铁驱动管理(开门)
call
buz_work
;蜂鸣器管理
call
baojing_man
;报警输出管理
call
HM_inspect_man
;换码开关管理
call
key_deal_man
;按键处理管理
call
disp_man
;显示管理
call
led_zhaoming_man
led灯照明灯管理
jmp
main
|