hardware.lst

来自「用凌阳SPCE061A单片机做成的数字语音电压表的源程序」· LST 代码 · 共 659 行 · 第 1/3 页

LST
659
字号
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00 00 00
         00 00      
00000330 00 00              	.VAR	R_ReadIndex;
00000331 00 00              	.VAR	R_WriteIndex;
                            	
00008E99                    	.CODE
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: Send data to speech driver(PWM/DAC)                                   
                            	// Destory register: r4                                            
                            	//////////////////////////////////////////////////////////////////        
                            	
                            	F_SP_Send_PWM:    							//
00008E99 1C D9 16 70        	       [P_PWM] = r4;						//
00008E9B 90 9A              	       retf;           						//
                            	
                            	F_SP_Send_DAC1:								//
00008E9C 1C D9 17 70        			[P_DAC1] = r4;						//
00008E9E 90 9A              			retf;        						//
                            	F_SP_Send_DAC2:								//
00008E9F 1C D9 16 70        			[P_DAC2] = r4;						//
00008EA1 90 9A              			retf;        						//
                            	F_SP_Send_Two_DAC:
00008EA2 1C D9 17 70        			[P_DAC1] = r4;						//
00008EA4 1C D9 16 70        			[P_DAC2] = r4;						//
00008EA6 90 9A              			retf;
                            	
                            	//.DEFINE	F_SP_Send_Out  F_SP_Send_PWM;
                            	//.DEFINE	F_SP_Send_Out  F_SP_Send_DAC1;
                            	//.DEFINE	F_SP_Send_Out  F_SP_Send_DAC2;
                            	.DEFINE	F_SP_Send_Out  F_SP_Send_Two_DAC;		// Send to both DAC1 and DAC2
                            	
                            	
                            	F_SP_Get_ADC:
00008EA7 14 99 14 70        			R4 = [P_ADC]
00008EA9 90 9A              			retf
                            	
                            	
                            	F_SP_Set_P_TimerA_Ctrl:
00008EAA 19 D3 0B 70        		[P_TimerA_Ctrl] = R1
00008EAC 90 9A              		RETF
                            	F_SP_Set_P_TimerA_Data:
00008EAD 19 D3 0A 70        		[P_TimerA_Data] = R1
00008EAF 90 9A              		RETF
                            	F_SP_Set_P_TimerB_Ctrl:
00008EB0 19 D3 0D 70        		[P_TimerB_Ctrl] = R1
00008EB2 90 9A              		RETF
                            	F_SP_Set_P_TimerB_Data:
00008EB3 19 D3 0C 70        		[P_TimerB_Data] = R1
00008EB5 90 9A              		RETF
                            	
                            	F_SP_Set_P_INT_Ctrl:
00008EB6 19 D3 10 70        		[P_INT_Ctrl] = R1
00008EB8 90 9A              		RETF
                            	F_SP_Set_P_INT_Clear:
00008EB9 19 D3 11 70        		[P_INT_Clear] = R1
00008EBB 90 9A              		RETF
                            	
                            	F_SP_Set_P_SystemClock:
00008EBC 19 D3 13 70        		[P_SystemClock] = R1
00008EBE 90 9A              		RETF
                            	
                            	F_SP_Set_P_DAC_Ctrl:
00008EBF 19 D3 2A 70        		[P_DAC_Ctrl] = R1
00008EC1 90 9A              		RETF	
                            	
                            	F_SP_Set_P_ADC_Ctrl:
00008EC2 19 D3 15 70        		[P_ADC_Ctrl] = R1
00008EC4 90 9A              		RETF
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: Interrupt vector setting
                            	// Used register: R1                                                                                    
                            	////////////////////////////////////////////////////////////////// 
                            	
                            	F_SP_Write_INT_Status:						//write interrupt status
00008EC5 19 D3 FC 02        	        [R_InterruptStatus] = R1;       	//
00008EC7 90 9A              	        retf;								
                            	        
                            	F_SP_Read_INT_Status:						//read interrupt status
00008EC8 11 93 FC 02        	        R1 = [R_InterruptStatus];       	//
00008ECA 90 9A              	        retf;
                            	
                            	
                            	
                            	////////////////////////////////////////////////////////////////// 
                            	//
                            	//////////////////////////////////////////////////////////////////    
                            	_SP_Init_IOA: .PROC
00008ECB 88 DA              			PUSH BP,BP TO [SP];
00008ECC 08 0B 01 00        	        BP = SP + 1;
00008ECE 88 D2              			PUSH R1,R1 TO [SP];
00008ECF 03 92              			R1 = [BP+3];						// Port direction
00008ED0 19 D3 02 70        			[P_IOA_Dir] = R1;
00008ED2 04 92              			R1 = [BP+4];
00008ED3 19 D3 00 70        			[P_IOA_Data] = R1;
00008ED5 05 92              			R1 = [BP+5];
00008ED6 19 D3 03 70        			[P_IOA_Attrib] = R1;
                            			
00008ED8 88 90              			POP R1,R1 FROM [SP];
00008ED9 88 98              	        POP BP,BP FROM [SP];
00008EDA 90 9A              	        RETF;
                            			.ENDP
                            	
                            	////////////////////////////////////////////////////////////////// 
                            	// SP_Inti_IOB
                            	//////////////////////////////////////////////////////////////////    
                            	
                            	_SP_Init_IOB: .PROC
