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

📄 key.lst

📁 此代码是凌阳61单片机上的程序——上电自检程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     <      	.EXTERNAL 	F_SP_TestQueue_S480
                     <      	.EXTERNAL 	F_SP_TestQueue_S240
                     <      	.EXTERNAL 	F_SP_TestQueue_MS01
                     <      	.EXTERNAL 	F_SP_TestQueue_DVR
                     <      	
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC		// Read queue with no index change
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_A2000
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_S480
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_S240
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_MS01
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_DVR
                     <      	
                     <      	
                     <      	.EXTERNAL	F_SP_SACM_A2000_Init_
                     <      	.EXTERNAL	F_SP_SACM_S480_Init_
                     <      	.EXTERNAL	F_SP_SACM_S240_Init_
                     <      	
                     <      	.EXTERNAL	F_SP_SACM_MS01_Init_
                     <      	.EXTERNAL	F_SP_PlayMode0_
                     <      	.EXTERNAL	F_SP_PlayMode1_
                     <      	.EXTERNAL	F_SP_PlayMode2_
                     <      	.EXTERNAL	F_SP_PlayMode3_
                     <      	
                     <      	.EXTERNAL	F_SP_SACM_DVR_Init_
                     <      	.EXTERNAL 	F_SP_SACM_DVR_Rec_Init_
                     <      	.EXTERNAL 	F_SP_SACM_DVR_Play_Init_
                     <      	
                     <      	.EXTERNAL	F_SP_GetResource
                     <      	
                     <      	//////////////////////////////////////////////////////////////////
                     <      	// Reserve old defintion
                     <      	// Note: Some user who use old library may use the old name
                     <      	//////////////////////////////////////////////////////////////////
                     <      	.EXTERNAL	F_SP_Send_PWM					// Get RAW data 
                     <      	.EXTERNAL	F_SP_Send_DAC1 					// 
                     <      	.EXTERNAL	F_SP_Send_DAC2 					//
                     <      	
                     <      	.EXTERNAL	F_STD_Send_DAC1 				// reserved old
                     <      	.EXTERNAL	F_STD_Send_DAC2 				// reserved old
                     <      	
                     <      	.EXTERNAL 	F_RampUpDAC1					// reserved old
                     <      	.EXTERNAL 	F_RampDnDAC1					// reserved old
                     <      	.EXTERNAL 	F_RampUpDAC2					// reserved old
                     <      	.EXTERNAL  	F_RampDnDAC2					// reserved old
                     <      	///////////////////////////////////////////////////////////////////
                     <      	
                     <      	
                     <      		
                     <      	//========================================================================================        
                     <      	// End of hardware.inc
                     <      	//========================================================================================
                            	
                            	.external F_SP_INT_64Hz									
                            	
                            	
                            	.PUBLIC	F_Key_Scan_Initial;
                            	.PUBLIC F_Key_Scan_ServiceLoop;
                            	.PUBLIC F_Key_Scan_ServiceLoop_2;
                            	.PUBLIC F_Key_DebounceCnt_Down;
                            	.PUBLIC _SP_GetCh;
                            	.PUBLIC	F_SP_GetCh;
                            	
                            	.PUBLIC R_KeyStrobe;
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// RAM Define Area								
                            	//////////////////////////////////////////////////////////////////
000001A6                    	.RAM
000001A6 00 00              	.VAR	R_DebounceReg;						//for keyboard scan
                            	.DEFINE C_DebounceCnt			0x0002;		
                            	
000001A7 00 00              	.VAR	R_DebounceCnt;						//for keyboard scan
000001A8 00 00              	.VAR	R_KeyBuf;							//for keyboard scan
000001A9 00 00              	.VAR	R_KeyStrobe;						//for keyboard scan
                            	
00008DA5                    	.CODE
                            	//////////////////////////////////////////////////////////////////
                            	// Function: Initialization for F_Key_Scan_ServiceLoop
                            	//////////////////////////////////////////////////////////////////     
                            	F_Key_Scan_Initial:
