历史上的今天
返回首页

历史上的今天

今天是:2025年01月18日(星期六)

正在发生

2020年01月18日 | Proteus仿真51单片机的SPI通信程序

2020-01-18 来源:51hei

仿真原理图如下
 

实验现象 会有数码管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
}

推荐阅读

史海拾趣

Bay Linear Inc公司的发展小趣事

Bay Linear Inc公司一直注重人才培养和团队建设。公司建立了完善的人才培养和激励机制,吸引了一批批优秀的研发人才和管理人才。同时,公司还积极营造团结协作、创新进取的企业文化,使团队成员能够充分发挥自己的才能和潜力,共同推动公司的发展。

Austek Microsystems公司的发展小趣事

面对行业技术的快速迭代,Austek Microsystems始终保持敏锐的洞察力。公司不断投入研发资金,引进先进的生产设备和技术人才,进行技术升级和产品迭代。通过不断地优化产品性能、提升生产效率,Austek Microsystems逐渐在市场中树立起了技术领先的形象。

申风(everanalog)公司的发展小趣事

在申风(everanalog)公司的发展过程中,技术突破和产品创新一直是其核心竞争力。公司不断投入研发资源,致力于开发出具有自主知识产权的集成电路产品。其中,多通道整合型电源管理芯片的成功研发,不仅填补了国内市场的空白,也赢得了客户的广泛认可。这些技术突破和产品创新为公司的快速发展奠定了坚实的基础。

Doodle Labs公司的发展小趣事

Doodle Labs公司成立于2010年代初,由一群热衷于无线通信和物联网技术的工程师创立。在成立之初,公司就明确了自己的定位:专注于开发高性能、智能化的无线电技术产品,以满足日益增长的无人机和物联网设备的需求。通过不断的技术研发和创新,Doodle Labs成功推出了其首款智能无线电产品,为无人机提供了稳定、高效的通信解决方案。

Datatronic公司的发展小趣事

随着全球化趋势的加速,Datatronic公司开始将目光投向国际市场。公司通过参加国际展览、设立海外办事处等方式,积极拓展海外市场。同时,公司还加强了与国际企业的合作,引进先进的技术和管理经验。这些努力使得Datatronic公司在国际市场上逐渐获得了认可,品牌影响力得到了提升。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

在激烈的市场竞争中,品牌建设和形象提升对于企业的发展至关重要。Comclok Inc深知品牌建设的重要性,从产品设计、生产到销售服务,都注重塑造公司的品牌形象。公司注重产品的品质和用户体验,不断提升产品的性能和稳定性。同时,Comclok Inc还积极参加各类行业展会和交流活动,展示公司的技术实力和产品优势,提升了公司在行业内的知名度和影响力。

问答坊 | AI 解惑

nec单片机

78F9210 1 / SSOP16 / 78F9211 2 / SSOP16 / 78F9212 4 / SSOP16 / 78F9221 2 / SSOP20 主推 78F9222 4 / SSOP20 主推 78F9232 4 / SSOP30 主推 78F9234 8 / SSOP30 主推 78K0K2系列 78F0500 ...…

查看全部问答>

运算放大器输出驱动能力的确定

运算放大器输出驱动能力的确定…

查看全部问答>

TTL和CMOS门电路的区别.doc

TTL和CMOS门电路 的区别.doc…

查看全部问答>

ADS的裸奔调试问题

各位老大问个ADS的问题 我想裸奔ARM 2440但有AXD调试的时候报 DBE Warning 00056: The statement into which was stepped is singular (i.e. it has no exit) 程序无法跳转到MAIN函数里面。 我想请教一下是啥问题,我的R0设置为0X30002000 ini ...…

查看全部问答>

求助:WINCE 流驱动如何使用定时器?

2440,如何每隔一段时间发送一系统消息?…

查看全部问答>

分享找到的一些android开发过程中很有用的工具软件

1、Total Control Sigma键盘输入满足您用键盘输入文字的需求,使您打字如飞。。。Total Control 会在您的手机上安装 Sigma 输入法,当手机连接电脑后,可以在键盘上进行文字输入。聊天,发贴不再需要“一指禅”,操作起来方便迅速,得心应手 截屏 ...…

查看全部问答>

大家都收到了STM32F429I,可是我今天才收到,所以传一个STM32 STLINK驱动

我已经使用证明可以了,根据某论坛说的应该装在C:中的INF中所以我也就那么做了,装在别处是否可以我没验证,呵呵。分享给大家呗! [ 本帖最后由 jsxykj1 于 2013-12-19 14:30 编辑 ]…

查看全部问答>

PCB布局布线规则

    再来一剂强心针,这个是我刚开始接触硬件设计时的学习资料,绝对是干货,压箱底也不为过,自己摘抄下来的,原来的链接找不到了,记得应该是从网上找的,但是为了方便保存,就整理下来了。希望大家能够受用~~~    里面介绍 ...…

查看全部问答>

大神求助

请问是否有大神使用过 msp430控制打印机打印数据?   …

查看全部问答>

Allegro 15.X 学习与使用

这是关于EDA软件工具Allegro的教学书,想巩固一下PCB基础的可以参考下。 https://download.eeworld.com.cn/download/lixandq/551527 …

查看全部问答>