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

📄 spr4096.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		retf;
		.ENDP
//=======================================================================================
//FunctionName:F_Delay_Program_Time
//Description:
//Author:
//Date:
//Destroy:
//Input:
//Return:
//========================================================================================
.public F_Delay_Program_Time;
F_Delay_Program_Time:
		r1=C_Program_Time;			//6
?L_Wait_Time_Over:							//52cycle,1us @ 49Mhz       
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		nop;						//4
		
		nop;						//4
		nop;						//4
		r1-=1;						//3
		jnz ?L_Wait_Time_Over;		//5
		retf;						//12
//======================================================
// Function Name:	F_WriteBufferTo4096
// Description:		Program data in buffer to the SPR1024\4096 Flash.
// Input:			Buffer address,Address Low,Address Mid,Address Hi
// Output:			None
// Destroy:			r1;
// Used:			r1,bp;
// Stacks:			1;
//======================================================
_SP_WriteBufferTo4096:
F_WriteBufferTo4096:	.PROC
		push bp to [sp];
		bp=sp;
		bp+=7;
		[P_SIO_Stop]=r1;							//stop last transfer
		r1=[bp--];									//get address from stack
		[P_SIO_Addr_High]=r1;
		r1=[bp--];
		[P_SIO_Addr_Mid]=r1;
		r1=[bp--];
		[P_SIO_Addr_Low]=r1;
		
		r1=B_SIO_En+B_SIO_Write_En+C_SIO_Clk_16+C_SIO_Addr_Sel_24;
		[P_SIO_Ctrl]=r1;							//Write mode , CPU/16, 24 bit address
		bp = [bp];									//get data buffer address from stack
?L_NextByte:
		r1 = [bp++];
		jz ?L_BufferOver;
		[P_SIO_Start]=r1;							//Start transfer
		[P_SIO_Data]=r1;							//program the data
	
?L_WaitTransfer:
		R1 = [P_SIO_Start];
        R1 &= B_Busy;								//check transfer over
        JNE  ?L_WaitTransfer;
		call F_Delay_Program_Time;					//delay 60us
		[P_SIO_Stop]=r1;							//Stop transfer
		
		r1 = [P_SIO_Addr_Low];
		r1 += 1;
		[P_SIO_Addr_Low] = r1;
		r1 &= 0xFF;
		jnz ?L_NextByte;
		r1 = [P_SIO_Addr_Mid];
		r1 += 1;
		[P_SIO_Addr_Mid] = r1;
		r1 &= 0xFF;
		jnz ?L_NextByte;
		r1 = [P_SIO_Addr_High];
		r1 += 1;
		[P_SIO_Addr_High] = r1;
		jmp ?L_NextByte;
?L_BufferOver:
		pop bp from [sp];
		retf;
		.ENDP
//======================================================
// Function Name:	F_ReadARecordFrom4096
// Description:		Read n byte from the SPR4096 Flash.
// Input:			Record Number,Output Buffer
// Output:			None
// Destroy:			r1;
// Used:			r1,bp;
// Stacks:			1;
//======================================================
_SP_ReadARecordFrom4096:
F_ReadARecordFrom4096:	.PROC
		push bp to [sp];
		bp=sp+4;
		[P_SIO_Stop]=r1;									//stop last transfer
		r1=C_TelMem_Addr_Lo;
		[P_SIO_Addr_Low]=r1;
		r1=[bp++];											//get Record number from stack
		cmp r1,C_DownLoadCard;
		jz ?L_DownLoad
		r1 += C_TelMem_Addr_Mid;
		[P_SIO_Addr_Mid]=r1;
		r1 = C_TelMem_Addr_Hi;
		[P_SIO_Addr_High]=r1;
		
?L_StartRead:
		r1=B_SIO_En+C_SIO_Clk_16+C_SIO_Addr_Sel_24;
		[P_SIO_Ctrl]=r1;									//Read mode , CPU/4, 24 bit address
		[P_SIO_Start]=r1;									//Start transfer
		r1=[P_SIO_Data];									//preRead
		bp = [bp];											//get output address
