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

📄 ds13020.asm

📁 P/S 测试程序
💻 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 + -