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

📄 sram.asm

📁 给出了W29C040的驱动子程序
💻 ASM
字号:
//////////////////////////////////////////////////////////////////
// Function: SRAM access function for SACM_DVR Auto Mode
//////////////////////////////////////////////////////////////////
.include hardware.inc


.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 = 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 + -