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

📄 evb061test.lst

📁 凌阳单片机的自检程序 包括io检测ad检测睡眠检测等
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     <      	.EXTERNAL 	F_SP_Set_P_ADC_Ctrl
                     <      	
                     <      		
                     <      	
                     <      	//--------------------------------------------
                     <      	SACM_MACRO1: 	.MACRO
                     <      		
                     <      		.ENDM
                     <      	
                     <      	SACM_MACRO2:	.MACRO
                     <      		
                     <      		.ENDM
                     <      	
                     <      	
                     <      	
                     <      	
                     <      	//.define PC_Play_Enable_A2000		1    	// Enable the PC-Play function for SACM-A2000 module
                     <      	//.define PC_Play_Enable_S480		1    	// Enable the PC-Play function for SACM-S480 module
                     <      	//.define PC_Play_Enable_S240		1    	// Enable the PC-Play function for SACM-S240 module    
                     <      	//.define PC_Play_Enable_MS01		1    	// Enable the PC-Play function for SACM-MS01 module
                     <      	
                     <      	
                     <      	
                     <      	//========================================================================================        
                     <      	// End of hardware.inc
                     <      	//========================================================================================
00008D43                    	.code
                            	//=====================================//
                            	//函数名称:unsigned IOTest()
                            	//出口参数:1.测试成功0、测试失败
                            	//无入口参数
                            	//硬件连接:A口B口短接
                            	//=====================================//
                            	
                            	.public _IOTest;
                            	_IOTest:    .proc
                            	
                            	InitPortAinput_Boutput:
00008D43 40 92              	    r1=0x0000                 //初始化A口为输入端
00008D44 19 D3 02 70        		[P_IOA_Dir]=r1
00008D46 19 D3 03 70        		[P_IOA_Attrib]=r1
00008D48 19 D3 00 70        		[P_IOA_Data]=r1
                            		                          //初始化B口为输出端
00008D4A 09 93 FF FF        		r1=0xffff                 
00008D4C 19 D3 07 70        		[P_IOB_Dir]=r1
00008D4E 19 D3 08 70        		[P_IOB_Attrib]=r1
00008D50 40 92              		r1=0x0000
00008D51 19 D3 05 70        		[P_IOB_Data]=r1
                            	
                            	WritePortB:
00008D53 09 93 FF FF        	    r1 = Write_Port_Data;    //向B口写数据0xaaaa   
                            	LoopWrite:      
00008D55 41 22              	    r1 = r1-1;
00008D56 0D 5E              	    jz  InitPortBinput_Aoutput;//
00008D57 19 D3 05 70        	    [P_IOB_Data]=r1
                            	ReadPortA: 
                            	                             //使数据稳定   
00008D59 00 EE              	    nop;
00008D5A 00 EE              	    nop;      
00008D5B 12 95 00 70        	    r2 = [P_IOA_Data];       //读A口数据    
00008D5D 02 43              	    cmp r1,r2;               //比较读写数据是否相同
00008D5E 4A 5E              	    je  LoopWrite;
                            	    //je  InitPortBinput_Aoutput;
                            	   
00008D5F 00 EE              	    nop;
00008D60 40 92              	    r1 = 0x0000;             //测试失败
00008D61 00 EE              	    nop;
00008D62 00 EE              	    nop;
00008D63 90 9A              	    retf;
                            	    
                            	InitPortBinput_Aoutput:
                            	   
00008D64 40 92              	     r1=0x0000                 //初始化B口为输入
00008D65 19 D3 07 70        		[P_IOB_Dir]=r1
00008D67 19 D3 08 70        		[P_IOB_Attrib]=r1
00008D69 19 D3 05 70        		[P_IOB_Data]=r1
                            		                          //初始化A口为输出
00008D6B 09 93 FF FF        		r1=0xffff                 
00008D6D 19 D3 02 70        		[P_IOA_Dir]=r1
00008D6F 19 D3 03 70        		[P_IOA_Attrib]=r1
00008D71 40 92              		r1=0x0000
00008D72 19 D3 00 70        		[P_IOA_Data]=r1
                            		
                            	WritePortA:                  //向A口写数据
00008D74 09 93 FF FF        	    r1 = Write_Port_Data
                            	LoopWrite0:   
00008D76 41 22              	    r1 = r1 - 1;
00008D77 0A 5E              	    jz  TestSuc;    
00008D78 19 D3 00 70        	    [P_IOA_Data]=r1    
                            	ReadPortB:
                            	                             //使数据稳定
                            	 
00008D7A 00 EE              	    nop;
00008D7B 00 EE              	    nop;    
00008D7C 12 95 05 70        	    r2 = [P_IOB_Data];       //读B口数据    
00008D7E 02 43              	    cmp r1,r2;               //比较读写数据是否相同
00008D7F 4A 5E              	    je  LoopWrite0;
                            	
00008D80 40 92              	    r1 = 0x0000;             //测试失败
00008D81 90 9A              	    retf;
                            	 TestSuc:
00008D82 41 92              	    r1 = 0x0001;
00008D83 90 9A              	    retf;
                            	    .endp
                            	//===========================================//
                            	//函数名称:unsigned KeyWakeUp()
                            	//出口参数:1.测试成功0、测试失败
                            	//无入口参数
                            	//硬件连接:A口B口短接
                            	//=====================================//
                            	.public _KeyWakeUp;
                            	_KeyWakeUp:    .proc
                            	.define P_IOA_RL   0x7004
                            	//InitPortA_input_B_output0:
00008D84 40 92              	    r1=0x0000                 //初始化A口为输入端
00008D85 19 D3 02 70        		[P_IOA_Dir]=r1
00008D87 19 D3 03 70        		[P_IOA_Attrib]=r1
00008D89 19 D3 00 70        		[P_IOA_Data]=r1
                            	
                            	
                            		                          //初始化B口为输出端
00008D8B 09 93 FF FF        		r1=0xffff                 
00008D8D 19 D3 07 70        		[P_IOB_Dir]=r1
00008D8F 19 D3 08 70        		[P_IOB_Attrib]=r1
00008D91 40 92              		r1=0x0000
00008D92 19 D3 05 70        		[P_IOB_Data]=r1
00008D94 11 93 10 70        	    r1 = [P_INT_Ctrl]
00008D96 44 A2              	    r1 |= 0x0004                //中断初始化
00008D97 19 D3 10 70        	    [P_INT_Ctrl] = r1;  
00008D99 11 93 04 70        	    r1=[P_IOA_RL] 
00008D9B 41 F1              	    INT IRQ                  //开中断   
00008D9C 57 92              	    r1=0x0017;               //on 32768   
00008D9D 19 D3 13 70        	    [P_SystemClock]=r1       //进入睡眠状态
                            	    
                            	   // R1 = 0x0001;				// Clear Watch Dog
                            	   //[P_Watchdog_Clear] = R1;
                            	    
00008D9F 40 92              	    r1 = 0x0000
00008DA0 19 D3 13 70        	    [P_SystemClock]=r1 
00008DA2 41 92              	    r1 = 0x0001;             //测试成功
00008DA3 90 9A              	    retf;
                            	.endp    
                            	//********************************//
                            	//键唤醒中断    
                            	//*******************************//
00008094                    	.text  
                            	.public _IRQ3
                            	_IRQ3:
00008094 A0 D8              	    push r1,r4 to [sp]
                            	  
00008095 09 93 80 00        	    r1=0x0080
00008097 11 C3 10 70        	    test r1,[P_INT_Ctrl]   //是否为键唤醒中断
00008099 04 5E              	    jz L_notKeyArouse      //否,退出中断程序
0000809A 09 93 80 00        	    r1=0x0080
0000809C 19 D3 11 70        	    [P_INT_Clear]=r1       //是,清中断 
                            	L_notKeyArouse: 
0000809E A0 90              	    pop r1,r4 from [sp] 
0000809F 98 9A              	    reti
                            	
                            	
                            	//==============================//
                            	// MIC测试部分
                            	//==============================//
00008DA4                    	.CODE
                            	_InitAD_DA: 
00008DA4 40 F1              			INT OFF;	
                            		
00008DA5 70 92              			R1 = 0x0030; 				// 时钟频率为CLKA的Fosc/2
00008DA6 19 D3 0B 70        			[P_TimerA_Ctrl] = R1;		//
00008DA8 09 93 23 FA        			R1 = TIMER_DATA_FOR_8KHZ; 	// 采样率为 8kHz
00008DAA 19 D3 0A 70        			[P_TimerA_Data] = R1;		//
                            			
00008DAC 55 92              			R1 = 0x0015;				// 设置AGC 
                            			//R1 = 0x0011				// 取消AGC 
00008DAD 19 D3 15 70        			[P_ADC_Ctrl] = R1;			// 采用自动方式、且通过MIC_IN通道输入,
                            			
                            			
00008DAF 09 93 A8 00        			R1 = 0x00A8;				//通过定时器A的溢出锁存数据,ADC为自动方式
00008DB1 19 D3 2A 70        			[P_DAC_Ctrl] = R1;			
00008DB3 09 93 00 10        			R1 = 0x1000;				//
00008DB5 19 D3 10 70        			[P_INT_Ctrl] = R1;			// 开中断IRQ1_TM
                            			
00008DB7 41 F1              			INT IRQ;
00008DB8 90 9A              			retf; 
                            	
                            	//主程序
                            	.PUBLIC _MICTEST	
                            	_MICTEST: .PROC 
00008DB9 40 F0 A4 8D        			call _InitAD_DA				// 调用AD 初始化子程序 
                            		.ENDP
                            	loop:
00008DBB 41 92              		R1 = 0x0001;				// Clear Watch Dog
00008DBC 19 D3 12 70        		[P_Watchdog_Clear] = R1;
00008DBE 44 EE              		jmp loop 
000080A0                    	.text
                            	.PUBLIC _IRQ1 
                            	_IRQ1:       
000080A0 88 D2              			push R1 to [SP]
                            		
000080A1 11 93 14 70        			R1 = [P_ADC] 
000080A3 19 D3 17 70        			[P_DAC1] = R1 
000080A5 19 D3 16 70        			[P_DAC2] = R1 
000080A7 09 93 00 10        			R1 = 0x1000 
000080A9 19 D3 11 70        			[P_INT_Clear] = R1 
000080AB 88 90              			pop R1 from [SP] 
000080AC 98 9A              			reti 
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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