打印

用过飞凌(FEELING)单片机的朋友来帮忙

[复制链接]
5642|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szshawn2010|  楼主 | 2010-1-3 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;■1.MCU品牌:飞凌FEELING 8PS53  ;                     
;■与EMC153 PIN对PIN兼容的一款MCU   
;■                                                               
;■2.选择内部RC振荡 4M                                             
;■3. 06H,2 ==LED  (PORTB 第2PIN)选择为LED                        
;■4. 05,2 == KEY  (PORTA 第2 PIN)选择为KEY                       
;■5. 外围电路未使用上拉或下拉电阻                                
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
           
;**************************功能说明***
  
;当按键KEY奇数次闭合时,LED常亮,直到KEY断开
;当按键KEY偶数次闭合时,LED处于3秒点亮,然后熄灭3秒,再点亮3秒,循环...


;;**************
;故障现象:上电,LED端口有不到1V的电压,程序运转时,LED端口电压有少量变化,但不足1V
;         LED也不曾点亮
;因为程序简单,也不曾为I/O寄存器进行过设置.默认状态是:
;KEY端口寄存器为:Disable the internal pull-down of IOA2 pin.
;LED端口:Disable the internal open-drain of IOB2 pin
         Disable the internal pull-high of IOB2 pin
  
;***以下为程序******************

             ORG 000H
             GOTO MAIN_
             ORG 008H          ;计数器中断向量为008H
   TCC_INTO:
             BTRSS 0F,0        ;检测TIMO的溢出标志(0F寄存的bit0位),判断是否为计时中断,
                                      ;TOIF=1(计时中断发生)则跳转 到PC+2,即 CLRR 0F.否则则执PC+1     
                                      ;   NOP指令. ;本人菜鸟,不知PC+2,PC+1是否描述的正确.
                                      ;本说明中的PC+2,PC+1即是上述文字中包含的意思
             NOP                   ;如果此中断不是计时中断,则应该执行其他的判断,
                                     ;本程序没有其他情况,用NOP做个空运转。
             CLRR 0F           ;对溢出标志位的整个寄存器OF进行清零,也就意味着对溢出标志进行了清零
            
             MOVIA 8H
             MOVAR 01          ;对计数器赋初值 8
             DECRSZ 10,1       ;R10被赋了初值N,这个值意味着,中断循环
                                       ;N次才会达到预定的时间。如果减1后,
                                       ;值为0则跳转到PC+2,否则执行PC+1。
             GOTO R_ETFIE      ;没有到预定时间,则要退出中断程序。
             MOVIA BDH   
             MOVAR 10          ;到了预定时间,那么要对R10重新赋初值BDH (189次)
             BTRSC 06,2        ;测试LED的端口,如果=0,执行PC+2,如果≠0执行 PC+1
            
             GOTO B_CR
             GOTO B_SR            
     B_CR:   BCR 06,2          ;对LED端口设为低电平
             GOTO R_ETFIE
     B_SR:   BSR 06,2          ;对LED端口设为高电平
   R_ETFIE:
             RETFIE                  ;退出中断程序        
   
   INTOTAL:  MOVIA BDH        ;十进制 189
             MOVAR 10         ;R10赋初值,189
             BSR 06,2         ;设置LED端口为高电平
             MOVIA 47H        ; 1000 111被MOVE到ACC中
             OPTION           ;设置计数/定时器的寄存器. 1000 111 被设置到寄存器中
             CLRR 0E          ;对INTEN寄存器清零.此时,定时/计数器处于关闭状态
             MOVIA 8H
             MOVAR 01         ;对定时/计数器TIMO赋初值8
             CLRR 0F          ;对定时/计数器溢出标志位进行清零
             BSR 0E,7         ; 开启中断总开关GIE位.即对INTEN的Bit7 位进行了置1操作.定时/计数器被启动
  SCAN2_:                     ; 在中断模式工作时,进行反复扫键 =0跳转.=0继续扫
            
             BTRSS 05,2       ;判断KEY端口 =1 PC+2,否则执行PC+1
             GOTO SCAN2_
             CALL YANSHI_     ;调用延时子程序,进行按键防抖处理
             BTRSS 05,2       ;延时后,再次判断KEY端口,=1则GOTO主程序中的SCAN_段,否则将在本段继续扫键.
             GOTO SCAN2_
             GOTO SCAN_


;======================以上是中断部分========================
            
      MAIN_:
            CLRR 11               ;通用寄存器R11被清零
            
      SCAN_:BCR 06,2              ;LED端口被清0

            CLRR 0E               ;加入关闭中断的指令,当从中断模式中返回时,可以关闭中断.
            BTRSC 05,2            ;按键扫描,如果=0跳一行执行 call YANSHI_,否则执行下一行的GOTO SCAN_
            GOTO SCAN_
            CALL YANSHI_
            BTRSC 05,2            ;延时后,继续扫键.若KEY=0 则跳一行执行 GOTO JUDGE_,
                                         ;否则在本段落继续扫键
            GOTO SCAN_
            
            
            GOTO JUDGE_


   JUDGE_:  INCR 11,1             ;R11寄存器加1
            
            BTRSC 11,0           ;测试R11的bit0位,如果是0,表示是偶数次按键,若是1表示为奇数次按键
                                       ;当R11的bit 0位 =0时,跳一行,执行 INTOTAL
                                       ;当R11的bit 0位 ≠0时,执行下一行 goto odd_no
            
            GOTO ODD_NO
            GOTO INTOTAL
  ODD_NO:
            BSR 06,2              ;已经判断为奇数次按键,进入到奇数模式.开启LED长亮
            
    SCAN1_:
            BTRSS 05,2            ;开启LED后,进入到不间断的扫键状态.当KEY=1时,跳一行执行
                                         ;指令 CALL YANSHI_.否则即
                                         ;当KEY ≠1时,执行下一行的GOTO SCAN1_
            GOTO SCAN1_
            CALL YANSHI_            
            BTRSS 05,2              ;延时回来后,重新测键.
            GOTO SCAN1_            ;KEY≠1时,执行本行
            GOTO SCAN_            ;KEY=1,执行本行.KEY=1表示按键没有接地,已经断开.
                                           ;因此程序返回到主程序中的SCAN_扫键
;==================以上为主程序+奇数模式的程序===========


;=======================以下为延时程序,供扫键时调用==============
                  
  
  YANSHI_: MOVIA 30H
           MOVAR 13H         ;R13赋初值 30H
YANSHI8_:  MOVIA 3H
           MOVAR 12H         ;R12赋初值3H
YANSHI5_:  MOVIA 90H         ;R14赋初值 90H
           MOVAR 14H
    YS0_:  DECRSZ 14H,1     ;R14-1→R14,当结果=0跳过一行执行,否则下一行的GOTO到本行   
           GOTO YS0_
YANSHI6_:  DECRSZ 12H,1     ;R12-1→R12,结果=0,跳过一行执行指令,否则,执行下一行的GOTO
           GOTO YANSHI5_
YANSHI7_:  DECRSZ 13H,1
           GOTO YANSHI8_
           RETURN      



;---------------------请高手赐教
评分
参与人数 1威望 +1 收起 理由
eryao + 1

相关帖子

沙发
szshawn2010|  楼主 | 2010-1-4 17:13 | 只看该作者
:(  请高手赐教.谢谢

使用特权

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

本版积分规则

92

主题

636

帖子

1

粉丝