这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【STCAi8051U】Ai8051U的SPI例程

共1条 1/1 1 跳转至

【STCAi8051U】Ai8051U的SPI例程

专家
2025-09-04 16:03:46     打赏

本例使用擎天柱核心板完成测试。程序代码如下:

 

#include "Ai8051U.H" 
#include "intrins.h"
#include "stdio.h"
 
#define FOSC 22118400L // 下载程序时,使用该频率烧录
 
sbit  SS = P1^0;
sbit LED = P1^1;
 
 
// 延时
void delay_ms(unsigned int ms) {
    unsigned int i;
    do {
        i = FOSC/6000;
        while(--i);
    } while(--ms);
}
 
void main() {
    unsigned char dat = 0;
    
    EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
    //(32 位模式请使用这句,注释下一句)
    // P_SW2 |= 0x80; //允许访问扩展的特殊寄存器,XFR
    //(8 位模式请使用这句,注释上一句)
    WTST = 0; //设置取程序代码等待时间,
    //赋值为 0 表示不等待,程序以最快速度运行
    CKCON = 0; //设置访问片内的 xdata 速度,
    //赋值为 0 表示用最快速度访问,不增加额外的等待时间
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    
    LED = 1;
    SS = 1;
    busy = 0;
    
    SPCTL = 0x50;//|0x80; //使能 SPI 主机模式
    // 设置功能引脚,本例默认使用P2.4(SS)、P2.5(MOSI)、P2.6(MISO)、P2.7(SCK)
    SPI_S1 = 0;     //00: P1.4 P1.5 P1.6 P1.7, 01: P2.4 P2.5 P2.6 P2.7, 10: P4.0 P4.1 P4.2 P4.3, 11: P3.5 P3.4 P3.3 P3.2
    SPI_S0 = 1;    
    SPSTAT = 0xc0; //清中断标志
 
    delay_ms(10);
    LED = 0;
    
    while(1) {
      
        dat++;
        SS = 0; //拉低从机 SS 管脚
        SPDAT = dat; //发送测试数据
        while (!SPIF); //查询完成标志
        SPIF = 1; //清中断标志
        SS = 1; //拉高从机的 SS 管脚
     
    }
}


程序使用轮询方式,通过判断SPIF标志位判断发送是否完成。LED信号是为了在使用逻辑分析仪捕捉SPI发送开始的信号。主要是为了看看在使用SPI外设时,没有明确指明是否默认使用SPI外设的SS信号情况下,看看SS信号是否被输出了。逻辑分析仪测试到的信号如下图:

图片1.png

从测试结果看,SPI外设的SS信号在发送数据的过程中没有变化,也就意味着在有SPI子设备时,需要另外提供SS信号。

 





关键词: 菜鸟学单片机     Ai8051U     SPI示例    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]