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

📄 sp_lib.lst

📁 凌阳十六位单片机的实验详细说明及其相对应的源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
                            	F_Key_Scan_ServiceLoop_2:
                            		
                            		
00008DD0 11 93 01 70        			r1 = [P_IOA_Buffer];			// PortA.7 low(scan line +Vcc)
00008DD2 09 B3 7F FF        			r1 &= 0xFF7F;		
00008DD4 19 D3 01 70        			[P_IOA_Buffer] = r1;
                            			
00008DD6 11 93 00 70        	     	r1 = [P_IOA_Data];			// get key data from IOA   
                            	    	//r1 = [P_IOB_Data];			// get key data from IOB
00008DD8 4F B2              	    	r1 &= 0x000F;					//
00008DD9 01 95              		    r2 = r1; 						// key from +Vcc
00008DDA 0A 87 FF FF        	    	r3 = r2 xor 0xffff;				// Be a +Vcc mask
                            	    
                            	    	// delay here
00008DDC 00 EE              		    nop;
00008DDD 00 EE              	    	nop;
00008DDE 00 EE              	    	nop;
                            		    
00008DDF 11 93 01 70        		 	r1 = [P_IOA_Buffer];			// PortA.7 high(scan line)
00008DE1 09 A3 80 00        			r1 |= 0x0080;					//
00008DE3 19 D3 01 70        			[P_IOA_Buffer] = r1;			//	
                            			   
00008DE5 11 93 00 70        			r1 = [P_IOA_Data];				//
                            			//r1 = [P_IOB_Data];			// get key data from IOB
00008DE7 4F B2              			r1 &= 0x000F;					//
00008DE8 02 83              			r1 ^= r2;						// possible bits by scan line
00008DE9 03 B3              			r1 &= r3;						// do +Vcc mask   
                            			
00008DEA 59 93              			r1 = r1 lsl 4;					//
00008DEB 02 A3              			r1 |= r2;						//
                            	    	//r2 = r2 lsl 4;				//
                            			//r1 |= r2;						//	    	
                            			    
00008DEC 09 B3 FF 00        	        r1 = r1 and 0xFF;				// mask bit[0..7]
                            	        
00008DEE 12 95 C5 00        	        r2 = [R_DebounceReg];			//
00008DF0 19 D3 C5 00        	        [R_DebounceReg] = r1;			//
00008DF2 12 45 C5 00        	        cmp r2,[R_DebounceReg];			//
00008DF4 04 5E              	        je	L_KS_StableTwoSample_2;		//
                            	        
00008DF5 48 92              	        r1 = C_DebounceCnt;				//debounce time setting
00008DF6 19 D3 C6 00        	        [R_DebounceCnt] = r1;			//
00008DF8 90 9A              	        retf;							//
                            	        
                            	L_KS_StableTwoSample_2:
00008DF9 11 93 C6 00        			r1 = [R_DebounceCnt];			//
00008DFB 01 5E              			jz	L_KS_StableOverDebounce_2;	//
00008DFC 90 9A              			retf;
                            		
                            	L_KS_StableOverDebounce_2:        
00008DFD 19 D3 C6 00        			[R_DebounceCnt] = r1;			//
00008DFF 12 95 C5 00        			r2 = [R_DebounceReg];			//
00008E01 11 93 C7 00        			r1 = [R_KeyBuf];				//
00008E03 1A D5 C7 00        			[R_KeyBuf] = r2;				//
00008E05 09 83 FF 00        			r1 = r1 xor 0x00ff;				//
00008E07 11 B3 C7 00        			r1 = r1 and [R_KeyBuf];			//
00008E09 09 B3 FF 00        			r1 = r1 and 0x00ff;				//
00008E0B 11 A3 C8 00        			r1 = r1 or [R_KeyStrobe];		//
00008E0D 19 D3 C8 00        			[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
00008E0F 90 9A              			retf;
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: debounce counter down count
                            	//////////////////////////////////////////////////////////////////
                            	F_Key_DebounceCnt_Down:
00008E10 11 93 C6 00        			r1 = [R_DebounceCnt];			// Debounce subroutine for F_IO_Key_Scan:
00008E12 03 5E              			jz	L_DebounceCntZero;			// stop count if zero
00008E13 41 22              			r1 -= 0x0001;					//
00008E14 19 D3 C6 00        			[R_DebounceCnt] = r1;			//
                            	L_DebounceCntZero:						//
00008E16 90 9A              			retf;  							//	
                            	
                            	
                            	//****************************************************************
                            	// Function: Get Keycode for I/O Port                                 
                            	// Destory register: r1, r2                          
                            	//****************************************************************
                            	_SP_GetCh:					
                            	F_SP_GetCh:
                            			//push	BP,BP to [SP];
                            	  		//BP = SP + 1;
                            			  
00008E17 11 93 C8 00        			r1 = [R_KeyStrobe];				// Get Key code
00008E19 40 94              	        r2 = 0x0000;					// Clear KeyStrobe for next key	
00008E1A 1A D5 C8 00        	        [R_KeyStrobe] = r2;				//
                            	        //pop		BP,BP from [SP];
00008E1C 90 9A              	        retf;
                            	
                            	
                            	////////////////////////////////////////////////////////////////// 
                            	// I/O APIs
                            	//////////////////////////////////////////////////////////////////   
                            	//--------------------------------------------------------------------
                            	//-- Procedure: _SP_Init_IOA
                            	//-- Syntax   : SP_Init_IOA(Dir,Data,Attrib)
                            	//-- Description: Initialize IOA setting
                            	//-- Parameter:
                            	//--	Dir     --> P_IOA_Dir,
                            	//--    Data    --> P_IOA_Data,
                            	//--    Attrib  --> P_IOA_Attrib
                            	//-- Return:
                            	//--	None
                            	//-------------------------------------------------------------------- 
                            	_SP_Init_IOA: .PROC
00008E1D 88 DA              			PUSH BP,BP TO [SP];
00008E1E 08 0B 01 00        	        BP = SP + 1;
00008E20 88 D2              			PUSH R1,R1 TO [SP];
00008E21 03 92              			R1 = [BP+3];						// Port direction
00008E22 19 D3 02 70        			[P_IOA_Dir] = R1;
00008E24 04 92              			R1 = [BP+4];
00008E25 19 D3 00 70        			[P_IOA_Data] = R1;
00008E27 05 92              			R1 = [BP+5];
00008E28 19 D3 03 70        			[P_IOA_Attrib] = R1;
                            			
00008E2A 88 90              			POP R1,R1 FROM [SP];
00008E2B 88 98              	        POP BP,BP FROM [SP];
00008E2C 90 9A              	        RETF;
                            			.ENDP
                            	
                            	////////////////////////////////////////////////////////////////// 
                            	// SP_Inti_IOB
                            	//////////////////////////////////////////////////////////////////    
                            	//--------------------------------------------------------------------
                            	//-- Procedure: _SP_Init_IOB
                            	//-- Syntax   : SP_Init_IOB(Dir,Data,Attrib)
                            	//-- Description: Initialize IOB setting
                            	//-- Parameter:
                            	//--	Dir     --> P_IOB_Dir,
                            	//--    Data    --> P_IOB_Data,
                            	//--    Attrib  --> P_IOB_Attrib
                            	//-- Return:
                            	//--	None
                            	//-------------------------------------------------------------------- 
                            	_SP_Init_IOB: .PROC
00008E2D 88 DA              			PUSH BP,BP TO [SP];
00008E2E 08 0B 01 00        	        BP = SP + 1;
00008E30 88 D2              			PUSH R1,R1 TO [SP];
00008E31 03 92              			R1 = [BP+3];						// Port direction
00008E32 19 D3 07 70        			[P_IOB_Dir] = R1;
00008E34 04 92              			R1 = [BP+4];
00008E35 19 D3 05 70        			[P_IOB_Data] = R1;
00008E37 05 92              			R1 = [BP+5];
00008E38 19 D3 08 70        			[P_IOB_Attrib] = R1;
                            			
00008E3A 88 90              			POP R1,R1 FROM [SP];
00008E3B 88 98              	        POP BP,BP FROM [SP];
00008E3C 90 9A              	        RETF;
                            			.ENDP
                            	
                            	//--------------------------------------------------------------------
                            	//-- Procedure: _SP_Import
                            	//-- Syntax   : SP_Import(Port Number,Data Buffer Pointer)
                            	//-- Description: Import number from IO and save to a memory location
                            	//-- Parameter:
                            	//--	Port Number         --> P_IOB_Dir,
                            	//--    Data Buffer Pointer --> P_IOB_Data,
                            	//-- Return:
                            	//--	None
                            	//-------------------------------------------------------------------- 
                            	
                            	_SP_Import: .PROC
00008E3D 88 DA              	        PUSH BP,BP TO [SP];
00008E3E 08 0B 01 00        	        BP = SP + 1;
00008E40 90 D4              			PUSH R1,R2 TO [SP];
00008E41 03 92              			R1 = [BP+3]; 						// Port Number
00008E42 04 94              			R2 = [BP+4]; 						// Data Buffer Pointer
00008E43 C1 92              			R1 = [R1] ;
00008E44 C2 D2              			[R2] = R1 ;
00008E45 90 90              			POP R1,R2 FROM [SP];
00008E46 88 98              	        POP BP,BP FROM [SP];
00008E47 90 9A              	        RETF;
                            			.ENDP
                            	//--------------------------------------------------------------------
                            	//-- Procedure: _SP_Export
                            	//-- Syntax   : SP_Export(Port Number,value)
                            	//-- Description: Export value to I/O
                            	//-- Parameter:
                            	//--	Port Number         --> Port_IOA_Data,Port_IOB_Data
                            	//--    value
                            	//-- Return:
                            	//--	None
                            	//-------------------------------------------------------------------- 
                            	_SP_Export: .PROC
00008E48 88 DA              	        PUSH BP,BP TO [SP];
00008E49 08 0B 01 00        	        BP = SP + 1;
00008E4B 90 D4              			PUSH R1,R2 TO [SP];
00008E4C 03 92              			R1 = [BP+3]; 						// Port Number
00008E4D 04 94              			R2 = [BP+4]; 						// Value
00008E4E C1 D4              			[R1] = R2 ;
00008E4F 90 90              			POP R1,R2 FROM [SP];
00008E50 88 98              	        POP BP,BP FROM [SP];
00008E51 90 9A              	        RETF;        
                            	 		.ENDP
                            			 
                            	
                            	//========================================================================================        
                            	// End of sp_lib.asm
                            	//========================================================================================
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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