打印

帮忙看下我这个开机按键怎么不管用啊?

[复制链接]
1954|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mugangzhu|  楼主 | 2009-12-26 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, AI, AN, TI, timer
;主程序
MAIN:                        
               NOP
               NOP                     
               ADI F_TIMER,0001B
               BA0 HALTMODE ;未到5ms, 跳转
               ANDIM F_TIMER,1110B ;清"5ms 到"标志            
               NOP                           
               LDA PORTD,00H
               STA TEMP,00H
               SBI TEMP,0FH;=0,没有按键动作跳走               
               BAZ YS_4                                             
               ADIM TEMP5,01H
               SBI TEMP5,01H;是否是第一次按键按下是的话存起来初次按键值
               BAZ YS_5
               LDA KEY_OLD,00H
               SUB TEMP,00H
               BNZ YS_4
               SBI TEMP5,03H;扫描8次按键未完成继续扫描
               BNZ MAIN
               ANDIM TEMP5,00H
               LDA T0M_1,00H;判断开机标志位
               BA0 YS_8
               LDA TEMP,00H
               BA0 YS_4
AS_1:                                         
               ORIM T0M_1,01H;设置开机标志
               JMP MAIN
YS_8:                                          
               LDA KEY_OLD,00H
               BA1 YS_4
               JMP YS_7                                          
HALTMODE:
                NOP
                HALT
                NOP
                NOP
                JMP MAIN
YS_4:                             
               ANDIM F_TIMER,1110B
               ANDIM TEMP5,00H               
               JMP MAIN               
YS_5:
               LDA TEMP,00H
               STA KEY_OLD,00H                              
               RTNI
YS_7:                                               
              LDI PORTC,0FH
              ADI F_TIMER,0010B
              BA1 YS_7
              ANDIM F_TIMER,1101B
              LDI PORTC,00H
               JMP
   MAIN                                                                                                                                                   
               END
沙发
warm_ice| | 2009-12-28 15:11 | 只看该作者
你自己看一下这个部分:
               SBI TEMP5,01H;是否是第一次按键按下是的话存起来初次按键值
               BAZ YS_5


YS_5:
               LDA TEMP,00H
               STA KEY_OLD,00H                              
               RTNI

自己分析一下就知道原因了.

使用特权

评论回复
板凳
mugangzhu|  楼主 | 2009-12-28 16:29 | 只看该作者
呵呵,谢谢,我已经解决了

使用特权

评论回复
地板
mugangzhu|  楼主 | 2009-12-28 16:34 | 只看该作者
现在的问题是时时监控按键有点问题?我分析了没有找出来,帮忙分析一下
MAIN:                        
               NOP
               NOP                     
               ADI F_TIMER,0001B
               BA0 HALTMODE ;未到5ms, 跳转
               ANDIM F_TIMER,1110B ;清"5ms 到"标志            
               NOP                           
               LDA PORTD,00H
               STA TEMP,00H
               SBI TEMP,0FH;=0,没有按键动作跳走               
               BAZ YS_4                                             
               ADIM TEMP5,01H
               SBI TEMP5,01H;是否是第一次按键按下是的话存起来初次按键值
               BAZ YS_5
AS_2:               
               LDA KEY_OLD,00H
               SUB TEMP,00H
               BNZ YS_4
               SBI TEMP5,03H;扫描8次按键未完成继续扫描
               BNZ MAIN                          
               ANDIM TEMP5,00H
               LDA T0M_1,00H;判断开机标志位
               BA0 YS_8
               LDA TEMP,00H
               BA0 YS_4
AS_1:                                         
               ORIM T0M_1,01H;设置开机标志
               JMP MAIN
YS_8:                        
               ADI  TEMP,01H
               BA0 AS_3                                                            
               LDA TEMP,00H
               BA1 YS_4
               ORIM T0M_1,0010B ;设置有输出按键标志T0M_1位1=1                                                                       
               JMP YS_7                                          
HALTMODE:
                NOP
                HALT
                NOP
                NOP
                JMP MAIN
YS_4:                             
               ANDIM F_TIMER,1110B
               ANDIM TEMP5,00H               
               JMP MAIN               
YS_5:
               LDA TEMP,00H
               STA KEY_OLD,00H                              
               JMP AS_2              
YS_7:         SBI PORTD,00H
              BNZ MAIN  ;时时监控按键状态                                                                  
              LDI PORTC,0FH
              ADI F_TIMER,0010B
              BA1 YS_7
              ANDIM F_TIMER,1101B
              LDI PORTC,00H;关闭输出
              JMP MAIN
AS_3:
             ADI T0M_1,01H
             BA0 AS_1
             ANDIM T0M_1,1100B
             ANDIM PORTC,00H;关闭输出
             JMP MAIN                                                                                                                                                                 
               END

使用特权

评论回复
5
mugangzhu|  楼主 | 2009-12-28 16:46 | 只看该作者
????

使用特权

评论回复
6
warm_ice| | 2009-12-28 17:33 | 只看该作者
这个程序部分您可以参考一下"中颖单片机入门与实战"一书的例5.2.1(第240页)的内容.

使用特权

评论回复
7
mugangzhu|  楼主 | 2009-12-29 11:32 | 只看该作者
就240页的那个例子来说其中
LDA PORTA,00H
STA TBR,00H
SBI TBR,0FH
BAZ NO_KEY ;没有扫描到按键按下,跳转
LDA FLAG1,00H
BA0 KEYSCAN_END ;之前的按键未松开,不再扫描按键,跳转?????????????
SBI TBR,0111B
BAZ KS_PORT ;PORT 键按下,跳转
SBI TBR,1011B
BAZ KS_PWM ;PWM 键按下,跳转
JMP KEYSCAN_END
KS_PORT:
LDI KCODE_NEW,0001B ;设置PORT 键的键码为01H
上面的问号部分,我是这样理解的:第一次有按键按下FLAG1的0位就被置1了那以后无论按那个按键都得返回到KEYSCAN_END啊,这样的话以后再按按键就不起作用了啊,可是仿真时按键怎么还是起作用我很是不明白啊???

使用特权

评论回复
8
mugangzhu|  楼主 | 2009-12-29 14:03 | 只看该作者
??????????????

使用特权

评论回复
9
warm_ice| | 2009-12-29 17:32 | 只看该作者
你要看全部程序,在确认按键后将FLAG1的BIT0位置1,在没有按键的时候将FLAG1的BIT0位清零.

使用特权

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

本版积分规则

70

主题

358

帖子

1

粉丝