00008EDB 88 DA              			PUSH BP,BP TO [SP];
00008EDC 08 0B 01 00        	        BP = SP + 1;
00008EDE 88 D2              			PUSH R1,R1 TO [SP];
00008EDF 03 92              			R1 = [BP+3];						// Port direction
00008EE0 19 D3 07 70        			[P_IOB_Dir] = R1;
00008EE2 04 92              			R1 = [BP+4];
00008EE3 19 D3 05 70        			[P_IOB_Data] = R1;
00008EE5 05 92              			R1 = [BP+5];
00008EE6 19 D3 08 70        			[P_IOB_Attrib] = R1;
                            			
00008EE8 88 90              			POP R1,R1 FROM [SP];
00008EE9 88 98              	        POP BP,BP FROM [SP];
00008EEA 90 9A              	        RETF;
                            			.ENDP
                            	
                            	
                            	
                            	_SP_Import: .PROC
00008EEB 88 DA              	        PUSH BP,BP TO [SP];
00008EEC 08 0B 01 00        	        BP = SP + 1;
00008EEE 90 D4              			PUSH R1,R2 TO [SP];
00008EEF 03 92              			R1 = [BP+3]; 						// Port Number
00008EF0 04 94              			R2 = [BP+4]; 						// Data Buffer Pointer
00008EF1 C1 92              			R1 = [R1] ;
00008EF2 C2 D2              			[R2] = R1 ;
00008EF3 90 90              			POP R1,R2 FROM [SP];
00008EF4 88 98              	        POP BP,BP FROM [SP];
00008EF5 90 9A              	        RETF;
                            			.ENDP
                            	
                            	_SP_Export: .PROC
00008EF6 88 DA              	        PUSH BP,BP TO [SP];
00008EF7 08 0B 01 00        	        BP = SP + 1;
00008EF9 90 D4              			PUSH R1,R2 TO [SP];
00008EFA 03 92              			R1 = [BP+3]; 						// Port Number
00008EFB 04 94              			R2 = [BP+4]; 						// Value
00008EFC C1 D4              			[R1] = R2 ;
00008EFD 90 90              			POP R1,R2 FROM [SP];
00008EFE 88 98              	        POP BP,BP FROM [SP];
00008EFF 90 9A              	        RETF;        
                            	 		.ENDP
                            			 
                            	
                            	
                            		 
                            	///////////////////////////////////////
                            	_SP_RampUpDAC1:	.PROC
                            	F_SP_RampUpDAC1:
00008F00 90 D4              	                push r1,r2 to [sp];
00008F01 11 93 17 70        	                r1=[P_DAC1];
00008F03 09 B3 C0 FF        	                r1 &= ~0x003f;
00008F05 09 43 00 80        	                cmp     r1,0x8000
00008F07 0E 0E              	                jb     	L_RU_NormalUp;  
00008F08 19 5E              	                je      L_RU_End;
                            	                
                            	L_RU_DownLoop:
00008F09 40 F0 6C 8F        	                call    F_Delay;        
00008F0B 41 94              	                r2 = 0x0001;
00008F0C 1A D5 12 70        	                [P_Watchdog_Clear] = r2;
00008F0E 09 23 40 00        	                r1 -= 0x40;
00008F10 19 D3 17 70        	                [P_DAC1] = r1;
00008F12 09 43 00 80        	                cmp     r1,0x8000;
00008F14 4C 4E              	                jne     L_RU_DownLoop;  
                            	L_RD_DownEnd:
00008F15 0C EE              	                jmp     L_RU_End;
                            	
                            	L_RU_NormalUp:
                            	L_RU_Loop:
00008F16 40 F0 6C 8F        	                call    F_Delay;
00008F18 41 94              	                r2 = 0x0001;
00008F19 1A D5 12 70        	                [P_Watchdog_Clear] = r2;
00008F1B 09 03 40 00        	                r1 += 0x40;
00008F1D 19 D3 17 70        	                [P_DAC1] = r1;
00008F1F 09 43 00 80        	                cmp     r1, 0x8000;
00008F21 4C 4E              	                jne     L_RU_Loop;
                            	                
                            	
                            	L_RU_End:
00008F22 90 90              	                pop     r1,r2 from [sp];
00008F23 90 9A              	                retf;
                            	                .ENDP
                            	/////////////////////////////////////// 
                            	_SP_RampDnDAC1:	.PROC
                            	F_SP_RampDnDAC1:
00008F24 90 D4              					push r1,r2 to [sp];
                            	                //int off;
00008F25 11 93 17 70        	                r1 = [P_DAC1];
00008F27 09 B3 C0 FF        	                r1 &= ~0x003F;
00008F29 0A 5E              	                jz      L_RD_End;
                            	L_RD_Loop:                
00008F2A 40 F0 6C 8F        	                call    F_Delay;        
00008F2C 41 94              	                r2 = 0x0001;
00008F2D 1A D5 12 70        	                [P_Watchdog_Clear] = r2;

⌨️ 快捷键说明

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