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

📄 d12hal.asm

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 ASM
字号:
.include ..\spce061\061reg.inc

.public	_F_InitWriteD12
.public _F_InitReadD12
.public _F_ReadD12
.public _F_WriteCmdToD12
.public _F_WriteDataToD12

.code
//====================================================================
// 函  数:    	F_InitWriteD12()
// 语  法:    	void F_TurnOffFirstLed(void)
// 描  述:   	初始化写PDIUSBD12
// 参  数:   	无
// 返回值:   	无
//=====================================================================
_F_InitWriteD12: .proc
		push r1,r1 to [sp];
		
		r1=[P_IOB_Buffer];	
		r1|=0x0090; 		
		r1&=0xffdf; 			//D12_CE=0	NF_CE=1 LCD_CE=1					           
	    [P_IOB_Buffer]=r1;  
	    		
		r1=[P_IOA_Dir];
		r1|=0xff00; 
		[P_IOA_Dir]=r1;
		
		r1=[P_IOA_Attrib];
		r1|=0xff00;				//DB7(A.15)~DB0(A.8),D12_WE(A.7),D12_RE(A.6)->OutputPort 
		[P_IOA_Attrib]=r1;
		
		r1=[P_IOA_Buffer];
		r1|=0x00c0;				
		[P_IOA_Buffer]=r1; 		//RE=1 WE=1
	   
        pop r1,r1 from [sp];
        retf ;
        .endp
        
//====================================================================
// 函  数:    	F_InitReadD12()
// 语  法:    	void F_InitReadD12(void)
// 描  述:   	初始化读PDIUSBD12
// 参  数:   	无
// 返回值:   	无
//=====================================================================
_F_InitReadD12:          .PROC
		push r1,r1 to [sp];

		r1=[P_IOB_Buffer];	
		r1|=0x0090; 		
		r1&=0xffdf; 			//D12_CE=0	NF_CE=1 LCD_CE=1			          
	    [P_IOB_Buffer]=r1;  
	    		
		r1=[P_IOA_Dir];
		r1&=0x00ff; 
		[P_IOA_Dir]=r1;
		
		r1=[P_IOA_Attrib];
//		r1&=0x00ff;				//DB7(A.15)~DB0(A.8),D12_WE(A.7),D12_RE(A.6)->OutputPort 
		r1|=0xff00;
		[P_IOA_Attrib]=r1;
		
		r1=[P_IOA_Buffer];
		r1|=0x00c0;				
		[P_IOA_Buffer]=r1; 		//RE=1 WE=1
		   	    
        pop r1,r1 from [sp]; 
        retf ;
        .ENDP
        
//====================================================================
// 函  数:    	F_ReadD12()
// 语  法:    	unsigned int F_ReadD12()
// 描  述:   	从PDIUSBD12读数据
// 参  数:   	D_Addr:为偶地址0xff02
// 返回值:   	r1
//=====================================================================
_F_ReadD12:      .PROC
        push r2,r2 to [sp];             
        		
		r2=[P_IOA_Buffer];	
//		r2&=0xffbd;					//WE AT PA.6
		r2&=0xff7d;					//WE AT PA.7
//      Add Modify
//		r2|=0x0002;		
		[P_IOA_Buffer]=r2;			//D12_RE=0						

//      nop;
        r1 = [P_IOA_Data];       	// Get data
        r1 = r1 lsr 4;           	// Prepare high 8 bits Addr. to low 8 bits
        r1 = r1 lsr 4;           	// Get low byte data        
        
		r2=[P_IOA_Buffer];	
//      r2|=0x0040;					//RE AT PA.6
		r2|=0x0080;                 //RE AT PA.7
		[P_IOA_Buffer]=r2;			//D12_RE=1       
        		                						
        pop r2,r2 from [sp] ;
        retf ;						//Data Return in R1
        .ENDP
           
//===================================================================================================
// 函  数:    	F_WriteDataToD12()
// 语  法:    	void F_WriteDataToD12(unsigned int Data)
// 描  述:   	向PDIUSBD12写数据
// 参  数:   	Data_or_Command:数据参数
// 返回值:   	无
//===================================================================================================
_F_WriteDataToD12: .PROC
		push bp to [sp];
        bp = sp + 1; 		
        push r1,r2 to [sp] ;

        r1=[bp+3];					//Get First Parament
        		        
        r1 = r1 lsl 4;           	// Prepare high 8 bits Addr. to low 8 bits
        r1 = r1 lsl 4;           	// Get low byte data
        
		r2=[P_IOA_Buffer];       
        r2&=0x00fd;					//Modify WR PIN(AT
        r2|=r1;
        [P_IOA_Buffer]=r2;         	// Send Data  			
        
//		r2=[P_IOA_Buffer];	
//      r2&=0xff7f;					//WE AT PA.7
		r2&=0xffbf;					//WE AT PA.6
		[P_IOA_Buffer]=r2;			//D12_WE=0	
		        	
//		r2|=0x0080;					//WE AT PA.7
		r2|=0x0040;					//WE AT PA.6
		[P_IOA_Buffer]=r2;			//D12_WE=1  
				
        pop r1,r2 from [sp] ;
        pop bp from [sp] ;        
        retf ;
        .ENDP

//===================================================================================================
// 函  数:    	F_WriteCmdToD12()
// 语  法:    	void F_WriteCmdToD12(unsigned int command)
// 描  述:   	向PDIUSBD12写数据或命令
// 参  数:   	Command:命令参数
// 返回值:   	无
//===================================================================================================
_F_WriteCmdToD12: .PROC
//        retf;//add
		push bp to [sp];
        bp = sp + 1; 		
        push r1,r2 to [sp] ;

        r1=[bp+3];					//Get First Parament
		        
		r2=[P_IOA_Buffer];
		
        r1 = r1 lsl 4;           	// Prepare high 8 bits Addr. to low 8 bits
        r1 = r1 lsl 4;          	// Get low byte data
        
        r2|=0x0002;					//D12_DC=1(Select Command)
        r2&=0x00ff;
        r2|=r1;
        [P_IOA_Buffer]=r2;         	// Send Data  			
        
//		r2=[P_IOA_Buffer];	
//      r2&=0xff7f;					//WE AT PA.7	
		r2&=0xffbf;        			//WE AT PA.6
		[P_IOA_Buffer]=r2;			//D12_WE=0	
		  
//      r2|=0x0080;					//WE AT PA.7
		r2|=0x0040;					//WE AT PA.6
		[P_IOA_Buffer]=r2;			//D12_WE=1  
				
        pop r1,r2 from [sp] ;
        pop bp from [sp] ;        
        retf ;
        .ENDP

⌨️ 快捷键说明

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