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

📄 sp_lib.lst

📁 电子词典的设计开发
💻 LST
📖 第 1 页 / 共 3 页
字号:
                            	F_Key_Scan_ServiceLoop_2:
                            		
                            		
00000031 11 93 01 70        			r1 = [P_IOA_Buffer];			// PortA.7 low(scan line +Vcc)
00000033 09 B3 7F FF        			r1 &= 0xFF7F;		
00000035 19 D3 01 70        			[P_IOA_Buffer] = r1;
                            			
00000037 11 93 00 70        	     	r1 = [P_IOA_Data];			// get key data from IOA   
                            	    	//r1 = [P_IOB_Data];			// get key data from IOB
00000039 4F B2              	    	r1 &= 0x000F;					//
0000003A 01 95              		    r2 = r1; 						// key from +Vcc
0000003B 0A 87 FF FF        	    	r3 = r2 xor 0xffff;				// Be a +Vcc mask
                            	    
                            	    	// delay here
0000003D 00 EE              		    nop;
0000003E 00 EE              	    	nop;
0000003F 00 EE              	    	nop;
                            		    
00000040 11 93 01 70        		 	r1 = [P_IOA_Buffer];			// PortA.7 high(scan line)
00000042 09 A3 80 00        			r1 |= 0x0080;					//
00000044 19 D3 01 70        			[P_IOA_Buffer] = r1;			//	
                            			   
00000046 11 93 00 70        			r1 = [P_IOA_Data];				//
                            			//r1 = [P_IOB_Data];			// get key data from IOB
00000048 4F B2              			r1 &= 0x000F;					//
00000049 02 83              			r1 ^= r2;						// possible bits by scan line
0000004A 03 B3              			r1 &= r3;						// do +Vcc mask   
                            			
0000004B 59 93              			r1 = r1 lsl 4;					//
0000004C 02 A3              			r1 |= r2;						//
                            	    	//r2 = r2 lsl 4;				//
                            			//r1 |= r2;						//	    	
                            			    
0000004D 09 B3 FF 00        	        r1 = r1 and 0xFF;				// mask bit[0..7]
                            	        
0000004F 12 95 00 00        	        r2 = [R_DebounceReg];			//
00000051 19 D3 00 00        	        [R_DebounceReg] = r1;			//
00000053 12 45 00 00        	        cmp r2,[R_DebounceReg];			//
00000055 04 5E              	        je	L_KS_StableTwoSample_2;		//
                            	        
00000056 48 92              	        r1 = C_DebounceCnt;				//debounce time setting
00000057 19 D3 01 00        	        [R_DebounceCnt] = r1;			//
00000059 90 9A              	        retf;							//
                            	        
                            	L_KS_StableTwoSample_2:
0000005A 11 93 01 00        			r1 = [R_DebounceCnt];			//
0000005C 01 5E              			jz	L_KS_StableOverDebounce_2;	//
0000005D 90 9A              			retf;
                            		
                            	L_KS_StableOverDebounce_2:        
0000005E 19 D3 01 00        			[R_DebounceCnt] = r1;			//
00000060 12 95 00 00        			r2 = [R_DebounceReg];			//
00000062 11 93 02 00        			r1 = [R_KeyBuf];				//
00000064 1A D5 02 00        			[R_KeyBuf] = r2;				//
00000066 09 83 FF 00        			r1 = r1 xor 0x00ff;				//
00000068 11 B3 02 00        			r1 = r1 and [R_KeyBuf];			//
0000006A 09 B3 FF 00        			r1 = r1 and 0x00ff;				//
0000006C 11 A3 03 00        			r1 = r1 or [R_KeyStrobe];		//
0000006E 19 D3 03 00        			[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
00000070 90 9A              			retf;
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: debounce counter down count
                            	//////////////////////////////////////////////////////////////////
                            	F_Key_DebounceCnt_Down:
00000071 11 93 01 00        			r1 = [R_DebounceCnt];			// Debounce subroutine for F_IO_Key_Scan:
00000073 03 5E              			jz	L_DebounceCntZero;			// stop count if zero
00000074 41 22              			r1 -= 0x0001;					//
00000075 19 D3 01 00        			[R_DebounceCnt] = r1;			//
                            	L_DebounceCntZero:						//
00000077 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;
                            			  
00000078 11 93 03 00        			r1 = [R_KeyStrobe];				// Get Key code
0000007A 40 94              	        r2 = 0x0000;					// Clear KeyStrobe for next key	
0000007B 1A D5 03 00        	        [R_KeyStrobe] = r2;				//
                            	        //pop		BP,BP from [SP];
0000007D 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
0000007E 88 DA              			PUSH BP,BP TO [SP];
0000007F 08 0B 01 00        	        BP = SP + 1;
00000081 88 D2              			PUSH R1,R1 TO [SP];
00000082 03 92              			R1 = [BP+3];						// Port direction
00000083 19 D3 02 70        			[P_IOA_Dir] = R1;
00000085 04 92              			R1 = [BP+4];
00000086 19 D3 00 70        			[P_IOA_Data] = R1;
00000088 05 92              			R1 = [BP+5];
00000089 19 D3 03 70        			[P_IOA_Attrib] = R1;
                            			
0000008B 88 90              			POP R1,R1 FROM [SP];
0000008C 88 98              	        POP BP,BP FROM [SP];
0000008D 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
0000008E 88 DA              			PUSH BP,BP TO [SP];
0000008F 08 0B 01 00        	        BP = SP + 1;
00000091 88 D2              			PUSH R1,R1 TO [SP];
00000092 03 92              			R1 = [BP+3];						// Port direction
00000093 19 D3 07 70        			[P_IOB_Dir] = R1;
00000095 04 92              			R1 = [BP+4];
00000096 19 D3 05 70        			[P_IOB_Data] = R1;
00000098 05 92              			R1 = [BP+5];
00000099 19 D3 08 70        			[P_IOB_Attrib] = R1;
                            			
0000009B 88 90              			POP R1,R1 FROM [SP];
0000009C 88 98              	        POP BP,BP FROM [SP];
0000009D 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
0000009E 88 DA              	        PUSH BP,BP TO [SP];
0000009F 08 0B 01 00        	        BP = SP + 1;
000000A1 90 D4              			PUSH R1,R2 TO [SP];
000000A2 03 92              			R1 = [BP+3]; 						// Port Number
000000A3 04 94              			R2 = [BP+4]; 						// Data Buffer Pointer
000000A4 C1 92              			R1 = [R1] ;
000000A5 C2 D2              			[R2] = R1 ;
000000A6 90 90              			POP R1,R2 FROM [SP];
000000A7 88 98              	        POP BP,BP FROM [SP];
000000A8 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
000000A9 88 DA              	        PUSH BP,BP TO [SP];
000000AA 08 0B 01 00        	        BP = SP + 1;
000000AC 90 D4              			PUSH R1,R2 TO [SP];
000000AD 03 92              			R1 = [BP+3]; 						// Port Number
000000AE 04 94              			R2 = [BP+4]; 						// Value
000000AF C1 D4              			[R1] = R2 ;
000000B0 90 90              			POP R1,R2 FROM [SP];
000000B1 88 98              	        POP BP,BP FROM [SP];
000000B2 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 + -