51汇编实现的spi代码(模式0)

鉴于很多单片机书上是多是使用C51实现的spi模式1,用于读取SD卡,实际上spi模式0应该更普遍才对。故这里附上汇编实现的spi代码,已在指纹模组上验证过,功能ok。

/*CopyRight@piaoxiang.zhang****/

CSn EQU P0.4
MOSI EQU P0.5
MISO EQU P0.6
CLK EQU P0.7
ORG 0000H
   LJMP start
ORG 0100H
start:
        LCALL spi_init
        MOV R2,#40H
read_reg_all:
        MOV40H,#0BFH;
        LCALL spi_enable
        MOV R0,#10H
        MOV A,@R1
        ADD A,R2
        LCALL spi_write
        LCALL spi_disable
        DJNZ R2, read_reg_all
        SJMP start
spi_read:
       CPL CLK
       NOP
       NOP
       MOV C,MISO
       RLC A
       CPL CLK
       DJNZ R0,spi_read    
       RET
spi_write:

       RLC A
       MOV MOSI,C
       CPL CLK;CLK为低,发送数据
       NOP
       NOP
       NOP
       CPL CLK;CLK 为高
       DJNZ R0,spi_write
       SETB MOSI
       RET
spi_enable:
       CLR CSn
       ;MOV R0,#01H
       ;LCALL delay
       RET
spi_disable:
       SETB CSn
       ;MOV R0,#01H
       ;LCALL delay
       RET
spi_init:
    CLR CLK ;CPOL=0,CLK 空闲低电平
    SETB CSn ;片选低电平有效
    SETB MOSI
    SETB MISO
    MOV R1,#40H
    MOV 40H,#5FH
    CLR P0.2;在取上拉电阻时
    CLR P0.1;P01 与 P02 短路了
    RET

仿真图这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值