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

📄 timer_int.asm

📁 事理管理器的定时器中断应用,定时器计数寄存器,定时器控制寄存器,定时器周期寄存器
💻 ASM
字号:
st0_temp	.usect		".b20",1			;
st1_temp	.usect		".b20",1			;
context	 	.usect		".b20",7			;62-68 

;INT2的中断向量为0004H,T1PINT的外设中断向量为0027H。
			.include  "F2407REGS.H" 	;引用头部文件
			.def      _c_int0
;建立中断向量表
			.sect	".vectors"			;定义主向量段
RSVECT	 		B    _c_int0			;PM 0	复位向量  		1
INT1	  		B    PHANTOM		;PM 2	中断优先级1		4
INT2	  		B    GISR2			;PM 4	中断优先级2		5
INT3	  		B    PHANTOM		;PM 6	中断优先级3		6
INT4	  		B    PHANTOM		;PM 8	中断优先级4		7
INT5	  		B    PHANTOM		;PM A	中断优先级5		8
INT6	  		B    PHANTOM		;PM C	中断优先级6		9
RESERVED  	B    PHANTOM		;PM E	 模拟量输入中断(保留)	10
SW_INT8   	B    PHANTOM		;PM 10  	用户定义软件中断   	-
  					
SW_INT31  	B    PHANTOM		;PM 3E  	用户定义软件中断     -
;中断子向量入口定义pvecs
			.sect	".pvecs"			;定义子向量段
PVECTORS	B	PHANTOM		;保留向量地址偏移量  00H 
			B	PHANTOM		;保留向量地址偏移量  01H
  				
			B	PHANTOM		;保留向量地址偏移量  26H
			B	T1PINT_ISR		;保留向量地址偏移量  27H   T1PINT中断
			B	PHANTOM		;保留向量地址偏移量  28H
  			
			B	PHANTOM		;保留向量地址偏移量  41H	
;主程序
         	.text
_c_int0    
		SETC 	INTM
        CLRC 	SXM
       	CLRC 	OVM
		CLRC 	CNF				;B0区被配置为数据空间
       	LDP 		#0E0H			;指向7000h-7080h区
        SPLK 		#81FEH,SCSR1   	;时钟4倍频,CLKIN=6M,CLKOUT=24M
        SPLK		#0E8H,WDCR		;不使能WDT
       	LDP			#0
		SPLK		#02H,IMR		;使能中断优先级INT2
		SPLK		#0FFFFh,IFR		;清中断标志
		LDP			#DP_EVA			;指向7400h-7480h区
		SPLK		#80H,EVAIMRA	;使能T1PINT 中断
		SPLK		#0FFFFh,EVAIFRA	;清EVA中断标志
		SPLK		#0,GPTCONA
		SPLK		#177H,T1PR		;使定时器每1ms产生一次中断
		SPLK		#0,T1CNT
		SPLK		#0164CH,T1CON	;TMODE=10 连续增计数模式,TPS=110 预分频为64
							;TENABLE=1 定时器计数使能,,TCLKS=00 内部时钟
							;TECMPR=1 定时器1比较使能,,SELT1PR=0 
		CLRC	INTM			;开总中断
WAIT:	NOP
		B		WAIT
;中断程序
GISR2:							;优先级INT2中断人口
		;保护现场
		LDP     #0              ;保存机器上下文
		SST		#0,st0_temp	    ;使用自动寻址,DP-0 
		SST		#1,st1_temp	    ;保存状态寄存器到B2 DARAM.
		LDP		#0			  
        SACL	context			;保存ACC的低16位
		SACH	context+1		;保存ACC的高16位
		SAR		AR1,context+2
		SAR		AR2,context+3
		SAR		AR3,context+4
		SAR		AR4,context+5		
		SAR		AR5,context+6
		LDP		#0E0H
		LACC	PIVR,1			;读取外设中断向量寄存器(PIVR),并左移一位
		ADD		#PVECTORS		;加上外设中断人口地址
		BACC					;跳到相应的中断服务子程序
T1PINT_ISR:						;通用定时器1中断人口
		LDP		#DP_EVA	
		SPLK		#0,T1CNT
GISR2_RET:						;中断返回
			;恢复现场
		LDP		#DP_EVA
		SPLK	#0FFFFH,EVAIFRA
		LDP		#0
		LAR		AR5,context+6	
		LAR		AR4,context+5	
		LAR		AR3,context+4		
		LAR		AR2,context+3		
		LAR		AR1,context+2
		LACC	context+1,16
		ADDS	context
		LST		#1, st1_temp
		LST		#0, st0_temp
		CLRC	INTM			;开总中断,因为一进中断就自动关闭总中断
		RET
;假中断程序
PHANTOM 	
KICK_DOG				;复位看门狗
		RET
		END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -