//====================================================================////名稱:流水燈
//功能描述:發(fā)光二極管單向循環(huán)點(diǎn)亮。SPCE061A單片機(jī)匯編語(yǔ)言實(shí)現(xiàn)
//===================================================================//
本文引用地址:
http://cafeforensic.com/article/201611/320260.htm.include SPCE061A.inc //包含頭文件
.ram
.var R_LEDControl //定義LED控制變量
.var R_DaleyControl //定義延時(shí)程序控制變量
.code
.public _main
//===================================================================//
//函數(shù)名:主函數(shù)
//功能描述:控制發(fā)光二極管單向循環(huán)點(diǎn)亮
//===================================================================//
_main:
r1=0x00ff //定義IOA口為同向輸出,并輸出低電平
[P_IOA_Dir]=r1
[P_IOA_Attrib]=r1
r1=0x0000
[P_IOA_Data]=r1 //IO口電平初始化,如果是接共陽(yáng)極的LED,則選用高電平輸出
r1=0x0001
[R_LEDControl]=r1
L_MAINloop: //通過(guò)循環(huán)左移實(shí)現(xiàn)LED單向循環(huán)點(diǎn)亮程序段
r1=[R_LEDControl]
[P_IOA_Data]=r1 //點(diǎn)亮第一個(gè)LED
r1=r1 LSL 1 //循環(huán)左移語(yǔ)句
CMP r1,0x0100 //控制點(diǎn)亮的LED在IOA低八位之內(nèi)。CMP指令進(jìn)行做差比較
JNE NoOver //該指令的意思為:不等于轉(zhuǎn)接到后邊的程序段
r1=0x0001 //如果等于的話,則對(duì)IOA口的輸出初始化
NoOver:
[R_LEDControl]=r1
r1=0x0000 //給延時(shí)函數(shù)的計(jì)數(shù)賦初值
[R_DaleyControl]=r1
CALL L_Daleyloop //轉(zhuǎn)到延時(shí)子函數(shù)
JMP L_MAINloop //循環(huán)控制LED的點(diǎn)亮
//===================================================================//
//函數(shù)名:延時(shí)函數(shù)
//功能描述:通過(guò)計(jì)數(shù)實(shí)現(xiàn)延時(shí),不精確延時(shí)
//===================================================================//
L_Daleyloop:
r1=0x0001
[P_Watchdog_Clear]=r1 //清看門狗
r1=[R_DaleyControl]
r1+=1 //延時(shí)計(jì)數(shù)加1
[R_DaleyControl]=r1
JNZ L_Daleyloop //JNZ指令標(biāo)示“非0則轉(zhuǎn)到loop”。該語(yǔ)句的意思是“R_DaleyControl的值不為0則轉(zhuǎn)到L_Daleyloop”。
RETF //一般情況下,循環(huán)加法的值到65535時(shí)為最大值,超過(guò)該值時(shí)則會(huì)從0算起,及65536標(biāo)示0
評(píng)論