基于SPCE061A单片机汇编语实现的流水灯
          
            时间:01-20 11:32 阅读:1526次
*温馨提示:点击图片可以放大观看高清大图
                
         
        
		  
               简介:本文给大家介绍了一个基于SPCE061A单片机汇编语实现的流水灯。
               
                        
          
            //====================================================================//
//名称:流水灯
//功能描述:发光二极管单向循环点亮。SPCE061A单片机汇编语言实现
//===================================================================//
 .include SPCE061A.inc           //包含头文件
 .ram
 .var R_LEDControl               //定义LED控制变量
 .var R_DaleyControl             //定义延时程序控制变量
 .code
 .public _main
 
//===================================================================//
//函数名:主函数
//功能描述:控制发光二极管单向循环点亮
//===================================================================//
_main:
 r1=0x00ff                         //定义IOA口为同向输出,并输出低电平
 [P_IOA_Dir]=r1                  
 [P_IOA_Attrib]=r1                
 r1=0x0000
 [P_IOA_Data]=r1                   //IO口电平初始化,如果是接共阳极的LED,则选用高电平输出
 r1=0x0001
 [R_LEDControl]=r1
L_MAINloop:                           //通过循环左移实现LED单向循环点亮程序段
 r1=[R_LEDControl]
 [P_IOA_Data]=r1       //点亮第一个LED
 r1=r1 LSL 1                       //循环左移语句
 CMP r1,0x0100                     //控制点亮的LED在IOA低八位之内。CMP指令进行做差比较
 JNE NoOver        //该指令的意思为:不等于转接到后边的程序段
 r1=0x0001                         //如果等于的话,则对IOA口的输出初始化
NoOver:
 [R_LEDControl]=r1
 r1=0x0000                         //给延时函数的计数赋初值
 [R_DaleyControl]=r1
 CALL L_Daleyloop                  //转到延时子函数
 JMP L_MAINloop                    //循环控制LED的点亮  
 
//===================================================================//
//函数名:延时函数
//功能描述:通过计数实现延时,不精确延时
//===================================================================//
L_Daleyloop:
 r1=0x0001
 [P_Watchdog_Clear]=r1          //清看门狗
 r1=[R_DaleyControl]
 r1+=1                          //延时计数加1
 [R_DaleyControl]=r1
 JNZ L_Daleyloop                //JNZ指令标示“非0则转到loop”。该语句的意思是“R_DaleyControl的值不为0则转到L_Daleyloop”。
 RETF                           //一般情况下,循环加法的值到65535时为最大值,超过该值时则会从0算起,及65536标示0