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

📄 ad_line.asm

📁 凌阳单片机35开发板的测试程序。内附PDF版的详细测试说明。对初次学习或使用凌阳单片机的人员非常有用。
💻 ASM
字号:
//***********************************************************
// Note:通过模拟量输入口LINE_IN输入电压值,以8K的采样率经A/D
//转换后送给IOB口控制LED点亮,同时可以根据LED的点亮来了解转换
//的数据
//*************************************************************									

// 时钟源为Fosc/2,采样率为8KHz
.define     TIMER_DATA_FOR_8KHZ   0xFA23  

.define		P_IOB_DATA  	0x7005 
.define		P_IOB_DIR   	0x7007 
.define		P_IOB_ATTRI		0x7008 
.define		P_INT_Ctrl		0x7010 
.define		P_INT_CLEAR		0x7011 

.define		P_TimerA_Ctrl	0x700b 
.define		P_TimerA_Data	0x700a 
.define		P_ADC_Ctrl		0x7015 
.define		P_ADC			0x7014 
.define		P_ADC_MUX_Ctrl	0x702b 
.define		P_ADC_MUX_DATA	0x702C
.define		P_DAC_Ctrl		0x702A 


.define		P_DAC1			0x7017
.define		P_DAC2			0x7016
.ISRAM
.VAR RESULT
.VAR TIME            //Line in select
.var value           //vol 0 or ffc
.CODE
.public _AD_Line;
_AD_Line:  .proc
       
        R1=0x0001
        [TIME]=R1//选择LINE0
		r1=0x00f0
		[value]=r1	//端口送入的值
		r1=0xffff 
		[P_IOB_ATTRI]=r1 
		[P_IOB_DIR]=r1 
		r1=0x0000
		[P_IOB_DATA]=r1;
		
	    
		   		
		R1 = 0x0001	            //允许A/D
		[P_ADC_Ctrl] = R1 		 
	    r1 = 0x00A0;
	    [P_DAC_Ctrl] = r1;
		call _InitAD1
		test r1,0x0001;
		jz fail;	
		
		r1=0xffff
		[P_IOB_DATA]=r1;
   		R1=0x0001
        [TIME]=R1
		r1=0xff00
		[value]=r1	
		
		call _InitAD2
		test r1,0x0001;
		jz fail;		
		r1 = 0x0001  //success
		
	    retf;
		
fail:	r1 = 0x0000   //fail
        // fiq on
        // irq on
	    retf;
	
.endp
		
		
.public _InitAD1
_InitAD1:
       
       R2=[TIME]							
	   test r2,0x0080
	   jNZ NEXT1
	   [P_ADC_MUX_Ctrl]=R2
	   R2=R2 LSL 1
	   [TIME]=R2
	   NOP
	   NOP
      r1=[P_ADC_MUX_DATA]
       
 _AD1:
 	 
       r1=[P_ADC_MUX_Ctrl] 
       test r1,0x8000
       jz _AD1
     
       
   
       r1=[P_ADC_MUX_DATA]
       
       CMP R1,[value] 
       jbe  _InitAD1
      
       r1 = 0;
       retf;
        			      // 调用ADC初始化程序
NEXT1:
		//成功
		r1 = 0x0001;
       RETF
       
       
.public _InitAD2
_InitAD2:
       
       R2 = [TIME]							
	   test r2,0x0080
	   jNZ NEXT2
	   [P_ADC_MUX_Ctrl] = R2
	   R2=R2 LSL 1
	   [TIME]=R2
	   NOP
	   NOP
       r1=[P_ADC_MUX_DATA]

 _AD2:  
       r1=[P_ADC_MUX_Ctrl] 
       test r1,0x8000
       jz _AD2   
       
   
       r1 = [P_ADC_MUX_DATA]
       
       CMP R1,[value] 
       jae  _InitAD2
       //shibai
       r1 = 0;
       retf;
        			      // 调用ADC初始化程序
NEXT2:
		//成功
		r1 = 0x0001;
       RETF
       
delay://1ms
	push r1,r2 to [sp]
    r1 = 1
loop_out:
    r2 = 0x00ff
loop_in:
    r2 -=1
    cmp r2,0x0000
    jnz loop_in;
    r1 -= 1;
    cmp r1,0x0000
    jnz loop_out;
    pop r1,r2 from [sp]
   retf  
   
   
   
 

⌨️ 快捷键说明

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