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

📄 adda7226.asm

📁 dsp2407源程序
💻 ASM
字号:

 ;此程序为通过从DACO脚输出三角波   地址为0300H
 ;通过ADINO脚输入
 ;通过da转换输出DAC3脚             地址为0303H
 ;比较两个输出波形。通过EVA模块,定时器1  


			.include  	"F2407REGS.H" 	;引用头部文件
			.def      	_c_int0     
			
;(1)建立中断向量表
			.sect	".vectors"				;定义主向量段
RSVECT		    B    _c_int0				;PM 0	复位向量  			1
INT1	  		B    GISR1			;PM 2	中断优先级1			4
INT2	  		B    PHANTOM			;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    GISR6			;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			;保留向量地址偏移量  0000h
			B	PHANTOM			;保留向量地址偏移量  0001h
  			B	PHANTOM			;保留向量地址偏移量  0002h
			B	PHANTOM			;保留向量地址偏移量  0003h
			B	ADCINT_ISR			;保留向量地址偏移量  0004h  ADC中断
			B	PHANTOM			;保留向量地址偏移量  0005h
			

			.bss DAC0_VAL,1
			.bss DAC1_VAL,1
			.bss DAC2_VAL,1
			.bss DAC3_VAL,1 
;(2)主程序:
        	.text
_c_int0    
		SETC 	INTM
		CLRC 	SXM
		CLRC 	OVM
		CLRC 	CNF	
		LDP 	#0E0H
		SPLK	#81FEH,SCSR1				;时钟4倍频,CLKIN=6 M,CLKOUT=24 M 
		SPLK	#0E8h,WDCR				;关看门狗
		LDP	#0
		SPLK	#0022h,IMR				;允许INT1和INT2中断
		SPLK	#0FFFFh,IFR				;清所有中断标志

               
     	CALL	ADINIT          			;初始化ADC程序
	    clrc  	INTM					;开总中断
        CALL	AD             			        ;启动模数转换程序
        LDP #0000h ;Set date page pointer to 0 
        LAR AR0,#7FH
        MAR *,AR0   
        SPLK #1FH,60H
        SPLK #3FH,61H
        SPLK #5FH,62H
        SPLK #7FH,63H
        OUT 60H,0300H
        OUT 61H,0301H
        OUT 62H,0302H
        OUT 63H,0303H




P0:     LACC #0
P1:      LDP #0 
        ADD #01h
        SACL DAC0_VAL
        OUT DAC0_VAL,0300h
        
        BANZ P1
        MAR *,AR0
        LAR AR0,#7eH
        LACC #07Fh        
P3:     SUB #01h
        SACL DAC0_VAL
        OUT DAC0_VAL,0300h           
        BANZ P3
        LAR AR0,#7FH
        B P0

;(4)ADC初始化程序
ADINIT:
      LDP	#T1CNT>>7      				;设置通用定时器4
      SPLK	#0000H,T1CNT
      SPLK	#170CH,T1CON 
      SPLK	#005H,T1PR
      SPLK	#2100H,GPTCONA
      SPLK	#0FFFFH,EVAIFRA
      SPLK	#0000H,EVAIMRA 	
      LDP	#ADCCTRL1>>7
      SPLK  #4000H,ADCCTRL1
      NOP 
      NOP
      SPLK	#0030H,ADCCTRL1  			;设置ADC控制寄存器
      SPLK	#0504H,ADCCTRL2  	
      SPLK	#0000H,MAXCONV 		                ;1通道
      SPLK	#0000H,CHSELSEQ1
      RET

;(7)启动模数转换程序
AD:
      LDP	#T1CON>>7
      LACL	T1CON
      OR	#40H            			;启动定时器4
      SACL	T1CON
      RET

;(8)中断程序6
GISR6: NOP
GISR1:	SETC INTM 
        LDP #0
	    SACL 68H    ;保护ACC累加器的值
		
	;优先级INT1中断子程序入口;保护现场
    	LDP	#PIVR>>7
    	LACC	PIVR,1					;读取外设中断向量寄存器(PIVR),并左移一位
         ADD	#PVECTORS			;加上外设中断入口地址
	     BACC						;跳到相应的中断服务子程序
ADCINT_ISR:

                                                         ;Set date page pointer to 0
      	;LAR	AR0,#0 
      	LAR	AR2,#RESULT0
      	MAR	*,AR2
ADC1:	LACC	*,8              ;DA是8位的
        LDP #0000h ;Set date page pointer to 0
        SACH DAC1_VAL
        OUT DAC1_VAL,0303h     
      	LDP	#ADCCTRL2>>7
      	LACL	ADCCTRL2
      	OR	#4000H  ;复位 SEQ1
      	AND	#0FFDFH ;清 INT FLAG SEQ1
      	SACL	ADCCTRL2  
      	
GISR1_RET:	;中断返回出口			;恢复现场
	    LDP	    #T1CNT>>7  			;设置通用定时器4
        ;SPLK	#0000H,T4CNT
        LACL   EVAIFRA
        SACL   EVAIFRA         								                                        
        LDP #0
        LACC 68H
    	CLRC	INTM					;开总中断,因为一进中断就自动关闭了总中断
	    MAR *,AR0
	    RET
;(9)假中断程序
PHANTOM 	
         KICK_DOG						;复位看门狗
		RET
     	END

⌨️ 快捷键说明

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