Proteus仿真51单片机的SPI通信程序

发布者:HeavenlySunset最新更新时间:2020-01-18 来源: 51hei关键字:Proteus仿真  51单片机  SPI通信 手机看文章 扫描二维码
随时随地手机看文章

仿真原理图如下
 

实验现象 会有数码管1到8的显示   从机跟随主机

单片机源程序如下:
#include //头文件
#include //头文件

#define uchar unsigned char
#define uint unsigned int

sbit SCK = P1^0;//位定义时钟
//sbit CS = P1^1;//位定义片选(使能)  此项目可以不使用
sbit SDI = P1^2;//位定义Input
sbit SDO = P1^3;//位定义Output

/*-----函数声明-----*/
void delay5us();
void delay();
void SpiSend(uchar dat1);
uchar SpiReceive();


/*-----主函数(主机)-----*//
void main()
{        
                unsigned char i; 
                P2 = 8;
    while(1)
    {
                        for(i = 0; i<10 ;i++)
                        {
                                        P2 = i;
                                        SpiSend(i);
                                        delay();
                        }

    }
        ;//空语句        
}

/*-----5微秒延时函数-----*/
void delay5us()
{
        _nop_();
}

/*-----延时函数-----*/
void delay()
{
        uchar i=1000,j=1000;
        while(i--)
        while(j--);

}


/*-----CPHA=0;CPOL=1 模式2-----*/
/*-----SPI发送函数-----*/
/*-----上升沿发送-----*/
void SpiSend(uchar dat1)
{
        uchar i;
        for (i=0; i<8; ++i)//8bit,一位一位写
        {
                SCK = 0;
                if (dat1 & 0x80)//判断当前最高位为1还是0
                {
                        SDO = 1;                
                }
                else
                {
                        SDO = 0;
                }
                SCK = 1;//上升沿发送数据
                dat1 <<= 1;
                delay5us();                
        }
}

/*-----SPI接收函数-----*/
/*-----下降沿接收-----*/
uchar SpiReceive()
{
        uchar i, dat0;
        dat0 = 0x00;//dat0初始化 
        for (i=0; i<8; ++i)//8bit,一位一位读
        {
                dat0<<=1;
        while(SCK == 1);    
        while(SCK == 0);//下降沿读取数据       
        dat0 |= SDI;         
        }
        return (dat0);//收到数据(返回值)dat0
}




# include //头文件
# include //头文件

# define uchar unsigned char
# define uint unsigned int

sbit SCK = P1^0;//位定义时钟
//sbit CS = P1^1;//位定义片选(使能)  此项目可以不使用
sbit SDI = P1^2;//位定义Input
sbit SDO = P1^3;//位定义Output

/*-----函数声明-----*/
void delay5us();
void SpiSend(uchar dat1);
uchar SpiReceive();

/*-----主函数(从机)-----*/
void main()
{        
        //UARTInit();
         while(1)
    {
                P2 = SpiReceive();// 循环接收数据
    }
        ;//空语句        
}

/*-----5微秒延时函数-----*/
void delay5us()
{
        _nop_();
}

/*-----CPHA=0;CPOL=1 模式2-----*/
/*-----SPI发送函数-----*/
/*-----上升沿发送-----*/
void SpiSend(uchar dat1)
{
        uchar i;
        for (i=0; i<8; ++i)//8bit,一位一位写
        {
                SCK = 0;
                if (dat1 & 0x80)//判断当前最高位为1还是0
                {
                        SDO = 1;                
                }
                else
                {
                        SDO = 0;
                }
                SCK = 1;//上升沿发送数据
                dat1 <<= 1;
                delay5us();                
        }
}

/*-----SPI接收函数-----*/
/*-----下降沿接收-----*/
uchar SpiReceive()
{
        uchar i, dat0;
        dat0 = 0x00;//dat0初始化 
        for (i=0; i<8; ++i)//8bit,一位一位读
        {
                dat0<<=1;
        while(SCK == 1);    
        while(SCK == 0);//下降沿读取数据       
        dat0 |= SDI;         
        }
        return (dat0);//收到数据(返回值)dat0
}

关键字:Proteus仿真  51单片机  SPI通信 引用地址:Proteus仿真51单片机的SPI通信程序

上一篇:单片机成长之路(51基础篇) - 017 data,idata,xdata,pdata的区别
下一篇:单片机红外发射程序与原理详解

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved