(LED学习板)实验4--LED红绿蓝同时亮灭,同步实现3
;============================================================================;====================翼芯科技 LED红绿蓝同时亮灭,同步=========================
;============================================================================
;此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
; 严禁随意用于商业目的,违者必究,后果自负
; 公司网站 http://www.mcu-led.com
; 公司论坛 http://www.cpu-led.com
; 淘宝店:http://cpu-led.taobao.com/和http://mcu-led.taobao.com/
; 产品咨询 QQ :1322130074 电话:13715619122
;程序说明:本程序用于实现LED红绿蓝1秒同时亮灭,同步实现,延时1ms后再次检测1次,
; 抗干扰最好.IC插到U2位置.
;文件名称:LED.ASM
;日期: 2010/12/23
;版本: 1.0
;IC配置位: 内部RC 看门狗开 MCLRE为输入
__CONFIG _MCLRE_OFF&_CP_ON&_WDT_ON&_IntRC_OSC;
;=============================================================================
;=============================================================================
;=============================================================================
#INCLUDE <P12F509.INC>; 引导文件
;========================IC输出口定义=========================================
#defineRED1 GPIO,0; //红色输出口
#defineGREEN1 GPIO,1; //绿色输出口
#defineBLUE1 GPIO,2; //蓝色输出口
#definePSAA_ZERO GPIO,4; //过零检测口
;=========================状态标志定义========================================
#defineFLAG_ACZ FLAG,0;
#defineFLAG_OK FLAG,1;
#defineACZ_HL FLAG,2; //过零输入高低电平标识
;=========================变量定义============================================
FLAG EQU 07H; //状态标志寄存器
T_DELAY EQU 08H; //延时用
TEMP1 EQU 09H;
DLY1 EQU 0AH;
ACZ_REG EQU 0BH
ORG 00H;
GOTO MAIN;
;==============================================================================
;功能描述:过零检测
;隶属模块:无
;参数说明:检测50/60Hz过零,检测两次,两次检测已过零才确定以过零.
;返回说明:无
;注:.....
;==============================================================================
;=======================过零检测===============================================
;==============================================================================
AC_TIME:
BCF STATUS,Z;
MOVFWACZ_REG;
BTFSCSTATUS,Z;
GOTO AC010;
DECFSZ ACZ_REG,1;
GOTO AC050;
GOTO AC035;
AC010:
BTFSSACZ_HL; //为1高电平状态
GOTO AC020;
BTFSCPSAA_ZERO;
GOTO AC050;
GOTO AC030;
AC020:
BTFSSPSAA_ZERO;
GOTO AC050;
AC030:
MOVLW .50;
MOVWF ACZ_REG;
GOTO AC050;
;======================延时后再次检测=================================================
AC035:
BTFSSACZ_HL; //为1高电平状态
GOTO AC040;
BTFSCPSAA_ZERO;
GOTO AC050;
BCF ACZ_HL;
GOTO AC045;
AC040:
BTFSSPSAA_ZERO;
GOTO AC050;
BSF ACZ_HL;
AC045:
BSF FLAG_ACZ;
AC050:
CLRWDT;
RETLW 0;; 反回
;==============================================================================
;功能描述:延时程序
;隶属模块:无
;参数说明:实现T_DELAY*10MS的延时
;返回说明:无
;注:.....
;==============================================================================
DELAY1:
MOVF T_DELAY,0;
MOVWF TEMP1;
D00:
CALL AC_TIME;
BTFSS FLAG_ACZ; //为1,已启动定时器
GOTO D00; //检测过零
BCF FLAG_ACZ;
DECFSZ TEMP1,1;
GOTO D00;
RETURN
;==============================================================================
;功能描述:主函数,程序开始
;隶属模块:无
;参数说明:无
;返回说明:无
;注:.....
;==============================================================================
MAIN:
MOVLW 0X38; //定义IO口,GPIO 0,1,2为输出,3,4,5为输入.
TRIS GPIO;
CLRF GPIO; //GPIO清0
MOVLW 0X05; //分给TMR0, 2~0定义分频为1:64位
OPTION;
CLRF FLAG;
MOVLW .100; //100*20ms=1S
MOVWF T_DELAY;
LOOP:
;==============================================================================
;功能描述:实现红绿蓝同时跳变
;隶属模块:无
;参数说明无
;返回说明:无
;注:.....
;==============================================================================
FUN1:
BSF RED1; 红亮
BSF GREEN1; 绿亮
BSF BLUE1; 蓝亮
CALL DELAY1;
BCF RED1; 红灭
BCF GREEN1; 绿灭
BCF BLUE1; 蓝灭
CALL DELAY1;
GOTO LOOP;
END
绝对出错啦 哈哈{:soso_e113:}
页:
[1]