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

📄 pwm.asm

📁 2407asm文件夹包括第8~13章的汇编语言代码及使用说明。有如下子文件夹: &#61548 第8章数字输入输出模块(led); &#61548 第8章数字输入输出模块(LED+KEY);
💻 ASM
字号:
st0_temp	.usect		".b20",1			;
st1_temp	.usect		".b20",1			;
context	 	.usect		".b20",7			;62-68 

			.include  "F2407REGS.H" 	;引用头部文件
			.def      _c_int0
;(1)建立中断向量表
			.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		;保留向量地址偏移量 -2EH
			B	T3GP_ISR			;保留向量地址偏移量 -2FH   T3PINT中断
			B	PHANTOM		;保留向量地址偏移量 -30H
  				
			B	PHANTOM		;保留向量地址偏移量 -41H	
;(2)主程序
			.text
_c_int0 
		CALL	SYSINIT			;系统初始化程序
    	CALL	PWM_INIT			;EVB模块PWM初始化程序
WAIT
		NOP
		B		WAIT
;(3)系统初始化程序
SYSINIT:
		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		#0002H,IMR		;使能中断第2级INT2
		SPLK		#0FFFFH,IFR		;清全部中断标志
		RET
;(4)EVB模块的PWM初始化程序
PWM_INIT:
		LDP		#DP_PF2			;指向7080h-7100h区
		LACL	MCRC
		OR		#007EH			;IOPE[1-6]被配置为基本功能方式:PWM[7-12]
		SACL	MCRC
		LDP		#DP_EVB			;指向7500h-7580h区
		SPLK		#0FFFFH,EVBIFRA	;清EVB 全部中断标志
		SPLK		#0666H,ACTRB	;PWM12,10,8 低有效,PWM11,9,7 高有效
		SPLK		#00H,DBTCONB	;不使能死区控制
		SPLK		#10H,CMPR4		;设置比较初值 PWM7高电平占50/60, 低电平占10/60
		SPLK		#20H,CMPR5		;设置PWM9,10的比较寄存器
		SPLK		#30H,CMPR6		;设置PWM11,12的比较寄存器
		SPLK		#60H,T3PR		;设置定时器3周期寄存器,
									;即PWM周期为60个CPU时钟周期
		SPLK		#0A600H,COMCONB;使能比较操作
		SPLK		#0,T3CNT
		SPLK		#41H,GPTCONB	;TCOMPOE=1,T3PIN=01
		SPLK		#080H,EVBIMRA	;通用定时器3使能
		SPLK		#0174EH,T3CON	;TMODE=10 连续增计数模式,TPS=111 预分频为128
								;TENABLE=1 定时器计数使能, TCLKS=00 内部时钟
								;TECMPR=1 定时器3比较使能, SELT3PR=0  
		CLRC	INTM			;开总中断
		RET
;(5)定时器3中断程序
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					;跳到相应的中断服务子程序
T3GP_ISR:						;通用定时器3中断人口
		LDP		#DP_EVB	
		SPLK		#0,T3CNT
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
;(6)假中断程序
PHANTOM 	
		KICK_DOG				;复位看门狗
		RET
		END

⌨️ 快捷键说明

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