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

📄 hardware.asm

📁 该程序是非特定人语音识别程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		[P_IOA_Data] = R1;				//
		[P_IOB_Dir] = R1;				// Port IOB input
		[P_IOB_Attrib] = R1;				//
		[P_IOB_Data] = R1;				//
		
		       
		//R1=[P_IO_RL];                	//portA last data latch
        //R1=[P_Feed_Back];            	//portB.4 portB.5 SFC
  
        R1 = 0x0000;			        	// Initial System Clock, 24MHz, Fcpu=Fosc
	    [P_SystemClock] = R1;       		// Frequency 20MHz
        [P_TimeBase_Setup] = R1;			//
        
        //R1 = 	(C_Fosc_Div_2 +				// bit2 .. bit0
        //		C_1024Hz +					// bit3 .. bit5
		//        C_OFF);					// bit6 .. bit9 
		R1 = 0x0000;
		[P_TimerA_Ctrl] = R1;			//
		
		//R1 = 	(C_Fosc_Div_2 +				// bit2 .. bit0
        //		C_1024Hz +					// bit3 .. bit5
		//        C_OFF);					// bit6 .. bit9 
		R1 = 0x0000;
		[P_TimerB_Ctrl] = R1;			//
	
		R1 = 0x0000;						//
		[P_TimerA_Data] = R1;			//
		[P_TimerB_Data] = R1;			//
//		[P_Watchdog_Clear] = R1;			//
        
        
        
        //R1=[P_ADDA];                 	//10-bit DA(W) AD(R)
        //R1=[P_DAC1];                 	//
        
        //R1=[P_AD_Ctrl];              	//AD/DA control
        //R1=[P_AD_Status];            	//AD status
        
        //R1=[P_DAC2];                 	//DAC channel 2
        //R1=[P_PWM];                  	//PWM output
        
        //R1=[P_DA_Ctrl];              	//DAC latch control
        //R1=[P_LVD_Ctrl];             	//Low voltage detect control
        
        R1 = 0x0000;
        call	F_STD_Set_INT_Vector;		//interrupt control
        R1 = 0xFFFF;
		call	F_STD_Clear_INT_Vector;		//Interrupt clear register
       
		retf;


////////////////////////////////////////////////////////////////// 
//
//////////////////////////////////////////////////////////////////    
.PUBLIC _STD_Init_IOA;
_STD_Init_IOA: .PROC
		PUSH BP,BP TO [SP];
        BP = SP + 1;
		PUSH R1,R1 TO [SP];
		R1 = [BP+3];						// Port direction
		[P_IOA_Dir] = R1;
		R1 = [BP+4];
		[P_IOA_Data] = R1;
		R1 = [BP+5];
		[P_IOA_Attrib] = R1;
		
		POP R1,R1 FROM [SP];
        POP BP,BP FROM [SP];
        RETF;
		.ENDP

////////////////////////////////////////////////////////////////// 
//
//////////////////////////////////////////////////////////////////    
.PUBLIC _STD_Init_IOB;
_STD_Init_IOB: .PROC
		PUSH BP,BP TO [SP];
        BP = SP + 1;
		PUSH R1,R1 TO [SP];
		R1 = [BP+3];						// Port direction
		[P_IOB_Dir] = R1;
		R1 = [BP+4];
		[P_IOB_Data] = R1;
		R1 = [BP+5];
		[P_IOB_Attrib] = R1;
		
		POP R1,R1 FROM [SP];
        POP BP,BP FROM [SP];
        RETF;
		.ENDP






.PUBLIC	_STD_Import;
_STD_Import: .PROC
        PUSH BP,BP TO [SP];
        BP = SP + 1;
		PUSH R1,R2 TO [SP];
		R1 = [BP+3]; 						// Port Number
		R2 = [BP+4]; 						// Data Buffer Pointer
		R1 = [R1] ;
		[R2] = R1 ;
		POP R1,R2 FROM [SP];
        POP BP,BP FROM [SP];
        RETF;
		.ENDP