?L_ReadLoop:
?L_WaitTransfer:
		R1 = [P_SIO_Start];
        R1 &= B_Busy;										//check transfer over
        JNE  ?L_WaitTransfer;
		
		r1 = [P_SIO_Data];									//Read data
		r1 &= 0x00FF;
		cmp r1,0xFF;										//Data over?
		jz ?L_ReadOver;
		[bp++] = r1;
		jmp ?L_ReadLoop;
?L_ReadOver:
		r1 = 0;
		[bp] = r1;
?L_WaitTransfer1:
		r1 = [P_SIO_Start];
        r1 &= B_Busy;										//check transfer over
        JNE  ?L_WaitTransfer1;
		[P_SIO_Stop]=r1;									//Stop transfer
		pop bp from [sp];
		retf;

?L_DownLoad:
		r1 = C_DownLoad_Addr_Mid;
		[P_SIO_Addr_Mid]=r1;
		r1 = C_DownLoad_Addr_Hi;
		[P_SIO_Addr_High]=r1;
		jmp ?L_StartRead;
		.ENDP
		
//======================================================
// Function Name:	F_ReadARecordFrom4096RAM
// Description:		Read n byte from the SPR4096 SRAM.
// Input:			Record Number,Output Buffer
// Output:			None
// Destroy:			r1;
// Used:			r1,bp;
// Stacks:			1;
//======================================================
_SP_ReadARecordFrom4096RAM:
F_ReadARecordFrom4096RAM:	.PROC
		push bp to [sp];
		bp=sp+4;
			r1 = [P_IOB_Buffer];
			r1 |= 0x0800;						//output high
			[P_IOB_Data] = r1;
			
		[P_SIO_Stop]=r1;									//stop last transfer
		r1=0;
		[P_SIO_Addr_Low]=r1;
		[P_SIO_Addr_High]=r1;
		r1=[bp++]
		r1 &= 0x7;											//get Record number from stack
		[P_SIO_Addr_Mid]=r1;
		
		r1=B_SIO_En+C_SIO_Clk_16+C_SIO_Addr_Sel_24;
		[P_SIO_Ctrl]=r1;									//Read mode , CPU/4, 16 bit address
		[P_SIO_Start]=r1;									//Start transfer
		r1=[P_SIO_Data];									//preRead
		bp = [bp];											//get output address
?L_ReadLoop:
?L_WaitTransfer:
		R1 = [P_SIO_Start];
        R1 &= B_Busy;										//check transfer over
        JNE  ?L_WaitTransfer;
		
		r1 = [P_SIO_Data];									//Read data
		r1 &= 0x00FF;
		cmp r1,0xFF;										//Data over?
		jz ?L_ReadOver;
		[bp++] = r1;
		jmp ?L_ReadLoop;
?L_ReadOver:
		r1 = 0;
		[bp] = r1;
?L_WaitTransfer1:
		r1 = [P_SIO_Start];
        r1 &= B_Busy;										//check transfer over
        JNE  ?L_WaitTransfer1;
		[P_SIO_Stop]=r1;									//Stop transfer
			
			r1 = [P_IOB_Buffer];
			r1 &= 0xF7FF;						//output high
			[P_IOB_Data] = r1;

		pop bp from [sp];
		retf;
		.ENDP
//======================================================
// Function Name:	F_WriteARecordTo4096RAM
// Description:		Write n byte To the SPR4096 SRAM.
// Input:			Record Number,Input Buffer
// Output:			None
// Destroy:			r1;
// Used:			r1,bp;
// Stacks:			1;
//======================================================		
_SP_WriteARecordTo4096RAM:
F_WriteARecordTo4096RAM:	.PROC

		push bp to [sp];
		bp=sp+4;
			r1 = [P_IOB_Buffer];
			r1 |= 0x0800;						//output high
			[P_IOB_Data] = r1;
			
		[P_SIO_Stop]=r1;									//stop last transfer
		r1=0;
		[P_SIO_Addr_Low]=r1;
		[P_SIO_Addr_High]=r1;
		r1=[bp++]
		r1 &= 0x7;											//get Record number from stack
		[P_SIO_Addr_Mid]=r1;
		
		r1=B_SIO_En+B_SIO_Write_En+C_SIO_Clk_16+C_SIO_Addr_Sel_24;
		[P_SIO_Ctrl]=r1;							//Write mode , CPU/16, 16 bit address
		bp = [bp];									//get data buffer address from stack
?L_NextByte:
		r1 = [bp++];
		jz ?L_BufferOver;
		[P_SIO_Start]=r1;							//Start transfer
		[P_SIO_Data]=r1;							//program the data
	
?L_WaitTransfer:
		R1 = [P_SIO_Start];
        R1 &= B_Busy;								//check transfer over
        JNE  ?L_WaitTransfer;
		[P_SIO_Stop]=r1;							//Stop transfer
		
		r1 = [P_SIO_Addr_Low];
		r1 += 1;
		[P_SIO_Addr_Low] = r1;
		r1 &= 0xFF;
		jnz ?L_NextByte;
		r1 = [P_SIO_Addr_Mid];
		r1 += 1;
		[P_SIO_Addr_Mid] = r1;
		jmp ?L_NextByte;
?L_BufferOver:
		r1 = 0xFF;
		[P_SIO_Start]=r1;							//Start transfer
		[P_SIO_Data]=r1;							//program the data
?L_WaitTransfer1:
		R1 = [P_SIO_Start];
        R1 &= B_Busy;								//check transfer over
        JNE  ?L_WaitTransfer1;
		[P_SIO_Stop]=r1;							//Stop transfer
		
			r1 = [P_IOB_Buffer];
			r1 &= 0xF7FF;						//output high
			[P_IOB_Data] = r1;

		pop bp from [sp];
		retf;
		.ENDP
//======================================================
// Function Name:	F_Clr4096RAM
// Description:		Clear the SPR4096 SRAM.
// Input:			Record Number,Input Buffer
// Output:			None
// Destroy:			r1;
// Used:			r1,bp;
// Stacks:			1;
//======================================================	
_SP_Clr4096RAM:	
F_Clr4096RAM:	.PROC
			r1 = [P_IOB_Buffer];
			r1 |= 0x0800;						//output high
			[P_IOB_Data] = r1;

		[P_SIO_Stop]=r1;									//stop last transfer
		r2 = 0;									//start from 0 record
		r1 = 0;
		[P_SIO_Addr_Low] = r1;
		[P_SIO_Addr_High]=r1;
		[P_SIO_Addr_Mid] = r2;
		
		r1=B_SIO_En+B_SIO_Write_En+C_SIO_Clk_16+C_SIO_Addr_Sel_24;
		[P_SIO_Ctrl]=r1;							//Write mode , CPU/16, 16 bit address
		r1 = 0xFF;
?L_ClrLoop:
		[P_SIO_Start]=r1;							//Start transfer
		[P_SIO_Data]=r1;							//program the data
	
?L_WaitTransfer:
		R1 = [P_SIO_Start];
        R1 &= B_Busy;								//check transfer over
        JNE  ?L_WaitTransfer;
		[P_SIO_Stop]=r1;		
		
		r2 += 1;
		r2 &= 7;
		jz ?L_ClrOver;
		[P_SIO_Addr_Mid] = r2;
		jmp ?L_ClrLoop;
?L_ClrOver:
			r1 = [P_IOB_Buffer];
			r1 &= 0xF7FF;						//output high
			[P_IOB_Data] = r1;
			
		retf
		.ENDP

⌨️ 快捷键说明

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