00008DA5 40 92              			r1 = 0x0000;					//
00008DA6 19 D3 A6 01        			[R_DebounceReg] = r1;			//
00008DA8 19 D3 A8 01        			[R_KeyBuf] = r1; 				//
00008DAA 19 D3 A9 01        			[R_KeyStrobe] = r1;				//
00008DAC 42 92              			r1 = C_DebounceCnt;				//
00008DAD 19 D3 A7 01        			[R_DebounceCnt] = r1;			//reset debounce counter
00008DAF 90 9A              			retf;
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: Get Key code from key pad(8 x 1 key pad)
                            	// Input: Port IOA b7-b0
                            	// Output: R_KeyStrobe b7-b0
                            	//          | 	  |     |     | 
                            	// +Vcc --- x --- x ... x --- x ---   
                            	//          |     |     |     |
                            	//          IOA.7             IOA.0
                            	// Note: 1)link F_DebounceCntDown is necessary 
                            	// Destory register: r1, r2                                            
                            	////////////////////////////////////////////////////////////////// 
                            	F_Key_Scan_ServiceLoop:
                            			
00008DB0 11 93 00 70        	     	r1 = [P_IOA_Data];			// get key data from IOA   
                            	    	//r1 = [P_IOB_Data];			// get key data from IOB
                            		    	
00008DB2 09 B3 FF 00        	        r1 = r1 and 0xff;				//
00008DB4 12 95 A6 01        	        r2 = [R_DebounceReg];			//
00008DB6 19 D3 A6 01        	        [R_DebounceReg] = r1;			//
00008DB8 12 45 A6 01        	        cmp r2,[R_DebounceReg];			//
00008DBA 04 5E              	        je	L_KS_StableTwoSample;		//
                            	        
00008DBB 42 92              	        r1 = C_DebounceCnt;				//debounce time setting
00008DBC 19 D3 A7 01        	        [R_DebounceCnt] = r1;			//
00008DBE 90 9A              	        retf;							//
                            	        
                            	L_KS_StableTwoSample:
00008DBF 11 93 A7 01        			r1 = [R_DebounceCnt];			//
00008DC1 01 5E              			jz	L_KS_StableOverDebounce;	//
00008DC2 90 9A              			retf;
                            		
                            	L_KS_StableOverDebounce:        
