打印
[国产单片机]

STC12C5A60S2系列单片机SPI测试程序

[复制链接]
2845|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DIYfashaoyou|  楼主 | 2012-11-20 13:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
autopccopy| | 2012-11-22 18:32 | 只看该作者
顶,帮你将内容贴出:

SPI主机.C
//**********主机程序*****************//
#include"STC_NEW_8051.h"

#define SPIF (SPSTAT&0X80) //查询SPIF是否置位,SPIF不能进行位操作
//通信端口设置
sbit SCLK = P1^7;
sbit MISO = P1^6; //主器件输入
sbit MOSI = P1^5; //主器件输出
sbit SS   = P1^4; //从机选择信号

unsigned char UART_SendData=0;
unsigned char UART_RecData=0;
unsigned char SPI_RecData=0;

void Init_System(); //系统初始化
void Init_UART();  //串口初始化
void Init_SPI();  //SPI初始化
unsigned char SPI_SendByte(unsigned char SPI_SendData);        //SPI发送一个字节数据
void UART_SendByte(unsigned char UART_Send); //串口发送一个字节数据

void main()
{
        Init_System();

        while(1)
        {
                while(!RI);
                RI=0;
                UART_RecData=SBUF;

                SPI_SendByte(UART_RecData);
                UART_SendData=SPI_SendByte(UART_RecData);
                UART_SendByte(UART_SendData);  
        }       
}

void Init_System()
{
        Init_UART();  //串口初始化
        Init_SPI();  //SPI初始化               
}

void Init_UART()
{
        TMOD=0X20; //定时器1作为波特率发生器
        AUXR=0x00; //定时器1进行12分频
        TH1=0XFD;
        TL1=0XFD;  //9600bps
        SCON=0X50;
        PCON=0X00;
        TR1=1;
}

void Init_SPI()
{
        SPCTL=0XFD;          //忽略SS,设置为主机模式
        SPSTAT=0XC0;  //清除状态寄存器
        SPDAT=0; //初始化数据寄存器       
}       

unsigned char SPI_SendByte(unsigned char SPI_SendData)
{
        SPDAT=SPI_SendData;
        while(!SPIF);
        SPSTAT=0XC0;
        SPI_RecData=SPDAT;
        return SPI_RecData;       
}

void UART_SendByte(unsigned char UART_Send)
{
        SBUF=UART_Send;
        while(!TI);
        TI=0;
}

SPI从机.C
#include"STC_NEW_8051.h"

#define SPIF (SPSTAT&0X80)

sbit SCLK = P1^7;
sbit MISO = P1^6;
sbit MOSI = P1^5;
sbit SS   = P1^4;
unsigned char SPI_Buffer=0;
void Init_SPI();

void main()
{
        Init_SPI();
        while(1);
}

void Init_SPI()
{
        SPCTL=0XED;//忽略SS,设置为从机模式
        SPSTAT=0XC0; //清除状态寄存器
        SPDAT=0; //初始化数据寄存器
        IE2=0X20; //打开SPI中断
        EA=1;
}

void SPI_Rec() interrupt 9
{
        SPSTAT=0XC0;
        SPI_Buffer=SPDAT;
        SPDAT=SPI_Buffer;
}

使用特权

评论回复
板凳
songzhige| | 2012-11-24 22:21 | 只看该作者
谢谢楼主的共享哦,,

使用特权

评论回复
地板
布衣1819| | 2013-4-9 17:03 | 只看该作者
谢谢,不知我能否看得懂

使用特权

评论回复
5
zjping0815| | 2013-6-21 10:30 | 只看该作者
有没有做过STC单片机IO口模拟SPI通讯

使用特权

评论回复
6
新人一枚| | 2014-10-10 23:54 | 只看该作者
我想要一个收发在一个函数的程序

使用特权

评论回复
7
旭日东起| | 2014-10-11 09:56 | 只看该作者
可以看一下的,哈,谢谢

使用特权

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

本版积分规则

24

主题

419

帖子

5

粉丝