.PUBLIC _STD_Export; 
_STD_Export: .PROC
        PUSH BP,BP TO [SP];
        BP = SP + 1;
		PUSH R1,R2 TO [SP];
		R1 = [BP+3]; 						// Port Number
		R2 = [BP+4]; 						// Value
		[R1] = R2 ;
		POP R1,R2 FROM [SP];
        POP BP,BP FROM [SP];
        RETF;        
 		.ENDP
		 

.public	F_RampUpDAC1;
.public	F_RampDnDAC1;
.public	F_RampUpDAC2;
.public	F_RampDnDAC2;
	 
///////////////////////////////////////
F_RampUpDAC1:
                push r1,r2 to [sp];
                r1=[P_DAC1];
                r1 &= ~0x003f;
                cmp     r1,0x8000
                jb     	L_RU_NormalUp;  
                je      L_RU_End;
                
L_RU_DownLoop:
                call    F_Delay;        
                r2 = 0x0001;
 //              [P_Watchdog_Clear] = r2;
                r1 -= 0x40;
                [P_DAC1] = r1;
                cmp     r1,0x8000;
                jne     L_RU_DownLoop;  
L_RD_DownEnd:
                jmp     L_RU_End;

L_RU_NormalUp:
L_RU_Loop:
                call    F_Delay;
                r2 = 0x0001;
  //             [P_Watchdog_Clear] = r2;
                r1 += 0x40;
                [P_DAC1] = r1;
                cmp     r1, 0x8000;
                jne     L_RU_Loop;
                

L_RU_End:
                pop     r1,r2 from [sp];
                retf;
/////////////////////////////////////// 
F_RampDnDAC1:
				retf;
                push r1,r2 to [sp];
                //int off;
                r1 = [P_DAC1];
                r1 &= ~0x003F;
                jz      L_RD_End;
L_RD_Loop:                
                call    F_Delay;        
                r2 = 0x0001;
  //           [P_Watchdog_Clear] = r2;
                r1 -= 0x40;
                [P_DAC1] = r1;  
                jnz     L_RD_Loop;
L_RD_End:       
                
                pop     r1,r2 from [sp];
                retf;


///////////////////////////////////////
F_RampUpDAC2:
                push r1,r2 to [sp];
                r1=[P_DAC2];
                r1 &= ~0x003f;
                cmp     r1,0x8000
                jb     	L_RU_NormalUp_;  
                je      L_RU_End;
                
L_RU_DownLoop_:
                call    F_Delay;        
                r2 = 0x0001;
 //            [P_Watchdog_Clear] = r2;
                r1 -= 0x40;
                [P_DAC2] = r1;
                cmp     r1,0x8000;
                jne     L_RU_DownLoop_;  
L_RD_DownEnd_:
                jmp     L_RU_End_;

L_RU_NormalUp_:
L_RU_Loop_:
                call    F_Delay;
                r2 = 0x0001;
 //             [P_Watchdog_Clear] = r2;
                r1 += 0x40;
                [P_DAC2] = r1;
                cmp     r1, 0x8000;
                jne     L_RU_Loop_;
                

L_RU_End_:
                pop     r1,r2 from [sp];
                retf;
/////////////////////////////////////// 
F_RampDnDAC2:
				retf;
                push r1,r2 to [sp];
                //int off;
                r1 = [P_DAC2];
                r1 &= ~0x003F;
                jz      L_RD_End_;
L_RD_Loop_:                
                call    F_Delay;        
                r2 = 0x0001;
   //            [P_Watchdog_Clear] = r2;
                r1 -= 0x40;
                [P_DAC2] = r1;  
                jnz     L_RD_Loop_;
L_RD_End_:       
                
                pop     r1,r2 from [sp];
                retf;

////////////////////////////////////////
F_Delay:
                push r1 to [sp];
                r1 = 8;
L_D_Loop:
                r1 -= 1;
                jnz     L_D_Loop; 
                pop     r1 from [sp];
                retf;	 
//========================================================================================        
// End of hardware.asm
//========================================================================================



        
        
        

⌨️ 快捷键说明

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