📄 int_2.asm
字号:
//******************************************//
// 源 文 件:INT_2.asm //
// 描 述:中断处理及相关代码 //
// 主要功能:驱动电机 //
// 运动偏离黑线时,调用调整函数 //
// 编写作者:by Gholt(林青) //
// 编写日期:2005-09-07 //
// 整理日期:2005-10-30 //
//******************************************//
.include hardware.inc
//扩展的外部变量和外部函数
.external _DeCnt1
.external _DeCnt2
.external _ForTimerA
.external _ForTimerB
.external _ForIRQ5
.external _ForExInt
.external _Out
.iram
.var My_INT_Ctrl=0 //等同于P_INT_Ctrl
.data
//---------------------------//
.code
//======================================================
//函数:Init_IRQ1_TMA
//语法:汇编格式call _Init_IRQ1_TMA
// C格式void Init_IRQ1_TMA()
//描述:初始化内部计数器A(频率:1024Hz 计数初值:DeCnt1)
//参数:无
//返回:无
//======================================================
.public _Init_IRQ1_TMA
_Init_IRQ1_TMA:
push r1 to [sp]
r1=[My_INT_Ctrl]
r1 |= 0x1000
[My_INT_Ctrl]=r1
[P_INT_Ctrl]=r1
r1=0x0031 //0x000d=1024Hz 0x0031=Fosc/256
[P_TimerA_Ctrl]=r1
r1=0xffff
r1-=[_DeCnt1]
[P_TimerA_Data]=r1
irq on
pop r1 from [sp]
retf
.public _Init_IRQ2_TMB
_Init_IRQ2_TMB:
push r1 to [sp]
r1=[My_INT_Ctrl]
r1 |= 0x0400
[My_INT_Ctrl]=r1
[P_INT_Ctrl]=r1
r1=0x0001 //0x0001=Fosc/256 0x0004=4096
[P_TimerB_Ctrl]=r1
r1=0xffff
r1-=[_DeCnt2]
[P_TimerB_Data]=r1
irq on
pop r1 from [sp]
retf
//======================================================
//函数:Close_IRQ1_TMA
//语法:汇编格式call _Close_IRQ1_TMA
// C格式void Close_IRQ1_TMA()
//描述:关闭内部计数器A,使电机1停机
//参数:无
//返回:无
//======================================================
.public _Close_IRQ1_TMA
_Close_IRQ1_TMA:
push r1 to [sp]
r1=[My_INT_Ctrl]
r1 &= 0xefff
[My_INT_Ctrl]=r1
[P_INT_Ctrl]=r1
pop r1 from [sp]
retf
.public _Close_IRQ2_TMB
_Close_IRQ2_TMB:
push r1 to [sp]
r1=[My_INT_Ctrl]
r1 &= 0xfbff
[My_INT_Ctrl]=r1
[P_INT_Ctrl]=r1
pop r1 from [sp]
retf
//======================================================
//函数:Init_IRQ3_EXT1
//语法:汇编格式call _Init_IRQ3_EXT1
// C格式void Init_IRQ3_EXT1()
//描述:开外部中断1(IOB2激发的中断),用于检测是否偏离黑线
//参数:无
//返回:无
//======================================================
.public _Init_IRQ3_EXT1
_Init_IRQ3_EXT1:
push r1 to [sp]
INT OFF
r1=[My_INT_Ctrl]
r1 |=0x0100
[My_INT_Ctrl]=r1
[P_INT_Ctrl]=r1
pop r1 from [sp]
irq on
retf
//======================================================
//函数:Close_IRQ3_EXT1
//语法:汇编格式call _Close_IRQ3_EXT1
// C格式void Close_IRQ3_EXT1()
//描述:关闭外部中断1(IOB2激发的中断),停止检测
//参数:无
//返回:无
//======================================================
.public _Close_IRQ3_EXT1
_Close_IRQ3_EXT1:
push r1 to [sp]
r1=[My_INT_Ctrl]
r1 &= 0xfeff
[My_INT_Ctrl]=r1
[P_INT_Ctrl]=r1
pop r1 from [sp]
retf
//---------------------------//
.TEXT
//======================================================
//函数:IRQ1
//语法:系统自动调用
//描述:计数中断处理子程序,驱动电机1
//参数:无
//返回:无
//======================================================
.public _IRQ1
_IRQ1:
push r1 to [sp]
r1=0x1000
[P_INT_Clear]=r1
call _ForTimerA
//改变计数器A的计数初值P_TimerA_Data,以实现电机的变速
r1=0xffff
r1-=[_DeCnt1]
[P_TimerA_Data]=r1
pop r1 from [sp]
reti
.public _IRQ2
_IRQ2:
push r1 to [sp]
r1=0x0400
[P_INT_Clear]=r1
call _ForTimerB
r1=0xffff
r1-=[_DeCnt2]
[P_TimerB_Data]=r1
pop r1 from [sp]
reti
//========================================================
//函数:IRQ3
//语法:系统自动调用
//描述:外部中断1(IOB2激发的中断)处理子程序
// 物体偏离黑线激发的中断,用于校正运动,使沿黑线运动
//参数:无
//返回:2(使out=2)
//========================================================
.public _IRQ3
_IRQ3:
push r1 to [sp]
r1=0x0100
[P_INT_Clear]=r1
r1=2
[_Out]=r1
// call _ForExInt
pop r1 from [sp]
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -