📄 sram.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 + -