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

📄 sram.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//////////////////////////////////////////////////////////////////
// Function: SRAM access function for SACM_DVR Auto Mode
//////////////////////////////////////////////////////////////////
.INCLUDE hardware.inc
.DEFINE	P_WatchDog_Clear	0x7012
.RAM 
.PUBLIC  HighAddr      
.VAR  HighAddr

.CODE
//***********************************************
// 功能:写SRAM初始化
// 入口:无
// 出口:无
//***********************************************
.PUBLIC _SP_InitWriteSRAM
.PUBLIC F_SP_InitWriteSRAM 
_SP_InitWriteSRAM:         .PROC
F_SP_InitWriteSRAM:
		push r1 to [sp]
		r1=0x0001;
		[P_WatchDog_Clear]=r1;
        r1 = 0xFFF0 
        [P_IOA_Dir] = r1     	// IOA8---IOA15 接数据线,写入时设置为同相高电平输出
        [P_IOA_Attrib] = r1  	// IOA4--IOA7 接SRAM控制线(低电平有效),设置为同相高电平输出
        [P_IOA_Data] = r1    	// IOA0--IOA3 接键盘,设置为带下拉电阻的输入
        
        r1 = 0xFFFF 
        [P_IOB_Dir] = r1     	// IOB15--IOB0 接SRAM地址线,设置为输出
        [P_IOB_Attrib] = r1  
        [P_IOB_Data] = r1     
         
        pop r1 from [sp]
        retf 
        .ENDP

//***********************************************
// 功能:读SRAM初始化
// 入口:无
// 出口:无
//***********************************************
.PUBLIC F_SP_InitReadSRAM 
.PUBLIC _SP_InitReadSRAM 

_SP_InitReadSRAM:          .PROC
F_SP_InitReadSRAM:
		push r1 to [sp]
        r1 = 0x00F0 
        [P_IOA_Dir] = r1        //IOA8---IOA15 接数据线,读出时设置为带下拉电阻的输入
        [P_IOA_Attrib] = r1     //IOA4--IOA7 接SRAM控制线(低电平有效),设置为同相高电平输出
        r1 = 0x00F0             //IOA0--IOA3 接键盘,设置为带下拉电阻的输入
        [P_IOA_Data] = r1       

        r1 = 0xFFFF 
        [P_IOB_Dir] = r1        //IOB15--IOB0 接SRAM地址线,设置为同相高电平输出
        [P_IOB_Attrib] = r1     
        [P_IOB_Data] = r1        
        

        pop r1 from [sp]
        retf 
        .ENDP

//*****************************************************************
//主调函数:main.c
//功能:从SRAM中读取一个WORD数据
//入口:SRAM的17位地址,参数通过堆栈传递
//出口:r1------- 16位数据,通过r1返回
//******************************************************************  
.PUBLIC _SP_ReadSRAM 
_SP_ReadSRAM:              .PROC
        push bp to [sp] 
        bp = sp + 1 
        r1 = [bp+3]         	// SRAM 地址低位 A15---A0
        r2 = [bp+4]         	// SRAM 地址高位 A16
        JZ    Read_Low_Addr
        r2 = 0x0080         	// IOA7接A16
 Read_Low_Addr:
        [HighAddr]=r2
            
        call	F_SP_ReadSRAM	//读子程序  r1: 返回数据值
        pop bp from [sp] 
        retf 
        .ENDP

