?? main.asm
字號(hào):
//======================================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//======================================================================
//======================================================================
// 工程名稱: ex05_asm_IOA_IN_IOB_OUT
// 功能描述: 《實(shí)驗(yàn)儀實(shí)驗(yàn)指導(dǎo)書》基礎(chǔ)應(yīng)用實(shí)驗(yàn)
// 使用匯編語言實(shí)現(xiàn)A口作為輸入口、B口作為輸出口
// 通過點(diǎn)亮不同發(fā)光二極管來顯示IOA口輸入的鍵盤值
// IDE環(huán)境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的庫: CMacro1016.lib
// 組成文件: main.asm
// 硬件連接: 接KEYPAD接口的IOA7~0分別與COL1~8連接,IOA8與ROW連接;
// IOB15~8連接LED_SEG接口的a~h;
// IOB6連接LED_DIG接口的DIG5
// 維護(hù)記錄: 2005-09-12 v1.0
//
//======================================================================
//======================================================================
// 文件名稱: main.asm
// 功能描述: 通過點(diǎn)亮不同發(fā)光二極管來顯示IOA口輸入的鍵盤值
// 維護(hù)記錄: 2005-09-12 v1.0
//======================================================================
.DEFINE P_IOA_Data 0x7000
.DEFINE P_IOA_Buffer 0x7001
.DEFINE P_IOA_Dir 0x7002
.DEFINE P_IOA_Attrib 0x7003
.DEFINE P_IOB_Data 0x7005
.DEFINE P_IOB_Buffer 0x7006
.DEFINE P_IOB_Dir 0x7007
.DEFINE P_IOB_Attrib 0x7008
.DEFINE P_Watchdog_Clear 0x7012
.RAM
.VAR Key //定義變量保存鍵值
.CODE
//======================================================================
// 匯編格式: _main
// C格式: int main(void);
// 實(shí)現(xiàn)功能: 通過點(diǎn)亮不同發(fā)光二極管來顯示IOA口輸入的鍵盤值
// 入口參數(shù): 無
// 出口參數(shù): 無
// 破壞寄存器:r1
//======================================================================
.PUBLIC _main
_main:
// r1 = 0x0100 //初始化IOA0~7為下拉輸入,IOA8輸出高
r1 = 0x01ff
[P_IOA_Dir] = r1
// r1 = 0x0100 IOA0-7低電平輸出,IOA8高電平輸出
r1=0x01ff
[P_IOA_Attrib] = r1
// r1 = 0x0100
r1=0x0100
[P_IOA_Data] = r1
// r1 = 0xff40 //初始化IOB8~15為低電平輸出,IOB6輸出高
r1=0x0040 //初始化IOB8-15為下拉輸入,IOB6高電平輸出
[P_IOB_Dir] = r1
// r1 = 0xff40
r1=0x0040
[P_IOB_Attrib] = r1
// r1 = 0x0040
r1=0x0040
[P_IOB_Data] = r1
?Loop:
call F_KeyScan
r1 = [Key]
cmp r1,0x0040 //是否有按鍵按下?
je ?Loop_1 //若無則繼續(xù)掃描鍵盤,不刷新顯示
r1 = r1 rsl 4 //鍵值左移8位,利用IOB高8位輸出
r1 = r1 rsl 4
r1 = r1 | 0x0100 //IOB6輸出高電平
[P_IOA_Data] = r1 //輸出鍵值,控制相應(yīng)的發(fā)光二極管顯示
?Loop_1:
r1 = 0x0001
[P_Watchdog_Clear] = r1
jmp ?Loop
//========================================================
// 匯編格式: F_KeyScan
// C格式: 無
// 實(shí)現(xiàn)功能: 進(jìn)行掃鍵操作,返回鍵盤值
// 入口參數(shù): 無
// 出口參數(shù): 無
// 破壞寄存器:r1,r2
//========================================================
.PUBLIC F_KeyScan
F_KeyScan:
r1 = [P_IOB_Data]
r1 = r1&0xff40 //僅取低八位的輸入值
jz ?Return //為零則代表沒有按鍵按下,返回
call F_Delay //延時(shí),消抖
r2 = [P_IOB_Data]
r2 = r2&0xff40 //僅取低八位的輸入值
cmp r1,r2 //比較延時(shí)前后兩次輸入值讀取的是否相等?
je ?Return //相等則返回,r1當(dāng)中保存有鍵值
r1 = 0x0040 //返回0
?Return:
[Key] = r1 //返回鍵值
retf
//========================================================
// 匯編格式: F_Delay
// C格式: 無
// 實(shí)現(xiàn)功能: 延時(shí)
// 入口參數(shù): 無
// 出口參數(shù): 無
// 破壞寄存器:r3,r4
//========================================================
.PUBLIC F_Delay
F_Delay:
r3 = 0x2fff
?Loop:
r4 = 0x0001
[P_Watchdog_Clear] = r4 //清看門狗
r3 -= 1
jz ?Exit
jmp ?Loop
?Exit:
retf
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -