📄 test12.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.
//========================================================
//============================================================
// 工程名称:test12.spj
// 功能描述: IRQ3有IRQ3_EXT2、IRQ3_EXT1和IRQ3_KEY三个中断源, 这里
// 只做外部中断,(键唤醒中断后面有专门的实验)通过IOB2、IOB3
// 产生一个负跳沿来触发中断,进入中断分别点亮与IOA0-IOA3相连的
// LED灯、与IOA4-IOA7相连的LED灯
// 文件来源:《实验仪实验指导书》,"实验十四 外部中断EXT1,EXT2实验" 第47页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的库:
// 组成文件:
// test12.asm
//===============================================
//============================================================
// 文件名称:test12.asm
// 实现功能: IRQ3有IRQ3_EXT2、IRQ3_EXT1和IRQ3_KEY三个中断源, 这里
// 只做外部中断,(键唤醒中断后面有专门的实验)通过IOB2、IOB3
// 产生一个负跳沿来触发中断,进入中断分别点亮与IOA0-IOA3相连的
// LED灯、与IOA4-IOA7相连的LED灯
//============================================================
.define P_IOA_DATA 0x7000;
.define P_IOA_DIR 0x7002;
.define P_IOA_ATTRI 0x7003;
.define P_IOB_DATA 0x7005;
.define P_IOB_DIR 0x7007;
.define P_IOB_ATTRI 0x7008;
.define P_INT_CTRL 0x7010;
.define P_INT_CLEAR 0x7011;
.define P_Feedback 0x7009;
.code
.public _main
//=============================================================
// 函数名称: _main
// 功能描述: 初始化
// 语法格式: _main
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_main:
int off
r1=0x00ff //设置IOA0-IOA7口为同相低电平输出口
[P_IOA_ATTRI]=r1
[P_IOA_DIR]=r1
r1=0x0000
[P_IOA_DATA]=r1
r1=0x0040; //设置IOB2、IOB3设成带上拉电阻的输入端口,IOB6为同相高电平输出
[P_IOB_DIR]=r1;
[P_IOB_ATTRI]=r1;
r1=0x004c ;
[P_IOB_DATA]=r1;
r1=0x0300; //开中断IRQ3_EXT1、IRQ3_EXT2
[P_INT_CTRL]=r1;
int irq;
loop:
nop
nop
nop
jmp loop
.text
.public _IRQ3
//=============================================================
// 函数名称: _IRQ3
// 功能描述: IRQ3有IRQ3_EXT2、IRQ3_EXT1和IRQ3_KEY三个中断源, 这里
// 只做外部中断,(键唤醒中断后面有专门的实验)通过IOB2、IOB3
// 产生一个负跳沿来触发中断,进入中断分别点亮与IOA0-IOA3相连的
// LED灯、与IOA4-IOA7相连的LED灯
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_IRQ3:
push r1,r5 to [sp] //压栈保护
r1=0x0100
test r1,[P_INT_CTRL] //比较是否为IRQ3_EXT1
jnz irq3_ext1 //是,则转至对应程序段;
r1=0x0200
test r1,[P_INT_CTRL] //否,则比较是否为IRQ3_EXT2
jnz irq3_ext2 //是,则转至对应程序段
r1=0x0200
irq3_key: //否,则进入键唤醒中断
r1=0x0080
[P_INT_CLEAR]=r1
pop r1,r5 from [sp]
reti
irq3_ext2:
r1=0x00f0 //点亮与IOA4~IOA7相连的LED灯
[P_IOA_DATA]=r1
r1=0x0200
[P_INT_CLEAR]=r1
pop r1,r5 from [sp]
reti
irq3_ext1:
r1=0x000f //点亮与IOA0~IOA3相连的LED灯
[P_IOA_DATA]=r1
r1=0x0100
[P_INT_CLEAR]=r1
pop r1,r5 from [sp]
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -