2000|3

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求大神帮看看这段程序 [复制链接]

;*********************************************************************************************************************************************************************************
;项目名称;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                                       











此帖出自单片机论坛

最新回复

汇编急闪  详情 回复 发表于 2014-5-12 22:31
点赞 关注
 

回复
举报

7

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
打开50 档 30档 100档位
此帖出自单片机论坛
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 
汇编急闪
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
看懂我 的程序了么 亲帮看看哪错误了 我要颠了的节奏啊
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表