📄 ds13020.asm
字号:
;内存数据定义
BitCnt data 30h ; 数据位计数器
ByteCnt data 31h ; 数据字节计数器
Command data 32h ; 命令字节地址
RcvDat DATA 40H ; 接收数据缓冲区
XmtDat DATA 50H ; 发送数据缓冲区
;端口位定义
Dio bit P1.3 ; 数据传送总线
Sclk bit P1.4 ; 时钟控制总线
nRst bit P1.2 ; 复位总线
ORG 0x0000
AJMP Main
Main:
MOV SP, #0x60
MOV SCON, #0x50;
MOV TMOD, #0x21; //Timer0 - 16bit timer mode
MOV TL1, #253;
MOV TH1, #253;
SETB TR1
SETB TI
OscEnable(); // 时钟停止位使能
WriDs(0x8e,0x0); // 允许写入单个数据字节
ChargeEnable(); // 充电使能
Osc24();
void OscEnable()
{
WriDs(0x80,0);
}
void Osc24()
{
WriDs(0x84,0);
}
void ChargeEnable()
{
WriDs(0x90,0xa5); //涓流充电,一个二极管,一个2k的电阻
}
Loop:
Send_Byte:
CLR nRst ;复位引脚为低电平所有数据传送终止
NOP
CLR SCLK ;清时钟总线
NOP
SETB nRst ;复位引脚为高电平逻辑控制有效
NOP
MOV A, Command ;准备发送命令字节
MOV BitCnt, #08h ;传送位数为8
S_Byte0:
RRC A ;将最低位传送给进位位C
MOV Dio, C ;位传送至数据总线
NOP
SETB Sclk ;时钟上升沿发送数据有效
NOP
CLR Sclk ;清时钟总线
DJNZ BitCnt, S_Byte0 ;位传送未完毕则继续
NOP
S_Byte1: ;准备发送数据
MOV A, @R0 ;传送数据过程与传送命令相同
MOV BitCnt, #08h
S_Byte2:
RRC A
MOV Dio, C
NOP
SETB Sclk
NOP
CLR Sclk
DJNZ BitCnt, S_Byte2
INC R0 ;发送数据的内存地址加1
DJNZ ByteCnt, S_Byte1 ;字节传送未完毕则继续
NOP
CLR nRst ;逻辑操作完毕清nRst
RET
Receive_Byte:
CLR nRst ;复位引脚为低电平所有数据传送终止
NOP
CLR Sclk ;清时钟总线
NOP
SETB nRst ;复位引脚为高电平逻辑控制有效
MOV A, Command ;准备发送命令字节
MOV BitCnt,#08h ;传送位数为8
R_Byte0:
RRC A ;将最低位传送给进位位C
MOV Dio, C ;位传送至数据总线
NOP
SETB Sclk ;时钟上升沿发送数据有效
NOP
CLR Sclk ;清时钟总线
DJNZ BitCnt, R_Byte0 ;位传送未完毕则继续
NOP
R_Byte1: ;准备接收数据
CLR A ;清类加器
CLR C ;清进位位C
MOV BitCnt, #08h ;接收位数为8
R_Byte2:
NOP
MOV C, Dio ;数据总线上的数据传送给C
RRC A ;从最低位接收数据
SETB Sclk ;时钟总线置高
NOP
CLR Sclk ;时钟下降沿接收数据有效
DJNZ BitCnt, R_Byte2 ;位接收未完毕则继续
MOV @R1, A ;接收到的完整数据字节放入接收内存缓冲区
INC R1 ;接收数据的内存地址加1
DJNZ ByteCnt, R_Byte1 ;字节接收未完毕则继续
NOP
CLR nRst ;逻辑操作完毕清nRst
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -