📄 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.
//======================================================================
//======================================================================
// 工程名称: ex10_asm_IRQ0_IRQ1_IRQ2
// 功能描述: 《实验箱实验指导书》基础应用实验
// IRQ0/IRQ1/IRQ2中断
// 使用IRQ1、IRQ2中断使LED按照设定周期闪烁
// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的库: CMacro1016.lib
// 组成文件: main.asm
// 硬件连接: IOA口低4位连接1*8LED的4位,IOB口低4位连接1*8LED的4位
// 维护记录: 2005-09-12 v1.0
//
//=======================================================================
//=======================================================================
// 文件名称: main.asm
// 功能描述: 使用IRQ1、IRQ2中断使LED按照设定周期闪烁
// 维护记录: 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_TimerA_Data 0x700A
.DEFINE P_TimerA_Ctrl 0x700B
.DEFINE P_TimerB_Data 0x700C
.DEFINE P_TimerB_Ctrl 0x700D
.DEFINE P_INT_Ctrl 0x7010
.DEFINE P_INT_Clear 0x7011
.DEFINE P_Watchdog_Clear 0x7012
.DEFINE C_IRQ2_TMB 0x0400
.DEFINE C_IRQ1_TMA 0x1000
.DEFINE C_IRQ0_PWM 0x4000
.DEFINE C_4096Hz 0x0004
.DEFINE C_A1 0x0005
.DEFINE C_2048Hz 0x0000
.DEFINE C_B1 0x0030
.CODE
//=========================================================================
// 汇编格式: _main
// C格式: int main(void);
// 实现功能: 使用IRQ1、IRQ2中断使LED按照设定周期闪烁
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r2
//=========================================================================
.PUBLIC _main
_main:
int off //关闭中断
r1 = 0x000f //设置IOA口低4位为同相高电平输出
[P_IOA_Dir] = r1
[P_IOA_Attrib] = r1
[P_IOA_Data] = r1
r1 = 0x000f
[P_IOB_Dir] = r1
[P_IOB_Attrib] = r1
[P_IOB_Data] = r1
r1 = C_4096Hz | C_B1 //时钟源选择4096Hz,定时2秒,初值为0xdfff
[P_TimerA_Ctrl] = r1
r1 = 0xdfff
[P_TimerA_Data] = r1
r1 = C_4096Hz //时钟源选择4096Hz,定时1秒,初值为0xefff
[P_TimerB_Ctrl] = r1
r1 = 0xefff
[P_TimerB_Data] = r1
r1 = C_IRQ2_TMB | C_IRQ1_TMA //打开TimerA的IRQ1中断,TimerB的IRQ2中断
[P_INT_Ctrl] = r1
int irq //打开IRQ总中断,关闭FIQ总中断
?Loop:
r1 = 0x0001
[P_Watchdog_Clear] = r1
jmp ?Loop
.TEXT
//========================================================
// 汇编格式: _IRQ0
// C格式: 无
// 实现功能: IRQ0中断服务程序
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:无
//========================================================
.PUBLIC _IRQ0
_IRQ0:
push r1,r5 to [sp]
r1 = C_IRQ0_PWM
[P_INT_Clear] = r1 //清IRQ0中断
pop r1,r5 from [sp]
reti
//========================================================
// 汇编格式: _IRQ1
// C格式: 无
// 实现功能: IRQ1中断服务程序
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:无
//========================================================
.PUBLIC _IRQ1
_IRQ1:
push r1,r5 to [sp]
r1 = [P_IOA_Buffer]
r1 ^= 0x000f //IOA口低四位电平翻转
[P_IOA_Data] = r1 //输出
r1 = C_IRQ1_TMA
[P_INT_Clear] = r1 //清IRQ1中断
pop r1,r5 from [sp]
reti
//========================================================
// 汇编格式: _IRQ2
// C格式: 无
// 实现功能: IRQ2中断服务程序
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:无
//========================================================
.PUBLIC _IRQ2
_IRQ2:
push r1,r5 to [sp]
r1 = [P_IOB_Buffer]
r1 ^= 0x000f //IOB口低四位电平翻转
[P_IOB_Data] = r1 //输出
r1 = C_IRQ2_TMB
[P_INT_Clear] = r1 //清IRQ2中断
pop r1,r5 from [sp]
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -