📄 main.asm
字号:
//===========================================================================
//
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
//
// (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
//
// The entire notice above must be reproduced on all authorized copies.
//
//============================================================================
// 工程名称:
// 功能描述: 程序3.3 DATA、CODE、TEXT三条伪指令的用法及区别
// 文件来源: 《SPCE061单片机原理及应用技术》 第三章 指令系统
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.0(or later)
//
// 涉及的库: (a) C-Lib: (CMacro.lib);
// 组成文件:
// main.asm
// 日期: 2003-5-22(建立)
// 2003-6-16(添加版本说明及版权声明)
// 2003-7-16(代码标准化)
//==============================================================================
.DEFINE P_IOA_Data 0x7000; //定义常量
.DEFINE P_IOA_Dir 0x7002;
.DEFINE P_IOA_Attr 0x7003;
.DEFINE P_IOA_Latch 0x7004;
.DEFINE P_IOB_Data 0x7005;
.DEFINE P_IOB_Buffer 0x7006;
.DEFINE P_IOB_Dir 0x7007;
.DEFINE P_IOB_Attr 0x7008;
.DEFINE P_INT_Ctrl 0x7010;
.DEFINE P_INT_Clear 0x7011;
.DEFINE P_Watchdog_Clear 0x7012;
.DEFINE P_SystemClock 0x7013;
.RAM
//切换到RAM段,RAM段用于存放无初始化的变量
.var KeyCode
.DATA
//切换到DATA段,DATA段用于存放数据表格
//显示数据表
DispTable: .DW 0x00FF,0x0006,0x005b,0x004f,0x0066 //全亮、1、2、3、4
.DW 0x006d,0x007d,0x0007,0x007f,0x006f //5、6、7、8、9
.DW 0x003f //0
//键盘表
KeyTable: .DW 0x0000
.DW 0x0001,0x0002,0x0004,0x0008
.DW 0x0010,0x0020,0x0040,0x0080
.CODE
//切换到CODE段,CODE段用于存放程序指令
.PUBLIC _main;
_main:
r1=0xff00; //初始化IOA口低8位为带下拉电阻的输入
[P_IOA_Dir]=r1
[P_IOA_Attr]=r1;
r1=0x0000;
[P_IOA_Data]=r1;
r1=0x00FF; //设置IOB口低8位为同相高电平输出
[P_IOB_Dir]=r1;
[P_IOB_Attr]=r1;
r1=0x00FF;
[P_IOB_Data]=r1;
r1=0x0000 //初始化KeyCode变量
[KeyCode]=r1
r1=0x0080;
[P_INT_Ctrl]=r1; //开按键唤醒中断
IRQ ON;
r1=[P_IOA_Latch]; //锁存IOA0-7口上的数据
r1=0x0007;
[P_SystemClock]=r1; //进入睡眠模式
L_Wait:
bp=DispTable //查表
bp+ =[KeyCode]
r1=[bp]
[P_IOB_Data]=r1; //送IOB口显示
r1=0x0001
[P_Watchdog_Clear]=r1;
jmp L_Wait;
//************************************************************************************************//
//*************************************中断程序*************************************************//
//************************************************************************************************//
.TEXT
//切换到TEXT段,TEXT段用于存放程序指令,链接时链接到第一个bank,即零页ROM中。
.PUBLIC _IRQ3
_IRQ3:
PUSH r1,r5 TO [sp];
r1=[P_INT_Ctrl]
r1=0x0080; //按键唤醒中断
TEST r1,[P_INT_Ctrl]
JZ return
r1=[P_IOA_Data]; //确定按键值
r1=r1 and 0x00ff;
r2=0;
bp=KeyTable //查表换算成顺序值
LOOP:
r3=[bp++]
CMP r1,r3
JE KeyValid
r2+=1;
CMP r2,8
JBE LOOP
r2=0
KeyValid:
[KeyCode]=r2; //存有效键码
return:
r1=0x0380 //清中断
[P_INT_Clear]=r1
r1=0x0001
[P_Watchdog_Clear]=r1;
POP r1,r5 FROM [sp];
reti;
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -