📄 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.
//
//========================================================================================
// 工程名称: book_Keyup.spj
// 功能描述: 检测触键唤醒的功能
// 进入睡眠状态后,触任意键唤醒,点亮8个LED
// 硬件连接: A口低8位接键盘;高8位接8个LED
// 文件来源: 《SPCE061单片机原理及应用技术》第五章 中断系统,第191页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.0(or later)
//
// 涉及的库: CMacro.lib
//
// 组成文件:
// main.asm/hardware.asm
// hardware.inc/hardware.h
//
// 日期: 2002-6-12
//===========================================================================================
.INCLUDE hardware.inc
.DEFINE P_IOA_RL 0x7004
.DEFINE RUN_KEYWAKEUP_INT 0x0080
.CODE
.PUBLIC _main
_main:
//初始化A口低8位为带下拉电阻的输入,高8位为低电平输出
r1 = 0xff00
[P_IOA_Dir] = r1
[P_IOA_Attrib] = r1
r1 = 0x0000
[P_IOA_Data] = r1
r1 = RUN_KEYWAKEUP_INT //开放触键唤醒中断
[P_INT_Ctrl] = r1
r1 = [P_IOA_RL] //激活A口唤醒功能
INT IRQ //开中断
r1 = 0x0007
[P_SystemClock] = r1 //进入睡眠状态
//当有键唤醒时继续执行程序
Loop:
r1 = [P_IOA_Data]
r1 |= 0xff00;
[P_IOA_Data] = r1; //点亮8个发光二极管
jmp Loop;
//********************************//
//键唤醒中断
//*******************************//
.TEXT
.PUBLIC _IRQ3
_IRQ3:
int off
push r1,r4 to [sp] //现场保护
r1 = 0x0080
test r1,[P_INT_Ctrl] //是否为键唤醒中断
jz L_NotKeyArouse //否,外部中断
//触键唤醒中断的处理
L_KeyArouse:
r1 = 0x0080
jmp Exit_INT;
//外部中断的处理
L_NotKeyArouse:
r1 = 0x0100
test r1,[P_INT_Ctrl]
jnz L_EXT1; //判断是否外部中断1
r1 = 0x0200 //外部中断2
L_EXT1:
Exit_INT:
[P_INT_Clear] = r1 //清中断
pop r1,r4 from [sp] //恢复现场
int irq
reti
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -