📄 test11.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.
//========================================================
//============================================================
// 工程名称:test11.spj
// 功能描述: IRQ6中断有两个中断源:IRQ6_TMB1和IRQ6_TMB2,分别控制A口低4位连接的LED灯
// 和B口低4位连接的LED灯
// 文件来源:《实验仪实验指导书》,"实验十三 IRQ6中断实验" 第42页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的库:
// 组成文件:
// test11.asm
//===============================================
//============================================================
// 文件名称:test11.asm
// 实现功能: IRQ6中断有两个中断源:IRQ6_TMB1和IRQ6_TMB2,分别控制A口低4位连接的LED灯
// 和B口低4位连接的LED灯
//============================================================
.define tmb1clk_8Hz 0x0000
.define tmb1clk_16Hz 0x0001
.define tmb1clk_32Hz 0x0002
.define tmb1clk_64Hz 0x0003
.define tmb2clk_128Hz 0x0000
.define tmb2clk_256Hz 0x0004
.define tmb2clk_512Hz 0x0008
.define tmb2clk_1024Hz 0x000c
.define tmb1_clk tmb1clk_64Hz
.define tmb2_clk tmb2clk_128Hz
.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_Timebase_setup 0x700e
.define P_Timebase_clear 0x700f
.ram
.var TIME1
.var TIME2
.code
.public _main
//=============================================================
// 函数名称: _main
// 功能描述: 初始化
// 语法格式: _main
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_main:
int off
r1=0x000f //设置IOA0-IOA3口为同相高电平输出口
[P_IOA_ATTRI]=r1
[P_IOA_DIR]=r1
[P_IOA_DATA]=r1
r1=0x004f //设置IOB0-IOB3,IOB6口为同相高电平输出口
[P_IOB_ATTRI]=r1
[P_IOB_DIR]=r1
[P_IOB_DATA]=r1
r1=tmb1_clk
r1|=tmb2_clk
[P_Timebase_setup]=r1
r1=0x0003 //开中断IRQ6_TMB1和IRQ6_TMB2
[P_INT_CTRL]=r1
r1=0
[TIME1]=r1
[TIME2]=r1
int irq;
loop:
nop
nop
nop
nop
jmp loop
.text
.public _IRQ6
//=============================================================
// 函数名称: _IRQ6
// 功能描述: IRQ6中断有两个中断源:IRQ6_TMB1和IRQ6_TMB2,分别控制A口低4位连接的LED灯
// 和B口低4位连接的LED灯
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_IRQ6:
push r1,r5 to [sp] //压栈保护
r1=0x0001
test r1,[P_INT_CTRL] //比较是否为IRQ6_TMB2的中断源
jnz l_irq6_tmb2 //是,则转至对应程序段
l_irq6_tmb1: //否,则进入IRQ6_TMB1程序段
r2=[TIME1]
r2+=0x0001
[TIME1]=r2
cmp r2,64 //比较是否为1秒
jbe LED1_OFF //小于等于则LED灭
r1=0x000f //大于则LED亮
[P_IOA_DATA]=r1
cmp r2,128 //比较是否为两秒
jbe LED1_RET //小于等于则LED继续亮
r2=0x000 //否则,TIME1单元清零,返回中断
[TIME1]= r2
jmp LED1_RET
LED1_OFF:
r1=0x0000
[P_IOA_DATA]=r1
LED1_RET:
r1=0x0002
[P_INT_CLEAR]=r1
pop r1,r5 from [sp]
RETI
l_irq6_tmb2:
r2=[TIME2]
r2+=0x0001
[TIME2]=r2
cmp r2,64 //比较是否为0.5秒
jbe LED2_OFF //小于等于则LED灭
r1=0x004f //大于则LED亮
[P_IOB_DATA]=r1
cmp r2,128 //比较是否为1秒
jbe LED2_RET //小于等于则LED继续亮
r2=0x0000 //否则,TIME2单元清零,返回中断
[TIME2]= r2
jmp LED2_RET
LED2_OFF:
r1=0x0040
[P_IOB_DATA]=r1
LED2_RET:
r1=0x0001
[P_INT_CLEAR]=r1
pop r1,r5 from [sp]
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -