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

📄 sp_lib.lst

📁 凌阳十六位单片机的实验详细说明及其相对应的源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
                            	F_Key_Scan_ServiceLoop_2:
                            		
                            		
00009460 11 93 01 70        			r1 = [P_IOA_Buffer];			// PortA.7 low(scan line +Vcc)
00009462 09 B3 7F FF        			r1 &= 0xFF7F;		
00009464 19 D3 01 70        			[P_IOA_Buffer] = r1;
                            			
00009466 11 93 00 70        	     	r1 = [P_IOA_Data];			// get key data from IOA   
                            	    	//r1 = [P_IOB_Data];			// get key data from IOB
00009468 4F B2              	    	r1 &= 0x000F;					//
00009469 01 95              		    r2 = r1; 						// key from +Vcc
0000946A 0A 87 FF FF        	    	r3 = r2 xor 0xffff;				// Be a +Vcc mask
                            	    
                            	    	// delay here
0000946C 00 EE              		    nop;
0000946D 00 EE              	    	nop;
0000946E 00 EE              	    	nop;
                            		    
0000946F 11 93 01 70        		 	r1 = [P_IOA_Buffer];			// PortA.7 high(scan line)
00009471 09 A3 80 00        			r1 |= 0x0080;					//
00009473 19 D3 01 70        			[P_IOA_Buffer] = r1;			//	
                            			   
00009475 11 93 00 70        			r1 = [P_IOA_Data];				//
                            			//r1 = [P_IOB_Data];			// get key data from IOB
00009477 4F B2              			r1 &= 0x000F;					//
00009478 02 83              			r1 ^= r2;						// possible bits by scan line
00009479 03 B3              			r1 &= r3;						// do +Vcc mask   
                            			
0000947A 59 93              			r1 = r1 lsl 4;					//
0000947B 02 A3              			r1 |= r2;						//
                            	    	//r2 = r2 lsl 4;				//
                            			//r1 |= r2;						//	    	
                            			    
0000947C 09 B3 FF 00        	        r1 = r1 and 0xFF;				// mask bit[0..7]
                            	        
0000947E 12 95 B2 00        	        r2 = [R_DebounceReg];			//
00009480 19 D3 B2 00        	        [R_DebounceReg] = r1;			//
00009482 12 45 B2 00        	        cmp r2,[R_DebounceReg];			//
00009484 04 5E              	        je	L_KS_StableTwoSample_2;		//
                            	        
00009485 48 92              	        r1 = C_DebounceCnt;				//debounce time setting
00009486 19 D3 B3 00        	        [R_DebounceCnt] = r1;			//
00009488 90 9A              	        retf;							//
                            	        
                            	L_KS_StableTwoSample_2:
00009489 11 93 B3 00        			r1 = [R_DebounceCnt];			//
0000948B 01 5E              			jz	L_KS_StableOverDebounce_2;	//
0000948C 90 9A              			retf;
                            		
                            	L_KS_StableOverDebounce_2:        
0000948D 19 D3 B3 00        			[R_DebounceCnt] = r1;			//
0000948F 12 95 B2 00        			r2 = [R_DebounceReg];			//
00009491 11 93 B4 00        			r1 = [R_KeyBuf];				//
00009493 1A D5 B4 00        			[R_KeyBuf] = r2;				//
00009495 09 83 FF 00        			r1 = r1 xor 0x00ff;				//
00009497 11 B3 B4 00        			r1 = r1 and [R_KeyBuf];			//
00009499 09 B3 FF 00        			r1 = r1 and 0x00ff;				//
0000949B 11 A3 B5 00        			r1 = r1 or [R_KeyStrobe];		//
0000949D 19 D3 B5 00        			[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
0000949F 90 9A              			retf;
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: debounce counter down count
                            	//////////////////////////////////////////////////////////////////
                            	F_Key_DebounceCnt_Down:
000094A0 11 93 B3 00        			r1 = [R_DebounceCnt];			// Debounce subroutine for F_IO_Key_Scan:
000094A2 03 5E              			jz	L_DebounceCntZero;			// stop count if zero
000094A3 41 22              			r1 -= 0x0001;					//
000094A4 19 D3 B3 00        			[R_DebounceCnt] = r1;			//
                            	L_DebounceCntZero:						//
000094A6 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;
                            			  
000094A7 11 93 B5 00        			r1 = [R_KeyStrobe];				// Get Key code
000094A9 40 94              	        r2 = 0x0000;					// Clear KeyStrobe for next key	
000094AA 1A D5 B5 00        	        [R_KeyStrobe] = r2;				//
                            	        //pop		BP,BP from [SP];
000094AC 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
000094AD 88 DA              			PUSH BP,BP TO [SP];
000094AE 08 0B 01 00        	        BP = SP + 1;
000094B0 88 D2              			PUSH R1,R1 TO [SP];
000094B1 03 92              			R1 = [BP+3];						// Port direction
000094B2 19 D3 02 70        			[P_IOA_Dir] = R1;
000094B4 04 92              			R1 = [BP+4];
000094B5 19 D3 00 70        			[P_IOA_Data] = R1;
000094B7 05 92              			R1 = [BP+5];
000094B8 19 D3 03 70        			[P_IOA_Attrib] = R1;
                            			
000094BA 88 90              			POP R1,R1 FROM [SP];
000094BB 88 98              	        POP BP,BP FROM [SP];
000094BC 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
000094BD 88 DA              			PUSH BP,BP TO [SP];
000094BE 08 0B 01 00        	        BP = SP + 1;
000094C0 88 D2              			PUSH R1,R1 TO [SP];
000094C1 03 92              			R1 = [BP+3];						// Port direction
000094C2 19 D3 07 70        			[P_IOB_Dir] = R1;
000094C4 04 92              			R1 = [BP+4];
000094C5 19 D3 05 70        			[P_IOB_Data] = R1;
000094C7 05 92              			R1 = [BP+5];
000094C8 19 D3 08 70        			[P_IOB_Attrib] = R1;
                            			
000094CA 88 90              			POP R1,R1 FROM [SP];
000094CB 88 98              	        POP BP,BP FROM [SP];
000094CC 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
000094CD 88 DA              	        PUSH BP,BP TO [SP];
000094CE 08 0B 01 00        	        BP = SP + 1;
000094D0 90 D4              			PUSH R1,R2 TO [SP];
000094D1 03 92              			R1 = [BP+3]; 						// Port Number
000094D2 04 94              			R2 = [BP+4]; 						// Data Buffer Pointer
000094D3 C1 92              			R1 = [R1] ;
000094D4 C2 D2              			[R2] = R1 ;
000094D5 90 90              			POP R1,R2 FROM [SP];
000094D6 88 98              	        POP BP,BP FROM [SP];
000094D7 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
000094D8 88 DA              	        PUSH BP,BP TO [SP];
000094D9 08 0B 01 00        	        BP = SP + 1;
000094DB 90 D4              			PUSH R1,R2 TO [SP];
000094DC 03 92              			R1 = [BP+3]; 						// Port Number
000094DD 04 94              			R2 = [BP+4]; 						// Value
000094DE C1 D4              			[R1] = R2 ;
000094DF 90 90              			POP R1,R2 FROM [SP];
000094E0 88 98              	        POP BP,BP FROM [SP];
000094E1 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 + -