打印

怎么进行双MCU通信比较可靠?

[复制链接]
2046|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hopewise|  楼主 | 2011-7-26 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一直在想,怎么进行双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

相关帖子

沙发
hopewise|  楼主 | 2011-7-26 20:27 | 只看该作者
sorry,重发一下部分内容如下:


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*5=20ms?



snz
z



ret
;
没到,则返回



set

sw_key4_b

;
连续按下5, 判为按键有效,置标志位                          


ret

使用特权

评论回复
板凳
hopewise|  楼主 | 2011-7-26 20:39 | 只看该作者
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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

468

帖子

3

粉丝