求看看这段简单的程

2019-03-25 19:11发布

;*********************************************************************************************************************************************************************************
;项目名称;three
;目标幸好;pic10f200
;功能描述;按键开关控制5个档位
;源文件名称;three.asm
;作者名称;chunjiang
;编程日期;2014.3.25
;**********************************************************************************************************************************************************************************
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;                                                        主程序
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LIST P=10F200                                     ;定义头文件
INCLUDE "P10F200.INC"                             ;列表文件
__CONFIG _MCLRE_OFF&_CP_ON&_WDT_OFF&_OSC_IntRC;字这里全部配置完成 省去烧录界面每次都麻烦的进行配置。
            ORG 0000H                              ;复位向量地址每次复位都指向0000
            BTFSS STATUS,7                         ;检测是否引脚电平导致的复位是的话继续往下执行步骤不是的话跳到执行赋值休眠赋值休眠关闭所有的功能进入省电
            GOTO CALL1                             ;
            BCF STATUS,7                           ;清除状态位置免得每次到这了又来重新判断
            CALL STATRT                            ;调用初始化程序的目的在于初始化了好执行下一步程序
            BTFSC GPIO,1                           ;检测引脚1是否按下
            GOTO SLP                               ;没有按下就跳到休眠模式进入赋值休眠模块
            CALL DELAY10MS                         ;调用延时程序
            BTFSC GPIO,1                           ;检测引脚1上的按键是否按下
            GOTO SLP                               ;跳到休眠模式
            GOTO MAIN                              ;跳到主函数
CALL1       CALL STATRT                            ;调用初始化程序
            GOTO SLP                               ;调用初始化程序模块进入休眠
MAIN        BTFSC GPIO,1                           ;主函数
            GOTO MAIN                              ;按键真的按下了么
            CALL DELAY10MS                         ;调用延时程序
            BTFSC GPIO,1                           ;按键真的按下了么
            GOTO MAIN                              ;
            BSF GPIO,0                             ;电路输出打开
DUTY50      BCF GPIO,2                             ;调光输出关闭
            MOVLW 50H                              ;
            MOVWF 11H                              ;给11单元赋值80D
LOP1        DECFSZ 11H,1                           ;11单元的内容减去1结果放到F寄存器
            GOTO LOP1                              ;
RENEW1      BTFSS GPIO,1                           ;按键真的释放了么
            GOTO DUTY30                            ;
            BSF GPIO,2                             ;调光电路打开
            MOVLW 50H                              ;给12单元赋值80D
            MOVWF 12H                              ;
LOP2        DECFSZ 12H,1                           ;12单元内的内容减去1
            GOTO LOP2                              ;
            BTFSS GPIO,1                           ;按键真的释放了么
            GOTO DUTY50                            ;没有释放就继续打开50档位
            CALL DELAY10MS                         ;
            BTFSS GPIO,1                           ;按键真的释放了么
            GOTO DUTY50                            ;
DUTY30      BTFSC GPIO,1                           ;按键真的按下了么
            GOTO DUTY30                            ;
            CALL DELAY10MS                         ;调用延时程序
            BTFSC GPIO,1                           ;按键真的按下了么
            GOTO DUTY30                            ;
            BSF GPIO,0                             ;
DUTY3       BCF GPIO,2                             ;打开电路输出 关闭调光输出
            MOVLW 30H                              ;
            MOVWF 11H                              ;给11单元赋值48D
LOP3        DECFSZ GPIO,1                          ;
            GOTO LOP3                              ;
            BTFSS GPIO,1                           ;按键真的释放了么
            GOTO DUTY100                           ;
            BSF GPIO,2                             ;调光电路打开
            MOVLW 13H                              ;
            MOVWF 12H                              ;给12单元赋值19d
LOP4        DECFSZ 12H,1                           ;12单元的内容减去1结果放到F寄存器
            GOTO LOP4                              ;
            BTFSS GPIO,1                           ;按键真的释放了么
            GOTO DUTY100                           ;
            CALL DELAY10MS                         ;
            BTFSS GPIO,1                           ;按键真的释放了么
            GOTO DUTY3                             ;
DUTY100     BTFSC GPIO,1                           ;按键真的按下了么
            GOTO DUTY100                           ;
            CALL DELAY10MS                         ;调用延时程序
            BTFSC GPIO,1                           ;按键真的按下了么
            BSF GPIO,0                             ;
LOP6        BSF GPIO,2                             ;打开所有输出
RENEW3      BTFSS GPIO,1                           ;按键真的松开了么
            GOTO SLP                               ;
            CALL DELAY10MS                         ;
            BTFSS GPIO,1                           ;按键真的松开了么
            GOTO SLP                               ;
            GOTO LOP6                              ;
SLP         BCF GPIO,0                             ;关闭所有端口
            BCF GPIO,2                             ;
            MOVF GPIO,1                            ;进入休眠模式读取端口状态,休眠期间一旦引脚的值与上次读入的值不一样容易产生唤醒 在进入休眠状态应该读取端口状态
            SLEEP                                  ;休眠指令后面跟跳NOP指令
            NOP                                    ;
;********************************************************************************************************************************************************************************
STATRT       MOVLW 0AH            ;
             TRIS GPIO            ;设置各个I/O口的输入和输出
             MOVLW 00H            ;
             OPTION               ;初始化程序中关闭引脚电平变化唤醒  但是开启作为数字输入的引脚内部弱上拉功能
             BCF GPIO,0           ;关CE
             BCF GPIO,2           ;同时也关PWM.
             RETLW 00H              ;
;******************************************************************延时10ms的子程序*******************************************************************************
DELAY10MS    MOVLW 0DH            ;实际时间为5乘以256等于3830us.
             MOVWF 15H            ;修改后改为实际时间为3ms  但是标识符号没有更改!将外循环常数41H存于通用数据存储单元10H中。
LOP20        MOVLW 0FFH
             MOVWF 16H            ;内循环常数0FFH保存于通用数据存储单元11H中。
LOP9         DECFSZ 16H,1         ;内循环自减1!
             GOTO LOP9
             DECFSZ 15H,1
             GOTO LOP20            ;
             RETLW 00H            ;
;*******************************************************************************************************************************************************************************
             END                                       









                                                      此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。