中恒 发表于 2014-8-13 20:09:07

SPI问题——双机通讯——见程序

#include "iostm8s003f3.h" //发送

#define LCD_CS_H PC_ODR |=0X10//PC4
#define LCD_CS_L PC_ODR &=0XEF

void Delay_ms(unsigned char a)
{
    unsigned char i,j,m;
        for(i=0;i<10;i++)
        {for(j=0;j<m;j++);}
}

void SPI_Init(void)
{
      PC_DDR=0x70;
        PC_CR1=0x70;
        PC_CR2=0x00;
        SPI_CR1=0x5F;
        SPI_CR2=0x03;
        LCD_CS_H;
}

void SPI_Send(unsigned char Data)
{
      LCD_CS_L;
        Delay_ms(8);
        SPI_DR=Data;
        while((SPI_SR & 0x02)==0x00);
        Delay_ms(8);
        LCD_CS_H;
}

void main(void)
{
    SPI_Init();
       
while(1)
{
    SPI_Send(0x55);
    Delay_ms(100);
    SPI_Send(0xAA);
    Delay_ms(100);
}
}

中恒 发表于 2014-8-13 20:09:40

#include "iostm8s003f3.h"//接收

void Delay_ms(unsigned char a)
{
    unsigned char i,j,m;
        for(i=0;i<10;i++)
        {for(j=0;j<m;j++);}
}

void SPI_Init(void)
{
PC_DDR=0X8f;   //MISO从设备输出管脚,MOSI从设备输入   
PC_CR1=0X0f;   
PC_CR2=0X00;

SPI_CR1=0x10;    //先发送MSB,关闭SPI,波特率为f/4,配置为从设备, //空闲低电平,第一个时钟边缘开始数据采样
SPI_CR1|=0x40;   //开启SPI
}

void main(void)
{
PB_DDR=0XFF;   
PB_CR1=0XFF;   
PB_CR2=0X00;

SPI_Init();
       
while(1)
{

   while((SPI_SR&0x01)==0x01) ; //判断接收区是否为空,即判断是否接收到数据

   PB_ODR=SPI_DR;

   //Delay_ms(10);
}
}


中恒 发表于 2014-8-13 20:13:40

没有效果——不知是什么问题,

特此,   请教各位。

admin 发表于 2014-8-14 22:45:15

中恒 发表于 2014-8-13 20:13
没有效果——不知是什么问题,

特此,   请教各位。

你代码能加注释么?一个个寄存器难得看呀
页: [1]
查看完整版本: SPI问题——双机通讯——见程序