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

📄 access4096.asm

📁 本人下载的电力系统相关资料,具有极其重要的参考价值
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.define C_SCK_PIN				0x0001
.define C_SDA_PIN				0x0002
.define	P_SCK_Data				0x7000;		//P_IOA_Data
.define	P_SCK_Buffer			0x7001;		//P_IOA_Buffer
.define	P_SCK_Dir				0x7002;		//P_IOA_Dir
.define	P_SCK_Attrib			0x7003;		//P_IOA_Attrib
.define	P_SDA_Data				0x7000;		//P_IOA_Data
.define	P_SDA_Buffer			0x7001;		//P_IOA_Buffer
.define	P_SDA_Dir				0x7002;		//P_IOA_Dir
.define	P_SDA_Attrib			0x7003;		//P_IOA_Attrib
.define P_SystemClock           0x7013

.DEFINE P_Watchdog_Clear    	0x7012         // Watchdog Reset
.public  R_IO_ReadData;
.const C_Program_Time			=4    		//60us
.const C_SectorErase_Time		=400		//60us*400=24ms
.const C_MassErase_Time			=1200		//60us*1166=70ms

.IRAM
.VAR R_IO_ReadData=0;
.code
//===========================================================================================
// Function Name: 
// Description  :  
// Syntax       :  
// Input        :
// Output       : 
// Destroy 		: 
// Used 		: 
//=====================================================================================
.public  _F_SPR4096_IO_Initial;
_F_SPR4096_IO_Initial:
		//Initial SCK pin output with high;
		r1=[P_SCK_Attrib];
		r1|=C_SCK_PIN;
		[P_SCK_Attrib]=r1;
		r1=[P_SCK_Dir];
		r1|=C_SCK_PIN;
		[P_SCK_Dir]=r1;
		r1=[P_SCK_Buffer];
		r1|=C_SCK_PIN;
		[P_SCK_Buffer]=r1;
		//Initial SDA pin output with high;
		r1=[P_SDA_Attrib];
		r1|=C_SDA_PIN;
		[P_SDA_Attrib]=r1;
		r1=[P_SDA_Dir];
		r1|=C_SDA_PIN;
		[P_SDA_Dir]=r1;
		r1=[P_SDA_Buffer];
		r1|=C_SDA_PIN;
		[P_SDA_Buffer]=r1;
		r1=0x0089
		[P_SystemClock]=r1
		retf;
//===========================================================================================
// Function Name: SPR4096_IO_WriteAByte
// Description  :  
// Syntax       : SPR4096_IO_WriteAByte(unsigned long int Addr,Data);
// Input        :
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================

.PUBLIC  _SPR4096_IO_WriteAByte;
_SPR4096_IO_WriteAByte:
		push bp to [sp];
		bp = sp + 1;	
		push r2,r4 to [sp];
		r1=[bp+3];				//addr low 
		r2=[bp+4];				//addr high
		r3=[bp+5];				//data
		call F_SPR4096_IO_WriteAByte;
		pop r2,r4 from [sp];
		pop bp from [sp];
		retf;
//===========================================================================================
// Function Name: F_SPR4096_IO_WriteAByte
// Description  :  
// Syntax       : 
// Input        : r1:addr low ;r2:addr high;r3:data
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
.PUBLIC  F_SPR4096_IO_WriteAByte;
F_SPR4096_IO_WriteAByte:
	//	call F_SPR4096_IO_Initial_IO_FlashMode;// for test may be del
		call F_IO_EndReadOrWrite;	//add for test
		call F_IO_Set_Start_Flag;
		call F_IO_WriteAddrTO4096;
		call F_WriteDataTO4096;
		call F_IO_EndReadOrWrite;//F_EndWrite;
		call F_Delay_Program_Time;
		retf;
		
//===========================================================================================
// Function Name: SPR4096_IO_ReadAByte
// Description  :  
// Syntax       : unsigned int SPR4096_IO_ReadAByte (unsigned long int Addr);
// Input        : 
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
.PUBLIC  _SPR4096_IO_ReadAByte;
_SPR4096_IO_ReadAByte:
		push bp to [sp];
		bp = sp + 1;	
		push r2,r4 to [sp];
		r1=[bp+3];				//low addr
		r2=[bp+4];				//high addr
		call F_SPR4096_IO_ReadAByte;
		pop r2,r4 from [sp];
		pop bp from [sp];
		retf;
