打印

编写了25AA320驱动子程序,有人愿意帮我看一下有没有错吗?

[复制链接]
1384|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bmfw|  楼主 | 2008-8-1 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天看了25AA320的数据手册,编写了一些驱动子程序,有人愿意帮我看一下有没有错吗?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;25AA320驱动子程序开始
;;;;;;;;CLK        BIT        P1.0        ;时钟
;;;;;;;;CS        BIT        P1.1        ;片选
;;;;;;;;SI        BIT        P1.2        ;数据输入
;;;;;;;;SO        BIT        P1.3        ;数据输出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;禁止写命令
WRDI:    CLR        CLK
        SETB    CS
        CLR        CS
        MOV        A,#04H        ;禁止写命令
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        RET
;;;;;;;;允许写命令
WREN:    CLR        CLK
        SETB    CS
        CLR        CS
        MOV        A,#06H        ;允许写命令
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        RET
;;;;;;;;将R3中数据写到R1R2的地址中去
;;;;;;;;RO:地址高,R1:地址低,R2:循环8次,R3:数据
WR_BYTE:CLR        CLK
        SETB    CS
        CLR        CS
        MOV        A,#02H        ;写命令
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        MOV        A,R0        ;RO:地址高
        LCALL    WR_8BIT
        MOV        A,R1        ;R1:地址低
        LCALL    WR_8BIT
        MOV        A,R3        ;R3:数据
        LCALL    WR_8BIT
        SETB    CS
        RET
;;;;;;;;把A中的数据通过SPI口发送出去,R2:循环8次
WR_8BIT:MOV        R2,#08H
WR_81:    RLC        A
        MOV        SI,C
        SETB    CLK
        CLR        CLK
        DJNZ    R2,WR_81
        RET
;;;;;;;;将以R3为首地址以R4字节个数的数据发送到以R0R1的地址中
;;;;;;;;RO:地址高,R1:地址低,R2:循环8次,R3:以R3为首地址的数据,R4:发送的字节数
WR_PAGE:CLR        CLK
        SETB    CS
        CLR        CS
        MOV        #02H        ;写命令
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        MOV        A,R0        ;RO:地址高
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        MOV        A,R1        ;R1:地址低
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        MOV        R4,#0FH
WR_PAGE1:
        MOV        A,@R3        ;取数据
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        INC        R3
        DJNZ    R4,WR_PAGE1
        SETB    CS
        RET
;;;;;;;;读以R0R1为地址的数据,存储在A中
;;;;;;;;RO:地址高,R1:地址低,R2:循环8次
READ_DATA:
        CLR        CLK
        SETB    CS
        CLR        CS
        MOV        A,#03H        ;读数据命令
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        MOV        A,R0        ;RO:地址高
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        MOV        A,R1        ;R1:地址低
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        LCALL    READ_8BIT    ;读8位数据存储在A中
        SETB    CS
        RET
;;;;;;;;读8位数据存储在A中
READ_8BIT:
        MOV        R2,#08H
READ_81:MOV        C,DO
        SETB    CLK
        CLR        CLK
        RLC        A
        DJNZ    R2,READ_81
        SETB    CS        
        RET
;;;;;;;;读寄存器命令
;;;;;;;;R2:循环8次,出口:A
RDSR:    CLR        CLK
        SETB    CS
        CLR        CS
        MOV        A,#05H        ;读寄存器命令
        LCALL    WR_8BIT        ;把A中的数据通过SPI口发送出去,R2:循环8次
        LCALL    READ_8BIT    ;读8位数据存储在A中
        SETB    CS
        RET

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

86

帖子

0

粉丝