📄 more_int.asm
字号:
//=================================================================================
//来源: 《SPCE061单片机原理及应用技术》 第五章 中断系统
//描述: FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三个中断源,当定时器A或B
// 计满溢出时产生中断请求信号TA_TIMEOUT_INT或TA_TIMEOUT_INT,
// CPU响应后进入中断执行相应的子程序控制二极管发光。
//日期: 2003/05/20
//=================================================================================
.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_TimerA_Data 0x700A;
.define P_TimerA_Ctrl 0x700B;
.define P_TimerB_Data 0x700C;
.define P_TimerB_Ctrl 0x700D;
.define timea_clk 0x020d; //1024hz
.define timeb_clk 0x0004; //4096hz
.ram
.var TA_Flag
.var TB_Flag
.code
.public _main
_main:
int off
R1 = 0xffff //IOA口为输出口;
[P_IOA_Attri] = R1
[P_IOA_Dir] = R1
R1 = 0x0000
[P_IOA_Data] = R1
R1 = 0xffff //B口的低8位设置为输出
[P_IOB_Dir] = R1
[P_IOB_Attri] = R1
R1 = 0x0000
[P_IOB_Data] = R1
R1 = 0xff9f;
[P_TimerA_Data] = R1;
[P_TimerB_Data] = R1;
R1 = timea_clk;
[P_TimerA_Ctrl] = R1;
R2 = 0x0004 //开中断IRQ0_TMA、IRQ1_TMA、IRQ1_TMB
R1 = 0x2000 //开中断FIQ_PWM、FIQ_TMA、FIQ_TMB
R1 |= R2;
[P_INT_Ctrl] = R1
int IRQ,FIQ;
loop:
nop
nop
nop
jmp loop
.text
.public _FIQ
_FIQ:
push R1,R5 to [sp] //压栈保护
R1 = 0x0800
R2 = [P_INT_Ctrl]
test r1,[P_INT_Ctrl] //比较是否为FIQ_TMB
jnz FIQ_TMB //是,则转至对应程序段
r1 = 0x2000
test R1,[P_INT_Ctrl] //否,则比较是否为FIQ_TMA
jnz FIQ_TMA //是,则转至对应程序段
FIQ_PWM: //否,则进入FIQ_PWM中断
R1 = 0x8000
[P_INT_Clear] = R1
pop R1,R5 from [sp]
reti
FIQ_TMA:
R1 = [TA_Flag]
R1 ^= 0xffff
[P_IOA_Data] = R1
[TA_Flag] = R1
R1 = 0x2000
[P_INT_Clear] = R1
pop R1,R5 from [sp]
reti
FIQ_TMB:
R1 = 0x0800
[P_INT_Clear] = R1
pop R1,R5 from [sp]
reti
.text
.public _IRQ5
_IRQ5:
push R1,R5 to [sp] //压栈保护
R1 = 0x0008
test R1,[P_INT_Ctrl] //比较是否为4Hz的中断源
jnz l_irq5_4 //是,则转至对应程序段
l_irq5_2:
nop;
nop;
nop
//r1 = 0xffff //否,则进入2Hz程序段
//[P_IOA_DATA]=r1
jmp l_irq5_2;
LED2Hz_RET:
//r1=0x0004
//[P_INT_CLEAR]=r1
pop R1,R5 from [sp]
RETI
l_irq5_4:
//[P_INT_CLEAR]=r1
pop R1,R5 from [sp]
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -