?? main.asm
字號:
//======================================================================
// 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
// 功能描述: 《實驗儀實驗指導書》基礎應用實驗
// 使用匯編語言實現A口作為輸入口、B口作為輸出口
// 通過點亮不同發光二極管來顯示IOA口輸入的鍵盤值
// IDE環境: 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
// 維護記錄: 2005-09-12 v1.0
//
//======================================================================
//======================================================================
// 文件名稱: main.asm
// 功能描述: 通過點亮不同發光二極管來顯示IOA口輸入的鍵盤值
// 維護記錄: 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);
// 實現功能: 通過點亮不同發光二極管來顯示IOA口輸入的鍵盤值
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器:r1
//======================================================================
.PUBLIC _main
_main:
r1=0x0040 //初始化IOB8-15為上拉輸入,IOB6高電平輸出
[P_IOB_Dir] = r1
// r1 = 0xff40
r1=0x0040
[P_IOB_Attrib] = r1
// r1 = 0x0040
r1=0xff40
[P_IOB_Data] = r1
// r1 = 0x0100 //初始化IOA0~7為下拉輸入,IOA8輸出高
r1 = 0x00ff
[P_IOA_Dir] = r1
// r1 = 0x00ff IOA0-7低電平輸出,
[P_IOA_Attrib] = r1
// r1 = 0x0000
r1=0x0000
[P_IOA_Data] = r1
// r1 = 0xff40 //初始化IOB8~15為低電平輸出,IOB6輸出高
?Loop:
//r1=0xff00
// [key]=r1
call F_KeyScan
// r1 = [P_IOB_Data]
r1 = [Key]
cmp r1,0xff00 //是否有按鍵按下?
je ?Loop_1 //若無則繼續掃描鍵盤,不刷新顯示
r1 = r1 lsr 4 //鍵值左移8位,利用IOB高8位輸出
r1 = r1 lsr 4
// r1 = r1 | 0x0100 //IOB6輸出高電平
[P_IOA_Data] = r1 //輸出鍵值,控制相應的發光二極管顯示
?Loop_1:
[P_IOA_Data] = r1
r1 = 0x0001
[P_Watchdog_Clear] = r1
jmp ?Loop
//========================================================
// 匯編格式: F_KeyScan
// C格式: 無
// 實現功能: 進行掃鍵操作,返回鍵盤值
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器:r1,r2
//========================================================
.PUBLIC F_KeyScan
F_KeyScan:
r1 = [P_IOB_Data]
r1 = r1&0xff00 //僅取低八位的輸入值
jz ?Return //為零則代表沒有按鍵按下,返回
call F_Delay //延時,消抖
r2 = [P_IOB_Data]
r2 = r2&0xff00 //僅取低八位的輸入值
cmp r1,r2 //比較延時前后兩次輸入值讀取的是否相等?
je ?Return //相等則返回,r1當中保存有鍵值
r1 = 0xff00 //返回0
?Return:
[Key] = r1 //返回鍵值
retf
//========================================================
// 匯編格式: F_Delay
// C格式: 無
// 實現功能: 延時
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器:r3,r4
//========================================================
.PUBLIC F_Delay
F_Delay:
r3 = 0x2fff
?Loop:
r4 = 0x0001
[P_Watchdog_Clear] = r4 //清看門狗
r3 -= 1
jz ?Exit
jmp ?Loop
?Exit:
retf
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -