📄 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 = 0x0100 //初始化IOA0~7为下拉输入,IOA8输出高
[P_IOA_Dir] = r1
r1 = 0x0100
[P_IOA_Attrib] = r1
r1 = 0x0100
[P_IOA_Data] = r1
r1 = 0xff40 //初始化IOB8~15为低电平输出,IOB6输出高
[P_IOB_Dir] = r1
r1 = 0xff40
[P_IOB_Attrib] = r1
r1 = 0x0040
[P_IOB_Data] = r1
?Loop:
call F_KeyScan
r1 = [Key]
cmp r1,0x0000 //是否有按键按下?
je ?Loop_1 //若无则继续扫描键盘,不刷新显示
r1 = r1 lsl 4 //键值左移8位,利用IOB高8位输出
r1 = r1 lsl 4
r1 = r1 | 0x0040 //IOB6输出高电平
[P_IOB_Data] = r1 //输出键值,控制相应的发光二极管显示
?Loop_1:
r1 = 0x0001
[P_Watchdog_Clear] = r1
jmp ?Loop
//========================================================
// 汇编格式: F_KeyScan
// C格式: 无
// 实现功能: 进行扫键操作,返回键盘值
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r2
//========================================================
.PUBLIC F_KeyScan
F_KeyScan:
r1 = [P_IOA_Data]
r1 = r1&0x00ff //仅取低八位的输入值
jz ?Return //为零则代表没有按键按下,返回
call F_Delay //延时,消抖
r2 = [P_IOA_Data]
r2 = r2&0x00ff //仅取低八位的输入值
cmp r1,r2 //比较延时前后两次输入值读取的是否相等?
je ?Return //相等则返回,r1当中保存有键值
r1 = 0x0000 //返回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 + -