📄 d12.asm
字号:
//============================================================================//
// 文件名: D12.asm
// 描 述: 处理D12芯片的读、写操作
// 日 期: 2003/04/03
// 库文件: NONE
//=============================================================================//
.include hardware.inc
.public _SP_InitWriteD12
.public _SP_InitReadD12
.public F_SP_InitWriteD12
.public F_SP_InitReadD12
.public _SP_ReadD12
.PUBLIC F_SP_ReadD12
.public _SP_WriteCmdOrDataToD12
.PUBLIC F_SP_WriteCmdOrDataToD12
.CODE
//=====================================================================
// 函数: SP_InitWriteD12
// 语法: void _SP_InitWriteD12(void) (for c language)
// 描述: 写数据到D12初始化
// 参数: 无
// 返回: 无
//=====================================================================
_SP_InitWriteD12: .proc
F_SP_InitWriteD12:
push r1,r1 to [sp]
R1 = 0xFFF0
[P_IOA_Dir] = R1 // Port IOA15- IOA8: 同相高电平输出
[P_IOA_Attrib] = R1 //
R1 = 0xFFF0 //
[P_IOA_Data] = R1 //
R1 = 0x003f //
[P_IOB_Data] = R1 //
pop r1,r1 from [sp]
retf
.endp
//=====================================================================
// 函数: SP_InitReadD12
// 语法: void SP_InitReadD12(void) (for c language)
// 描述: 初始化读数据
// 参数: 无
// 返回: 无
//=====================================================================
_SP_InitReadD12: .PROC
F_SP_InitReadD12:
push r1,r1 to [sp]
R1 = 0x00F0
[P_IOA_Dir] = R1 // Port IOA15- IOA8: 设置为悬浮式输入input(FL)
R1 = 0xFFF0 //
[P_IOA_Attrib] = R1 //
R1 = 0x00F0 //
[P_IOA_Data] = R1 //
R1 = 0x003f //
[P_IOB_Data] = R1 //
pop r1,r1 from [sp]
retf
.ENDP
//=====================================================================
// 函数: SP_ReadD12
// 语法: void SP_ReadD12(void) (for c language)
// 描述: SPCE061A从D12芯片读数据
// 参数: 无
// 返回: 无
//=====================================================================
_SP_ReadD12: .PROC
push bp to [sp]
bp = sp + 1
r1 = [bp+3] // D12 Address
call F_SP_ReadD12 // R1: return value
pop bp from [sp]
retf
.ENDP
F_SP_ReadD12:
push r2,r3 to [sp]
R1 = R1 lsl 4 // move 02 to IOA8-IOA15
R1 = R1 lsl 4
R1&=0xfff0 //add at 0406
[P_IOA_Data] = R1 // 送偶地址到D12
R3 = 0x007f // set CS_N=0, ALE=IOB8=1,RD_N=1,WR_N=1;RESET_N=1,INT_N=1
[P_IOB_Data] = R3
r1=0x003f
[P_IOB_Data] = R1 // CS_N=0,ALE=0,RD_N=1,WR_N=1;RESET_N=1,INT_N=1
R1=0x002f;
[P_IOB_Data] = R1 // CS_N=0,ALE=0,RD_N=0,WR_N=1;RESET_N=1,INT_N=1
nop;
R1 = [P_IOA_Data] // Get data
R1 = R1 lsr 4 // Prepare high 8 bits Addr. to low 8 bits
R2 = R1 lsr 4 // Get low byte data
R1=R2; // R1 save ruturn value
R2 = 0x003f; // CS_N=0,ALE=0,RD_N=1,WR_N=1 ;RESET_N=1,INT_N=1
[P_IOB_Buffer] = R2 //
pop r2,r3 from [sp] // don't pop r1(return value)
retf
//=====================================================================
// 函数: SP_WriteCmdOrDataToD12
// 语法: void SP_WriteCmdOrDataToD12(void) (for c language)
// 描述: SPCE061A写数据或命令到D12芯片
// 参数: 无
// 返回: 无
//=====================================================================
_SP_WriteCmdOrDataToD12: .PROC
push bp to [sp]
bp = sp + 1
push r1,r2 to [sp]
r1 = [bp+3] // Address
r2 = [bp+4] // Data
call F_SP_WriteCmdOrDataToD12
pop r1,r2 from [sp]
pop bp from [sp]
retf
.ENDP
F_SP_WriteCmdOrDataToD12:
push r1,r3 to [sp]
R1 = R1 lsl 4;
R1 = R1 lsl 4;
R2 = R2 lsl 4 // shift low 8 bits data to high 8 bits
R2 = R2 lsl 4 //
R1&=0xfff0;
[P_IOA_Data] = R1; // move 02 or 03 Addr to IOA8-IOA15
R1=0x007f; // CS_N=0,ALE=IOA7=1,RD_N=1,WR_N=1,RESET_N=1,INT_N=1
[P_IOB_Data] = R1; // ALE=1
R1=0x003f; // CS_N=0,ALE=IOA7=0,RD_N=1,WR_N=1;RESET_N=1,INT_N=1
[P_IOB_Data] = R1; // 在ALE 下降沿的时候,D12锁定地址;
R1=0x001f;
R2&=0xfff0;
[P_IOA_Buffer] = R2 // 准备数据写入D12
[P_IOB_Data] = R1; // CS_N=0,ALE=0, RD_N=1, WR_N=0;RESET_N=1,INT_N=1
nop;
R1=0x003f; //CS_N=0,ALE=0, RD_N=1, WR_N=1;
[P_IOB_Data] = R1
pop r1,r3 from [sp]
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -