新闻中心

EEPW首页>嵌入式系统>设计应用> 基于SPCE061A单片机汇编语实现的流水灯

基于SPCE061A单片机汇编语实现的流水灯

作者: 时间:2016-11-23 来源:网络 收藏
//====================================================================//

//名称:流水灯
//功能描述:发光二极管单向循环点亮。SPCE061A单片机汇编语言实现

//===================================================================//

本文引用地址: //m.amcfsurvey.com/article/201611/320260.htm

.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




评论


技术专区

关闭