//*****************************************************************
//功能:读子程序
//入口:[HighAddr]------地址线 A16 数据
//      r1------- 低16位地址
//出口:r1------- 16位数据
//说明:由于HM628128A的数据宽度为8位,一个WORD数据分两次读出,
//      先读低8位,再读高8位
//******************************************************************                 
.PUBLIC F_SP_ReadSRAM
F_SP_ReadSRAM:
        push r2,r4 to [sp]
       
        r3 = [HighAddr]         //IOA7接地址 A16
        r3|=0x0070              //IOA4接we,IOA5接oe,IOA6接cs,它们低电平有效
        [P_IOA_Buffer] = r3 
        
        [P_IOB_Buffer] = r1     //地址A15---A0
        r4 = r1                 
        
        r3 = 0x0010             //读允许设置
        r3|=[HighAddr]          //A16
        [P_IOA_Buffer] = r3     // *CE=0, *OE=0, *WE=1
        // wait state

        r1 = [P_IOA_Data]       // 读数据
        r1 = [P_IOA_Data]        
        r1 = r1 lsr 4           // 将数据移入低8位
        r2 = r1 lsr 4            
        
        r3 |= 0x0030            // *CE=0, *OE=1, *WE=1 
        [P_IOA_Buffer] = r3     
       
        r4 += 1         
        [P_IOB_Buffer] = r4     //下一字节
        

        r3 = 0x0010 
        r3|=[HighAddr]          //A16
        [P_IOA_Buffer] = r3     //*CS=0, *OE=0, *WE=1 

        // wait state

        r1 = [P_IOA_Data]       // 读数据/////////////////////////////////
        r1 = [P_IOA_Data]        
        r1 = r1 & 0xFF00        // 高8位数据
        r1 |= r2                // r1------ 返回一个字数据
        r3 |= 0x0070 
        [P_IOA_Buffer]=r3       // *CS=1, *OE=1, *WE=1 
		pop r2,r4 from [sp]      
        retf 



//*****************************************************************
//主调函数:main.c
//功能:向SRAM中写入一个WORD数据
//入口:SRAM的17位地址、一个WORD数据,参数通过堆栈传递
//出口:无
//******************************************************************  
.PUBLIC _SP_WriteSRAM 
_SP_WriteSRAM: .PROC
        push bp to [sp] 
        
        bp = sp + 1 
        r1 = [bp+3]                // SRAM 地址低位
        r2 = [bp+4]                // SRAM 地址高位
        JZ    Write_Low_Addr
        r2 = 0x0080        
 Write_Low_Addr:
        [HighAddr]=r2
        
        r2 = [bp+5]                //待写入的一个WORD数据
        
        call	F_SP_WriteSRAM    //调用写入子程序
        pop bp from [sp] 
        retf 
        .ENDP


//*****************************************************************
//功能:写子程序
//入口:[HighAddr]------地址线 A16 数据
//      r1------- 低16位地址
//      r2------- 待写入的一个WORD数据
//出口:无
//说明:由于HM628128A的数据宽度为8位,一个WORD数据分两次写入,
//      先写低8位,再写高8位
//****************************************************************** 
.PUBLIC F_SP_WriteSRAM
F_SP_WriteSRAM:
        push r1,r3 to [sp]
        
        r3 = [HighAddr]         //地址 A16
        r3|=0x0070
        [P_IOA_Buffer] = r3 
        
        [P_IOB_Data] = r1       //低位地址 A15---A0
        r3 = r2                 //存待写入数据
        r2 = r2 lsl 4           //低字节,将低8位移到高8位(数据线是IOA15---IOA8)
        r2 = r2 lsl 4           

        r2 |=0x0020             // *CS=0, *OE=1, *WE=0 ,写允许
        r2|=[HighAddr] 
        [P_IOA_Buffer] = r2     //写数据
        // wait state,
        
        r2 |=0x0010             // *WE=1,*CS=0 
        [P_IOA_Buffer] = r2     
        // wait state

        // Save High Byte
        r1 += 1 
        [P_IOB_Data] = r1       // 高字节

        r3 &=0xff00 
        r3 |= 0x0020            // *CE=0,*OE=1 ,*WE=0
        r3|=[HighAddr] 
        [P_IOA_Buffer] = r3     //写数据 
       
       // wait state
        
        r3 |= 0x0070 
        [P_IOA_Buffer] = r3     // *CE=1, *WE=1, *OE=1  
        pop r1,r3 from [sp]
        retf 

        

//========================================================================================        
// End of sram.asm
//========================================================================================
     

⌨️ 快捷键说明

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