00008DC3 19 D3 A7 01        			[R_DebounceCnt] = r1;			//
00008DC5 12 95 A6 01        			r2 = [R_DebounceReg];			//
00008DC7 11 93 A8 01        			r1 = [R_KeyBuf];				//
00008DC9 1A D5 A8 01        			[R_KeyBuf] = r2;				//
00008DCB 09 83 FF 00        			r1 = r1 xor 0x00ff;				//
00008DCD 11 B3 A8 01        			r1 = r1 and [R_KeyBuf];			//
00008DCF 09 B3 FF 00        			r1 = r1 and 0x00ff;				//
00008DD1 11 A3 A9 01        			r1 = r1 or [R_KeyStrobe];		//
00008DD3 19 D3 A9 01        			[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
00008DD5 90 9A              			retf;		
                            		
                            	//////////////////////////////////////////
                            	// 
                            	//////////////////////////////////////////
                            	F_Key_Scan_ServiceLoop_2:
                            		
                            		
00008DD6 11 93 01 70        			r1 = [P_IOA_Buffer];			// PortA.7 low(scan line +Vcc)
00008DD8 09 B3 7F FF        			r1 &= 0xFF7F;		
00008DDA 19 D3 01 70        			[P_IOA_Buffer] = r1;
                            			
00008DDC 11 93 00 70        	     	r1 = [P_IOA_Data];			// get key data from IOA   
                            	    	//r1 = [P_IOB_Data];			// get key data from IOB
00008DDE 4F B2              	    	r1 &= 0x000F;					//
00008DDF 01 95              		    r2 = r1; 						// key from +Vcc
00008DE0 0A 87 FF FF        	    	r3 = r2 xor 0xffff;				// Be a +Vcc mask
                            	    
                            	    	// delay here
00008DE2 00 EE              		    nop;
00008DE3 00 EE              	    	nop;
00008DE4 00 EE              	    	nop;
                            		    
00008DE5 11 93 01 70        		 	r1 = [P_IOA_Buffer];			// PortA.7 high(scan line)
00008DE7 09 A3 80 00        			r1 |= 0x0080;					//
00008DE9 19 D3 01 70        			[P_IOA_Buffer] = r1;			//	
                            			   
00008DEB 11 93 00 70        			r1 = [P_IOA_Data];				//
                            			//r1 = [P_IOB_Data];			// get key data from IOB
00008DED 4F B2              			r1 &= 0x000F;					//
00008DEE 02 83              			r1 ^= r2;						// possible bits by scan line
00008DEF 03 B3              			r1 &= r3;						// do +Vcc mask   
                            			
00008DF0 59 93              			r1 = r1 lsl 4;					//
00008DF1 02 A3              			r1 |= r2;						//
                            	    	//r2 = r2 lsl 4;				//
                            			//r1 |= r2;						//	    	
                            			    
00008DF2 09 B3 FF 00        	        r1 = r1 and 0xFF;				// mask bit[0..7]
                            	        
00008DF4 12 95 A6 01        	        r2 = [R_DebounceReg];			//
00008DF6 19 D3 A6 01        	        [R_DebounceReg] = r1;			//
00008DF8 12 45 A6 01        	        cmp r2,[R_DebounceReg];			//
00008DFA 04 5E              	        je	L_KS_StableTwoSample_2;		//
                            	        
00008DFB 42 92              	        r1 = C_DebounceCnt;				//debounce time setting
00008DFC 19 D3 A7 01        	        [R_DebounceCnt] = r1;			//
00008DFE 90 9A              	        retf;							//
                            	        
                            	L_KS_StableTwoSample_2:
00008DFF 11 93 A7 01        			r1 = [R_DebounceCnt];			//
00008E01 01 5E              			jz	L_KS_StableOverDebounce_2;	//
00008E02 90 9A              			retf;
                            		
                            	L_KS_StableOverDebounce_2:        
00008E03 19 D3 A7 01        			[R_DebounceCnt] = r1;			//
00008E05 12 95 A6 01        			r2 = [R_DebounceReg];			//
00008E07 11 93 A8 01        			r1 = [R_KeyBuf];				//
00008E09 1A D5 A8 01        			[R_KeyBuf] = r2;				//
00008E0B 09 83 FF 00        			r1 = r1 xor 0x00ff;				//
00008E0D 11 B3 A8 01        			r1 = r1 and [R_KeyBuf];			//
00008E0F 09 B3 FF 00        			r1 = r1 and 0x00ff;				//
00008E11 11 A3 A9 01        			r1 = r1 or [R_KeyStrobe];		//
00008E13 19 D3 A9 01        			[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
00008E15 90 9A              			retf;
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: debounce counter down count
                            	//////////////////////////////////////////////////////////////////
                            	F_Key_DebounceCnt_Down:
00008E16 11 93 A7 01        			r1 = [R_DebounceCnt];			// Debounce subroutine for F_IO_Key_Scan:
00008E18 03 5E              			jz	L_DebounceCntZero;			// stop count if zero
00008E19 41 22              			r1 -= 0x0001;					//
00008E1A 19 D3 A7 01        			[R_DebounceCnt] = r1;			//
                            	L_DebounceCntZero:						//
00008E1C 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;
                            			  
00008E1D 11 93 A9 01        			r1 = [R_KeyStrobe];				// Get Key code
00008E1F 40 94              	        r2 = 0x0000;					// Clear KeyStrobe for next key	
00008E20 1A D5 A9 01        	        [R_KeyStrobe] = r2;				//
                            	        //pop		BP,BP from [SP];
00008E22 90 9A              	        retf;
                            	
                            	
                            	//========================================================================================        
                            	// End of key.asm
                            	//========================================================================================
                            	     
                            	
                            	//========================================================================================        
                            	// End of key.asm
                            	//========================================================================================
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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