新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于SPCE061A單片機匯編語實現(xiàn)的流水燈

基于SPCE061A單片機匯編語實現(xiàn)的流水燈

作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
//====================================================================//

//名稱:流水燈
//功能描述:發(fā)光二極管單向循環(huán)點亮。SPCE061A單片機匯編語言實現(xiàn)

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

本文引用地址:http://m.butianyuan.cn/article/201611/320260.htm

.include SPCE061A.inc //包含頭文件
.ram
.var R_LEDControl //定義LED控制變量
.var R_DaleyControl //定義延時程序控制變量
.code
.public _main

//===================================================================//
//函數(shù)名:主函數(shù)
//功能描述:控制發(fā)光二極管單向循環(huán)點亮
//===================================================================//

_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: //通過循環(huán)左移實現(xiàn)LED單向循環(huán)點亮程序段
r1=[R_LEDControl]
[P_IOA_Data]=r1 //點亮第一個LED
r1=r1 LSL 1 //循環(huán)左移語句
CMP r1,0x0100 //控制點亮的LED在IOA低八位之內(nèi)。CMP指令進行做差比較
JNE NoOver //該指令的意思為:不等于轉(zhuǎn)接到后邊的程序段
r1=0x0001 //如果等于的話,則對IOA口的輸出初始化
NoOver:
[R_LEDControl]=r1
r1=0x0000 //給延時函數(shù)的計數(shù)賦初值
[R_DaleyControl]=r1
CALL L_Daleyloop //轉(zhuǎn)到延時子函數(shù)
JMP L_MAINloop //循環(huán)控制LED的點亮

//===================================================================//
//函數(shù)名:延時函數(shù)
//功能描述:通過計數(shù)實現(xiàn)延時,不精確延時
//===================================================================//

L_Daleyloop:
r1=0x0001
[P_Watchdog_Clear]=r1 //清看門狗
r1=[R_DaleyControl]
r1+=1 //延時計數(shù)加1
[R_DaleyControl]=r1
JNZ L_Daleyloop //JNZ指令標示“非0則轉(zhuǎn)到loop”。該語句的意思是“R_DaleyControl的值不為0則轉(zhuǎn)到L_Daleyloop”。
RETF //一般情況下,循環(huán)加法的值到65535時為最大值,超過該值時則會從0算起,及65536標示0




評論


技術(shù)專區(qū)

關(guān)閉