lxqlzj 发表于 2012-2-3 14:36:31

(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

netic 发表于 2012-5-15 21:36:13

绝对出错啦 哈哈{:soso_e113:}
页: [1]
查看完整版本: (LED学习板)实验4--LED红绿蓝同时亮灭,同步实现3