⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int_2.asm

📁 2005年电子设计竞赛悬挂运动控制系统源码
💻 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 + -