📄 hm6264_driver.asm
字号:
//HM6264的驱动程序 基础底层,仅有字节读写....
//2005 08 09
//Edit by xinqiang (小丑) Mz出品
//xinqiang@sunnorth.com.cn
//凌阳科技 教育推广中心 TS
.include hardware.inc
//接线:IOA0~IOA12 接13位地址线 输出口
// IOB0~7 接8位数据线 输入口/输出口 默认输入口
// IOB8 WE 输出口 默认低电平
// IOB9 CS2 输出口 默认高电平
// IOB10 OE 输出口 默认低电平
// IOB11 CS1 输出口 默认低电平
.define Flag_WE 0x0100 //定义HM6264的WE线
.define Flag_CS2 0x0200 //定义HM6264的CS2线(实际应用中CS2接高电平即可)
.define Flag_OE 0x0400 //定义HM6264的OE线
.define Flag_CS1 0x0800 //定义HM6264的CS1线
.code
M_HM6264_IOPort_IN:.macro //端口转换为输入口(IOB0~7)
r3 = [P_IOB_Dir]
r3 = r3&0xff00
[P_IOB_Dir] = r3
r3 = [P_IOB_Attrib]
r3 = r3&0xff00
[P_IOB_Attrib] = r3
.endm
M_HM6264_IOPort_OUT:.macro //端口转换为输出口(IOB0~7)
r3 = [P_IOB_Dir]
r3 = r3|0x00ff
[P_IOB_Dir] = r3
r3 = [P_IOB_Attrib]
r3 = r3|0x00ff
[P_IOB_Attrib] = r3
.endm
//==============================================================//
//函数:void HM6264_Initial(void) C语言调用
//描述:HM6264(8KX8Bit RAM)驱动程序端口初始化程序
//参数:无
//返回:无
//注意:IOA0~IOA12 接13位地址线 输出口
// IOB0~7 接8位数据线 输入口/输出口 默认输入口
// IOB8 WE 输出口 默认低电平
// IOB9 CS2 输出口 默认高电平
// IOB10 OE 输出口 默认低电平
// IOB11 CS1 输出口 默认低电平
//==============================================================//
.public _HM6264_Initial
_HM6264_Initial:
HM6264_Initial:
push r1 to [sp]
r1 = [P_IOA_Dir] //initial IOA Port IOA0~12 as OutPut
r1 = r1|0x1fff
[P_IOA_Dir] = r1
r1 = [P_IOA_Attrib]
r1 = r1|0x1fff
[P_IOA_Attrib] = r1
r1 = [P_IOA_Buffer]
r1 = r1|0x1fff
[P_IOA_Data] = r1
r1 = [P_IOB_Dir]
r1 = r1|0x0f00
r1 = r1&0xff00
[P_IOB_Dir] = r1
r1 = [P_IOB_Attrib]
r1 = r1|0x0f00
r1 = r1&0xff00
[P_IOB_Attrib] = r1
r1 = [P_IOB_Buffer]
r1 = r1|0x0800 ///CS1 as hight
r1 = r1&0xff00
[P_IOB_Data] = r1
pop r1 from [sp]
retf
//========================================================================//
//函数:void HM6264_WriteByte(unsigned int Addr,unsigned int Data) C语言调用
//描述:HM6264(8KX8Bit RAM)字节写程序
//参数:Addr 写入地址 Data 写入数据
//返回:无
//注意:Addr 0x0000~0x1fff Data 低八位有效
//=========================================================================//
.public _HM6264_WriteByte
_HM6264_WriteByte:
HM6264_WriteByte:
push r1,r5 to [sp]
r5 = sp+8
r1 = [r5] //Get Address
r1 = r1&0x1fff
r2 = [r5+1] //Get Writint Data
r2 = r2&0x00ff
M_HM6264_IOPort_OUT //Set the IO Port as OutPut
r3 = [P_IOA_Buffer]
r3 = r3&0xe000
r3 = r3|r1
[P_IOA_Data] = r3 //Send Address
r1 = [P_IOB_Buffer]
r1 = r1|Flag_OE
[P_IOB_Buffer] = r1 //OE to Hight
r1 = r1&(~Flag_CS1)
[P_IOB_Data] = r1
r1 = r1&(~Flag_WE)
[P_IOB_Data] = r1
r1 = r1&0xff00
r1 = r1|r2
[P_IOB_Data] = r1
nop
nop
r1 = r1|(Flag_WE+Flag_CS1)
[P_IOB_Data] = r1
r1 = r1|Flag_OE
[P_IOB_Data] = r1
M_HM6264_IOPort_IN
pop r1,r5 from [sp]
retf
//========================================================================//
//函数:unsigned int HM6264_ReadByte(unsigned int Addr) C语言调用
//描述:HM6264(8KX8Bit RAM)字节读取程序
//参数:Addr 地址
//返回:读回数据,低八位有效,R1返回
//注意:Addr 0x0000~0x1fff
//=========================================================================//
.public _HM6264_ReadByte
_HM6264_ReadByte:
HM6264_ReadByte:
push r2,r3 to [sp]
r5 = sp+5
r1 = [r5] //Get Address
r1 = r1&0x1fff
// r2 = [r5+1] //Get Writint Data
// M_HM6264_IOPort_OUT //Set the IO Port as OutPut
r2 = [P_IOB_Buffer]
r2 = r2|Flag_WE
[P_IOB_Data] = r2
r3 = [P_IOA_Buffer]
r3 = r3&0xe000
r3 = r3|r1
[P_IOA_Data] = r3 //Send Address
r2 = [P_IOB_Buffer]
r2 = r2&(~Flag_CS1)
[P_IOB_Buffer] = r2 //
r2 = r2&(~Flag_CS1)
[P_IOB_Data] = r2
r2 = r2&(~Flag_OE)
[P_IOB_Data] = r2
nop
r1 = [P_IOB_Data]
r1 = r1&0x00ff
r2 = r2|(Flag_OE+Flag_CS1)
[P_IOB_Data] = r2
// r1 = r1|Flag_OE
// [P_IOB_Data] = r1
// M_HM6264_IOPort_IN
pop r2,r3 from [sp]
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -