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

📄 dds.asm

📁 2005年全国大学生电子设计竞赛论文集
💻 ASM
字号:
.include hardware.inc
.DEFINE		P_ADC_MUX_Ctrl		0x702b 
.DEFINE		P_ADC_MUX_DATA		0x702C
.define		FQ_UD_Pin    	0000000000100000b;		//IO AOP       RS   IOA5
.define		Din_Pin   	    0000000000000001b;		//IO EP        E    IOA7
.define		CLK_Pin         0000000001000000b;		//IO as RWP    RW   IOA6
.define		RST_Pin         0000000000010000b;		//IO as RWP    RW   IOA6



.define	DDS_Data		0x7005;		//P_IOB_Data
.define	DDS_Buffer		0x7006;		//P_IOB_Buffer
.define	DDS_Dir		    0x7007;		//P_IOB_Dir
.define	DDS_Attrib		0x7008;		//P_IOB_Attrib

.external _DDS_data1,_DDS_data2,_DDS_data3,_DDS_1,_DDS_2,_DDS_3,_DDS_4,_DDS_5,_DDS_6,_i,_v,_ctrlVx,_ctrlVy
.external _j,_tempv
.external _n,_val,_flow,_mo,_modify
.code
//=========================================================================================
//
//=========================================================================================
.PUBLIC _initDDS1;						
_initDDS1:         .proc       
        r1=[DDS_Dir]    
        r1|=Din_Pin
		r1|=CLK_Pin
        r1|=FQ_UD_Pin
       // r1|=RST_Pin
		[DDS_Dir]=r1
		r1=[DDS_Attrib]					
        r1|=FQ_UD_Pin
        r1|=Din_Pin
		r1|=CLK_Pin
        //r1|=RST_Pin
	    [DDS_Attrib]=r1	
		R1 = 0x0001	            //允许A/D
		[P_ADC_Ctrl] = R1 		 



        retf
        .endp
//=========================================================================================
//
//=========================================================================================
.PUBLIC _initDDS2;						
_initDDS2:         .proc       
        r1=0xffff    
		[DDS_Dir]=r1
	    [DDS_Attrib]=r1	
		R1 = 0x0001	            //允许A/D
		[P_ADC_Ctrl] = R1 		 
        retf
        .endp

//=========================================================================================  
//
//=========================================================================================
.PUBLIC _DDS1						
_DDS1:         .proc                
dds:
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0040
        [DDS_Data]=r3  //up    "10"   
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15

	    r3=[DDS_Data]
		r3|=FQ_UD_Pin
        [DDS_Data]=r3   //使能 
        nop
        nop
        nop
        nop
        nop
        nop
	    r3=[DDS_Data]
	r1=FQ_UD_Pin
		r1^=0xffff
		r3&=r1
        [DDS_Data]=r3   //结束使能         [DDS_Data]=r3   //结束使能 

        r3=[DDS_Data]		
        r3&=0xfffe
        [DDS_Data]=r3  //down  "00"  15

        r1=0
loop0:        
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0040
        [DDS_Data]=r3  //up    "10"   
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15
        r1+=1
        cmp r1,3
        jnz loop0

        
	    r3=[DDS_Data]
		r3|=FQ_UD_Pin
        [DDS_Data]=r3   //使能 
        nop
        nop
        nop
        nop
        nop
        nop
	    r3=[DDS_Data]
	    r1=FQ_UD_Pin
		r1^=0xffff
		r3&=r1
        [DDS_Data]=r3   //结束使能         [DDS_Data]=r3   //结束使能 

        r2=[_DDS_data1]
        r1=0
loop1:
        r3=[DDS_Data]		
        r3&=0xfffe
        r4=r2
        r4&=0x0001
        r3|=r4
        [DDS_Data]=r3  //down  "00"  15

        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0040
        [DDS_Data]=r3  //up    "10"   
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15

//        nop
//        nop
        r2 = r2 lsr 1
        r1+=1
        cmp r1,16
        jnz loop1

	    r2=[_DDS_data2]
loop2:
        r3=[DDS_Data]		
        r3&=0xfffe
        r4=r2
        r4&=0x0001
        r3|=r4
        [DDS_Data]=r3  //down  "00"  15

        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0040
        [DDS_Data]=r3  //up    "10"   
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15
        r2 = r2 lsr 1
        r1+=1
        cmp r1,32
        jnz loop2

	    r2=[_DDS_data3]
loop3:
        r3=[DDS_Data]		
        r3&=0xfffe
        r4=r2
        r4&=0x0001
        r3|=r4
        [DDS_Data]=r3  //down  "00"  15

        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0040
        [DDS_Data]=r3  //up    "10"   
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        r3=[DDS_Data]		
		r3&=0xffbf
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15
        r2 = r2 lsr 1

        r1+=1
        cmp r1,40
        jnz loop3




	    r3=[DDS_Data]
		r3|=FQ_UD_Pin
        [DDS_Data]=r3   //使能 
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
//	    r3=[DDS_Data]
//	r1=FQ_UD_Pin
//		r1^=0xffff
//		r3&=r1
//        [DDS_Data]=r3   //结束使能 
        //goto dds
        retf
        //goto wrctrl
        .endp

//=========================================================================================
//
//=========================================================================================
.PUBLIC _DDS2						
_DDS2:         .proc                
dds2:
        //call  _delay10ms
        r3=[DDS_Data]		
		r3&=0x7fff
		r3|=0x8000
        [DDS_Data]=r3  //up    "10" 
//        call _delay10ms  
        r3=[DDS_Data]		
		r3&=0x7fff
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15
	    r3=[DDS_Data]
		r1=FQ_UD_Pin
		r1^=0xffff
		r3&=r1
        [DDS_Data]=r3   //结束使能 
        r1=0
        r3=[DDS_Data]		
		r3&=0xbfff
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15
        r2=_DDS_1
loop:
        r3=[DDS_Data]		
        r3&=0xff00
        r4=[r2]
        r4&=0x00ff
        r3|=r4
        [DDS_Data]=r3  //down  "00"  15
        r3=[DDS_Data]		
		r3&=0xbfff
		r3|=0x4000
        [DDS_Data]=r3  //up    "10"   
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        r3=[DDS_Data]		
		r3&=0xbfff
		r3|=0x0000
        [DDS_Data]=r3  //down  "00"  15

//        nop
//        nop
	    r2+=1
        r1+=1
        cmp r1,5
        jnz loop
	    r3=[DDS_Data]
		r3|=FQ_UD_Pin
        [DDS_Data]=r3   //使能 
        nop
        nop
        nop
        nop
        retf
        .endp
//=========================================================================================
//
//=========================================================================================        
.public		F_clearwd
.public		_clearwd
_clearwd:
F_clearwd:   .proc
    r1=0x0001;
    [P_Watchdog_Clear]=r1
    retf
	.endp
        
//=========================================================================================
//
//=========================================================================================        
.public _delay10ms
_delay10ms:
       r1=0x0000
       delay3:
       r2=0x0000
       loop4:
       r2+=1
       cmp r2,21
       jb loop4
       r1+=1
       cmp r1,5000
       jb delay3
       retf
       
       
//=========================================================================================
//
//=========================================================================================
.PUBLIC _Sample
_Sample:  
 
    R1 = 0x0001                  //选择通道LINE_IN为IOA0
	[P_ADC_MUX_Ctrl] = R1
    R1 = 0x0003                 //允许A/D转换
    [P_ADC_Ctrl] = R1 		 
    R1 = [P_ADC_MUX_DATA]          //是,则读出[P_ADC_MUX_DATA]转换结果
    r3=16
    r2=0
sample:
L_AD: 	 
    R1 = [P_ADC_MUX_Ctrl]        //读寄存器[P_ADC_MUX_Ctrl]的B15位
     TEST R1,0x8000               //判断是否转换完毕
    JZ L_AD                      //否,继续转换
    R1 = [P_ADC_MUX_DATA]          //是,则读出[P_ADC_MUX_DATA]转换结果
    r1 =r1 lsr 4
    r1 =r1 lsr 2
    r2+=r1
    r3-=1
    jnz sample
    r2 =r2 lsr 4
    cmp r2,0x0050
    ja bigger
    r2=0
    jmp wr
bigger:
    [_mo]=r2  
    call _modify  
    r2=[_mo]
wr:
    r1=0xaaaa
    r3=0x7555
    [r3]=r1
    r1=0x5533
    [r3]=r1
    r1=[_i]
    r1+=0xf000
    [r1]=r2
    R1 = 0x0001
    [P_Watchdog_Clear]=r1
  //  JMP L_AD;
    retf

//=========================================================================================  
//
//=========================================================================================
.public _sendctrlv   
_sendctrlv:
   
   r1=PreW_Table
   r1+=_i
   r1=[r1]
   r1=r1 LSL 4           //将AD值移到低10位
   r1=r1 LSL 2
   [P_DAC1]=R1;  
   retf;
//=========================================================================================
//
//=========================================================================================   
.public _initdisp
_initdisp:
        r1=0x0060
        [P_SystemClock]=r1      //系统时钟
        retf 
        
//=========================================================================================
//
//========================================================================================= 
.public _getvalue 
_getvalue:
   r1=0xf000
   r1+=[_j]
   r1=[r1]
   r2=_tempv
   [r2]=r1
   retf   
//=========================================================================================
//
//=========================================================================================
.public _getvalue1 
_getvalue1:
   r1=0xf000
   r1+=[_n]
   r1=[r1]
   r2=_val
   [r2]=r1
   retf        
//=========================================================================================
//
//=========================================================================================
.public _sendxy   
_sendxy:
   r1=[_ctrlVx]
   r1=r1 LSL 4           //将AD值移到低10位
   r1=r1 LSL 2
   r2=[_ctrlVy]
   r2=r2 LSL 4           //将AD值移到低10位
   r2=r2 LSL 2
   [P_DAC1]=R1;  
   [P_DAC2]=R2;  
   retf; 
//=========================================================================================
//
//========================================================================================= 
.public _clearflash
_clearflash:
      r3=0xf000
loopflash:    
    r1=0xaaaa
     r2=0x7555
     [r2]=r1
     r1=0x5511
     [r2]=r1 
     r1=0xb980
     [r3] = r1 
     r3+=0x0100
     cmp r3,0xfc00
     jnz loopflash
        retf; 
   
 
     
 PreW_Table: 
 .DW  0x0011,0x0012,0x0014,0x0018
 .DW  0x0021,0x0022,0x0024,0x0028
 .DW  0x0041,0x0042,0x0044,0x0048
 .DW  0x0081,0x0082,0x0084,0x0088
  

⌨️ 快捷键说明

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