新聞中心

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

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

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

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

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

本文引用地址:http://butianyuan.cn/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口電平初始化,如果是接共陽極的LED,則選用高電平輸出
r1=0x0001
[R_LEDControl]=r1
L_MAINloop: //通過循環(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)左移語句
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ù)
//功能描述:通過計(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”。該語句的意思是“R_DaleyControl的值不為0則轉(zhuǎn)到L_Daleyloop”。
RETF //一般情況下,循環(huán)加法的值到65535時(shí)為最大值,超過該值時(shí)則會(huì)從0算起,及65536標(biāo)示0




評(píng)論


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

關(guān)閉