| 
;============================================================================
×
注册登录后可以在线提问,行业从业者将帮助您解答!您需要 登录 才可以下载或查看,没有账号?请用中文注册用户! 
  ;====================翼芯科技 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输出口定义=========================================
 #define  RED1          GPIO,0;      //红色输出口
 #define  GREEN1        GPIO,1;      //绿色输出口
 #define  BLUE1         GPIO,2;      //蓝色输出口
 #define  PSAA_ZERO     GPIO,4;      //过零检测口
 
 ;=========================状态标志定义========================================
 #define  FLAG_ACZ      FLAG,0;
 #define  FLAG_OK       FLAG,1;
 #define  ACZ_HL        FLAG,2;      //过零输入高低电平标识
 
 ;=========================变量定义============================================
 FLAG         EQU       07H;         //状态标志寄存器
 T_DELAY      EQU       08H;         //延时用
 TEMP1        EQU       09H;
 DLY1         EQU       0AH;
 
 
 
 
 ORG   00H;
 GOTO    MAIN;
 ;==============================================================================
 ;功能描述:过零检测
 ;隶属模块:无
 ;参数说明:检测50/60Hz过零,检测两次,两次检测已过零才确定以过零.
 ;返回说明:无
 ;注:.....
 ;==============================================================================
 AC_TIME:
 BTFSS  ACZ_HL;        为1高电平状态
 GOTO   AC00;
 BTFSC  PSAA_ZERO;      状态为1时判定过零脚电平
 GOTO   AC20;           无过零,退出
 GOTO   AC05;           有过零
 AC00:
 BTFSS  PSAA_ZERO;      状态为0时判定过零脚电平
 GOTO   AC20;           无过零,退出
 AC05:
 BTFSC  FLAG_OK;        有过零,判定是否是第一次过零
 GOTO   AC10;           跳到第二次过零
 BSF    FLAG_OK;        第一次过零
 GOTO   AC20;
 ;//===========================================================================
 AC10:
 BSF    FLAG_ACZ;       成功过零标识
 BCF    FLAG_OK;        清标识次数标识
 BTFSS  PSAA_ZERO;      重置过零状态标识
 GOTO   AC15;
 BSF    ACZ_HL;         高电平标识
 GOTO   AC20;
 AC15:
 BCF    ACZ_HL;         低电平标识
 AC20:
 RETURN;                中断反回
 ;==============================================================================
 ;功能描述:延时程序
 ;隶属模块:无
 ;参数说明:实现T_DELAY*10MS的延时
 ;返回说明:无
 ;注:.....
 ;==============================================================================
 DELAY1:
 MOVF     T_DELAY,0;
 MOVWF    TEMP1;
 D00:
 MOVLW    .250;
 MOVWF    DLY1;
 D10:
 CLRWDT;
 DECFSZ   DLY1,1;
 GOTO     D10;
 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   B'00000101';          //分给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
 
 
 |