今天看了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 |