• 大小: 135KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: 其他
  • 标签: spi通信  

资源简介

通过两个单片机之间使用spi实现数据的传输,通过led灯的亮灭情况判断数据是否正确传输

资源截图

代码片段和文件信息

/******************** 2011电子科技协会 ********************
;名称 :SPI通信
;作者   : 郑品洪
;日期   : 07/25/2011
;描述 : ;利用SPI实现两单片机通信,需用杜邦线将两单片机的MOSI,MISO,SPI_CLK
           互相连接起来,另外将主机的P3^7(PE0)和从机的SPI_NSS连接起来,另外,开发板
  93c46(即矩阵键盘旁边靠里的芯片)会影响SPI通信,使用时请把主机中的93c46
拔去
;***********************************************************/
#include  
#define uchar unsigned char 
#define uint unsigned int
_Bool MOSI @PC_ODR:6;
_Bool MISO @PC_ODR:7;
_Bool SPI_CLK @PC_ODR:5;
_Bool SPI_NSS @PE_ODR:0;
uchar table[]={0xc00xf90xa40xb00x990x920x820xf80x800x900x880x830xc60xa10x860x8e};
uchar atbnc;
uchar HL;
void delay(uint s)
{
 uchar i;
 for(s;s>0;s--)
   for(i=0;i<100;i++);
}

void init_IO(void)
{
    PB_DDR=0XFF;
    PB_CR1=0XFF;
    PB_CR2=0X00;
    
    PC_DDR=0X6f;        //MISO,主设备悬空输入,MOSI主设备推挽输出,SCL推挽输出
    PC_CR1=0X6f;
    PC_CR2=0X00;
    
PD_DDR=0x58;
PD_CR1=0x38;
PD_CR2=0x00; 

    PE_DDR=0x01;      //PE0为从设备控制引脚,NSS设为上拉输入
PE_CR1=0x21;
PE_CR2=0x00;
}

void init_TIM2(void)
{
    TIM2_EGR=0X01;       //允许产生更新事件
    TIM2_PSCR=0X00;     //不分频,使频率为2MHz
        
    TIM2_ARRH=0X27;     //更新后计数器的值,定时5ms
    TIM2_ARRL=0X10;
        
    TIM2_CR1=0X05;      //允许定时器工作
    TIM2_IER=0X01;      //允许更新中断
_asm(“rim“);       //汇编语句,启动定时器
}

void init_UART(void)
{
    UART2_BRR2 = 0x00;         // 波特率9600,分频系数=2000000/9600=208
 UART2_BRR1 = 0x0d;              // 对应的十六进制数为00D0,BBR1=0DBBR2=00
   UART2_CR2 = 0x2C;         // b3 = 1允许发送    b2 = 1允许接收    b5 = 1允许产生接收中断 
}

void SPI(void)
{
SPI_CR1=0x14;                     //先发送MSB,关闭SPI,波特率f/4 ,配置为主设备,空闲低电平,第一个时钟边缘开始数据采样
SPI_NSS=0;                       //开启从设备接收
SPI_CR1|=0x40;                   //开启SPI
SPI_CR2=0x00;  //双向数据模式
a=0x18;
PD_DDR|=a;
    PD_CR1|=a;
delay(1000);
SPI_DR=a;                    //将要发送的a放到SPI_DR中
delay(1);                      //延时一会等待数据发送完毕
while((SPI_SR|0x80)==0x80);    //等待通信结束
if((SPI_SR&0x01)==0x01)         //判断接受区是否为空,即判断是否接收到数据
{c=SPI_DR;
   if(c==0x55) 
   PD_DDR=0x48;
    PD_CR1=0x28;
 
}                    //将接受到从设备发送的数据赋值给b
delay(1000);                       //延时一会等待数据赋值完成
while((SPI_SR|0x80)==0x80);    //等待通信结束
SPI_NSS=1;                    //关闭从设备接收
SPI_CR1|=0xbf;                //关闭SPI 
delay(1); 
}

void display(void)
{
H=b/16;
L=b%16; 
if((t%2)==0)
{
    PC_ODR=0x02;
    PB_ODR=table[H];
}
    
if((t%2)!=0)
{
    PC_ODR=0x00;
    PB_ODR=table[L];
}
}

void main()
{
init_IO();
init_UART();
init_TIM2();

    while(1)
  {
    SPI();
display();
}
}

 @far @interrupt void UART2_Receiver(void)
{
  while((UART2_SR & 0x80) == 0x00);    // 等待数据转移到移位寄存器
  a=UART2_DR;                         // 将接收到的字符放到a中
}


@far @interrupt void TIM2_UP_IRQHandler (void)         

{
   TIM2_SR1 = 0x00; 
     t++;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      17802  2012-03-18 19:46  SPI1\123.wed

     文件        321  2012-03-18 19:46  SPI1\主\checkres.spy

     文件      12961  2014-12-15 16:38  SPI1\主\Debug\main.ls

     文件      18949  2014-12-15 16:38  SPI1\主\Debug\main.o

     文件      16176  2014-12-15 16:38  SPI1\主\Debug\spi.elf

     文件       1372  2014-12-15 16:38  SPI1\主\Debug\spi.hex

     文件       2288  2012-03-18 19:46  SPI1\主\Debug\spi.lkf

     文件      21627  2014-12-15 16:38  SPI1\主\Debug\spi.map

     文件      18906  2014-12-15 16:38  SPI1\主\Debug\spi.sm8

     文件       5510  2014-12-04 22:15  SPI1\主\Debug\stm8_interrupt_vector.ls

     文件       2660  2014-12-04 22:15  SPI1\主\Debug\stm8_interrupt_vector.o

     文件       3302  2014-12-15 16:38  SPI1\主\main.c

     文件       2292  2012-03-18 19:46  SPI1\主\Release\spi.lkf

     文件        370  2014-12-15 16:39  SPI1\主\spi.dep

     文件        896  2014-12-15 16:38  SPI1\主\spi.pdb

     文件      12633  2014-12-04 22:27  SPI1\主\spi.stp

     文件        195  2014-12-15 16:39  SPI1\主\SPI.stw

     文件      33757  2014-12-15 16:38  SPI1\主\SPI.wdb

     文件      33130  2014-12-15 16:39  SPI1\主\SPI.wed

     文件       2058  2012-03-18 19:46  SPI1\主\stm8_interrupt_vector.c

     文件     105769  2014-12-14 12:19  SPI1\主\__Previews\main.cPreview

     文件      10749  2014-12-15 16:40  SPI1\从\Debug\main.ls

     文件      17982  2014-12-15 16:40  SPI1\从\Debug\main.o

     文件      15928  2014-12-15 16:40  SPI1\从\Debug\spi.elf

     文件       1265  2014-12-15 16:40  SPI1\从\Debug\spi.hex

     文件       2288  2012-03-18 19:46  SPI1\从\Debug\spi.lkf

     文件      21168  2014-12-15 16:40  SPI1\从\Debug\spi.map

     文件      18034  2014-12-15 16:40  SPI1\从\Debug\spi.sm8

     文件       5471  2014-12-04 23:15  SPI1\从\Debug\stm8_interrupt_vector.ls

     文件       2642  2014-12-04 23:15  SPI1\从\Debug\stm8_interrupt_vector.o

............此处省略20个文件信息

评论

共有 条评论