ad_line.lst

来自「凌阳科技单片机系统开发板测试程序,可以参考应用。」· LST 代码 · 共 176 行

LST
176
字号
Sunplus u'nSP Assembler - Ver. 1.8.1
              Listing File Has Been Relocated
                            	//***********************************************************
                            	// 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
00000007                    	.ISRAM
00000007 00 00              	.VAR RESULT
00000008 00 00              	.VAR TIME            //Line in select
00000009 00 00              	.var value           //vol 0 or ffc
00008DCC                    	.CODE
                            	.public _AD_Line;
                            	_AD_Line:  .proc
                            	       
00008DCC 41 92              	        R1=0x0001
00008DCD C8 D3              	        [TIME]=R1//选择LINE0
00008DCE 09 93 F0 00        			r1=0x00f0
00008DD0 C9 D3              			[value]=r1	//端口送入的值
00008DD1 09 93 FF FF        			r1=0xffff 
00008DD3 19 D3 08 70        			[P_IOB_ATTRI]=r1 
00008DD5 19 D3 07 70        			[P_IOB_DIR]=r1 
00008DD7 40 92              			r1=0x0000
00008DD8 19 D3 05 70        			[P_IOB_DATA]=r1;
                            			
                            		    
                            			   		
00008DDA 41 92              			R1 = 0x0001	            //允许A/D
00008DDB 19 D3 15 70        			[P_ADC_Ctrl] = R1 		 
00008DDD 09 93 A0 00        		    r1 = 0x00A0;
00008DDF 19 D3 2A 70        		    [P_DAC_Ctrl] = r1;
00008DE1 40 F0 F6 8D        			call _InitAD1
00008DE3 41 C2              			test r1,0x0001;
00008DE4 0F 5E              			jz fail;	
                            			
00008DE5 09 93 FF FF        			r1=0xffff
00008DE7 19 D3 05 70        			[P_IOB_DATA]=r1;
00008DE9 41 92              	   		R1=0x0001
00008DEA C8 D3              	        [TIME]=R1
00008DEB 09 93 00 FF        			r1=0xff00
00008DED C9 D3              			[value]=r1	
                            			
00008DEE 40 F0 0F 8E        			call _InitAD2
00008DF0 41 C2              			test r1,0x0001;
00008DF1 02 5E              			jz fail;		
00008DF2 41 92              			r1 = 0x0001  //success
                            			
00008DF3 90 9A              		    retf;
                            			
00008DF4 40 92              	fail:	r1 = 0x0000   //fail
                            	        // fiq on
                            	        // irq on
00008DF5 90 9A              		    retf;
                            		
                            	.endp
                            			
                            			
                            	.public _InitAD1
                            	_InitAD1:
                            	       
00008DF6 C8 95              	       R2=[TIME]							
00008DF7 0A C5 80 00        		   test r2,0x0080
00008DF9 13 4E              		   jNZ NEXT1
00008DFA 1A D5 2B 70        		   [P_ADC_MUX_Ctrl]=R2
00008DFC 42 95              		   R2=R2 LSL 1
00008DFD C8 D5              		   [TIME]=R2
00008DFE 00 EE              		   NOP
00008DFF 00 EE              		   NOP
00008E00 11 93 2C 70        	      r1=[P_ADC_MUX_DATA]
                            	       
                            	 _AD1:
                            	 	 
00008E02 11 93 2B 70        	       r1=[P_ADC_MUX_Ctrl] 
00008E04 09 C3 00 80        	       test r1,0x8000
00008E06 45 5E              	       jz _AD1
                            	     
                            	       
                            	   
00008E07 11 93 2C 70        	       r1=[P_ADC_MUX_DATA]
                            	       
00008E09 C9 43              	       CMP R1,[value] 
00008E0A 55 8E              	       jbe  _InitAD1
                            	      
00008E0B 40 92              	       r1 = 0;
00008E0C 90 9A              	       retf;
                            	        			      // 调用ADC初始化程序
                            	NEXT1:
                            			//成功
00008E0D 41 92              			r1 = 0x0001;
00008E0E 90 9A              	       RETF
                            	       
                            	       
                            	.public _InitAD2
                            	_InitAD2:
                            	       
00008E0F C8 95              	       R2 = [TIME]							
00008E10 0A C5 80 00        		   test r2,0x0080
00008E12 13 4E              		   jNZ NEXT2
00008E13 1A D5 2B 70        		   [P_ADC_MUX_Ctrl] = R2
00008E15 42 95              		   R2=R2 LSL 1
00008E16 C8 D5              		   [TIME]=R2
00008E17 00 EE              		   NOP
00008E18 00 EE              		   NOP
00008E19 11 93 2C 70        	       r1=[P_ADC_MUX_DATA]
                            	
                            	 _AD2:  
00008E1B 11 93 2B 70        	       r1=[P_ADC_MUX_Ctrl] 
00008E1D 09 C3 00 80        	       test r1,0x8000
00008E1F 45 5E              	       jz _AD2   
                            	       
                            	   
00008E20 11 93 2C 70        	       r1 = [P_ADC_MUX_DATA]
                            	       
00008E22 C9 43              	       CMP R1,[value] 
00008E23 55 1E              	       jae  _InitAD2
                            	       //shibai
00008E24 40 92              	       r1 = 0;
00008E25 90 9A              	       retf;
                            	        			      // 调用ADC初始化程序
                            	NEXT2:
                            			//成功
00008E26 41 92              			r1 = 0x0001;
00008E27 90 9A              	       RETF
                            	       
                            	delay://1ms
00008E28 90 D4              		push r1,r2 to [sp]
00008E29 41 92              	    r1 = 1
                            	loop_out:
00008E2A 0A 95 FF 00        	    r2 = 0x00ff
                            	loop_in:
00008E2C 41 24              	    r2 -=1
00008E2D 40 44              	    cmp r2,0x0000
00008E2E 43 4E              	    jnz loop_in;
00008E2F 41 22              	    r1 -= 1;
00008E30 40 42              	    cmp r1,0x0000
00008E31 48 4E              	    jnz loop_out;
00008E32 90 90              	    pop r1,r2 from [sp]
00008E33 90 9A              	   retf  
                            	   
                            	   
                            	   
                            	 
0 error(s), 0 warning(s).











⌨️ 快捷键说明

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