STC15系列单片机的SPI功能

初学STC15的硬件SPI可能会使用不当,这里直接介绍使用方法,(不使用中断)

SPI的特殊功能寄存器:

其中主要使用到的有SPCTL,SPSTAT,SPDAT。其他可按需求使用,这里不做介绍。

1.SPI控制寄存器SPCTL:

特别注意:对于容易出错的地方为SSIG位,SSIG = 0时会导致SIP不作为主机从而你的SPI操控不了外设。

如果SSIG为0是要使得为主机则需要P1.2引脚为高电平,否则为从机。具体作为从机还是主机的所有情况如下:

2.SPI状态寄存器SPSTA:

特别注意蓝色字体:“写1清零”。

3. SPI数据寄存器SPDAT

对该寄存器进行写操作时触发SPI传输

SPI时钟频率:

SPI的速率由单片机的主频以及状态寄存器的位0和1决定,如下:

代码:

初始化:

void SPI_Init()

{

    SPDAT = 0;                  // 初始化SPI数据

    SPSTAT = SPIF | WCOL;       // 清除SPI状态位

    SPCTL = SPEN | MSTR | SSIG; // 主机模式,忽略SS引脚

                                // IE2 |= ESPI; // 开启SPI中断

                                // EA = 1;

}

交换一个字节以及开始和停止:

void SPI_Start()

{

    SPISS = 0;

}



void SPI_Stop()

{

    SPISS = 1;

}



unsigned char SPI_Swap(unsigned char dat)

{

    SPDAT = dat; // 触发SPI发送数据

    while (!(SPSTAT & SPIF))

        ;                 // 等待发送完成

    SPSTAT = SPIF | WCOL; // 清除SPI状态位

    return SPDAT;         // 返回SPI数据

}

相关宏定义以及特俗功能寄存器定义:

sfr SPCTL = 0xCE;

#define SSIG 0x80 // SPCTL.7

#define SPEN 0x40 // SPCTL.6

#define DORD 0x20 // SPCTL.5

#define MSTR 0x10 // SPCTL.4

#define CPOL 0x08 // SPCTL.3

#define CPHA 0x04 // SPCTL.2



sfr SPSTAT = 0xCD;

#define SPIF 0x80 // SPSTAT.7

#define WCOL 0x40 // SPSTAT.6



#define SPDHH 0x00 // CPU_CLK/4

#define SPDH 0x01  // CPU_CLK/8

#define SPDL 0x02  // CPU_CLK/16

#define SPDLL 0x03 // CPU_CLK/32



sfr SPDAT = 0xCF; // SPI数据寄存器



sfr IE2 = 0xAF;

#define ESPI 0x02 // IE2.1



sfr IP2 = 0xB5;

sfr AUXR1 = 0xA2;



// SPI从机选择口, 连接到其它MCU的SS口

// 当SPI为一主多从模式时,

// 请使用主机的普通IO口连接到从机的SS口

sbit SPISS = P1 ^ 1;

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简子辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值