//===========================================================================================
// Function Name: SPR4096_IO_ReadAByte
// Description  :  
// Syntax       : call SPR4096_IO_ReadAByte;
// Input        : r1:low addr(16bit);r2:high addr(8bit);
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
.PUBLIC  F_SPR4096_IO_ReadAByte;	
F_SPR4096_IO_ReadAByte:
		r2|=0x0100;				//set read flag
	//	call F_SPR4096_IO_Initial_IO_FlashMode;// for test may be del
		call F_IO_EndReadOrWrite;	//add for test
		call F_IO_Set_Start_Flag;
		call F_IO_WriteAddrTO4096;
		call F_IO_ReadDataFrom4096;
		call F_IO_Set_SDA_LowOutPut;
		call F_IO_EndReadOrWrite;
		r1=[R_IO_ReadData];
		retf;		
		
























//===========================================================================================
// Function Name: 
// Description  :  
// Syntax       :  
// Input        :
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
F_IO_Set_Start_Flag:
		push r1 to [sp];
		//set communication start flag;
		r1=[P_SDA_Buffer];
		r1 &=C_SDA_PIN^0xffff;
		[P_SDA_Buffer]=r1;			//set SDA pin low
		call F_BringAClockDelay;
		
		r1=[P_SCK_Buffer];
		r1 &=C_SCK_PIN^0xffff;	
		[P_SCK_Buffer]=r1;			//set SCK pin low
		pop r1 from [sp];
		retf
//===========================================================================================
// Function Name: 
// Description  :  
// Syntax       :  
// Input        :
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
F_IO_ReadDataFrom4096:
		push r1,r2 to [sp];
//set SDA pin to input with float;
		r1=[P_SDA_Attrib];
		r1|=C_SDA_PIN;
		[P_SDA_Attrib]=r1;
		r1=[P_SDA_Dir];
		r1&=C_SDA_PIN^0xFFFF;
		[P_SDA_Dir]=r1;
		r1=[P_SDA_Buffer];
		r1&=C_SDA_PIN^0xFFFF;
		[P_SDA_Buffer]=r1;
		r1=0;
		r4=8;
L_Save_8bit_Data:
		r1 =r1 lsl 1;
		r2=[P_SDA_Data];
		cmp r4,1
		JE L_BringAEndClock;
		call F_BringAClock;
		jmp L_BringAClock;
L_BringAEndClock:
		call F_BringAEndClock;
L_BringAClock:	
		r2&=C_SDA_PIN;
		jz L_Data_Bit_is_zero;
		r2=0x0001;
		r1+=r2;
L_Data_Bit_is_zero:
		r4-=1;
		jnz L_Save_8bit_Data;
		[R_IO_ReadData]=r1;
		pop r1,r2 from [sp];
		retf
//===========================================================================================
// Function Name: 
// Description  :  
// Syntax       :  
// Input        :
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
F_BringAClock:
		push r1 to [sp];
		//set sclk=0;
		r1=[P_SCK_Buffer];
		r1&=C_SCK_PIN^0xFFFF;
		[P_SCK_Buffer]=r1;
		call F_BringAClockDelay;
		//set sclk=1;
		r1|=C_SCK_PIN;
		[P_SCK_Buffer]=r1;
		call F_BringAClockDelay;
		//set sclk=0;
		r1&=C_SCK_PIN^0xFFFF;
		[P_SCK_Buffer]=r1;
		pop r1 from [sp];
		retf;
//===========================================================================================
// Function Name: 
// Description  :  
// Syntax       :  
// Input        :
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================	
F_BringAClockDelay:
		push r1 to [sp];
		r1=5;
L_BringAClockDelay:
		r1-=1;
		JNZ L_BringAClockDelay;
		pop r1 from [sp];
		retf;
//===========================================================================================
// Function Name: 
// Description  :  
// Syntax       :  
// Input        : r1: low  addr(16 bits); r2: high addr(9 bits);
// Output       : 
// Destroy 		: 
// Used 		: 
//==========================================================================================
F_IO_WriteAddrTO4096:
		push r1,r4 to [sp];
		r3=0x9;
L_Send9BitAddr:
		r4=r2&0x0100;
		JZ L_9BitAddr_Is_Zero;
		r4=[P_SDA_Buffer];
		r4|=C_SDA_PIN;
		[P_SDA_Buffer]=R4;			//Set SDA to high;
		call F_BringAClock;	
		jmp L_Send9BitAddr_Next;
L_9BitAddr_Is_Zero:

⌨️ 快捷键说明

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