我一直在想,怎么进行双MCU通信比较可靠? 我的主程序结构是这样的:
变量t_125us每隔125us就加一。因为主周期是固定不变的,故main1下面的子程序是不会有延时的.如按键扫描子程序:
我一直在想,这2个MCU都带i2c功能的,用外中断来处理,但有个问题:因为为了方便蜂鸣器频率(2KHZ或4khz),故定时器中断是125us或250us.如果在外中断接收信息,有可能瘫痪系统,如在外中断里接收对方MCU发来的内容达1ms,肯定不行.因为1ms/125us=80次了.
故请高手给出个好办法.
key_scan:
mov
a,keydwn_t
sub
a,251
snz
c
inc
keydwn_t
;按键扫描计数:1~251
nop
nop
snz
key4
;按下了启动键了吗?
jmp
scan_key4
;有,则跳到scan_key4处进行扫描判断
snz
inc_key
;按下了加一键了吗?
jmp
scan_inc
;有,则跳到scan_inc处进行扫描判断
clr
keydwn_t
;都没有的话,则清相关标志量
clr
sw_bz1
ret
;--------------------------------------------------------- 启动键按键扫描--------------------------------------
scan_key4:
mov
a,keydwn_t
sub
a,5
;4ms*8=40ms?
snz
z
ret
;没到,则返回
set
sw_key4_b
连续按下5次, 判为按键有效,置标志位
ret
;***************************************
;******************主程序区*************
main:
snz t_125us.6 ;到了8mS吗?
jmp main ;没到,则跳到main
main1:
clr t_125us ;到了,则清t_125us变量
snz halt_b ;halt_b 等于1则进入睡眠状态
jmp $+2 ;为0则正常执行指令
jmp sleep_man ;睡眠管理
clr wdt
call test_come_in_sleep_man ;判断符合进入睡眠条件
call key_scan ;按键扫描
call key_deal ;按键处理
call lock_man ;电子锁驱动设置
call buz_work ;蜂鸣器管理
call time_man ;时间管理
call voltage_chk ;电池电压检测管理
call HM_inspect_man ;换码开关管理
call open_inspection_man ;马达开行程开关检测管理
call close_inspection_man ;马达关行程开关检测管理
call auto_man ;自动关门管理
call led_zhaoming_man ;led灯照明灯管理
call baojing_man ;报警管理
call yellow_led_flash ;黄色指示灯管理
jmp main |