日志档案

发表于 2007-4-13 15:43:50

13

标签: SPI  

SPI接口通信程序

        今天发个程序上来吧,是AVR单片机程序的初始化程序。跟大家共享一下吧。

       就这么个程序花了我快两天了,看DATASHEET都快看晕了,开始时数据一直出错,让我什么想法都想过了,最后终于发现了问题所在。。呵呵,学习就是这样,当你做不出来时,你的心情会十分的低落,可是当你成功时,一种成功的喜悦自然会产生。后面的路还很长,这个只是个最基本的程序,关于假如有很多数据要处理时,又要怎么做呢? 还在不断学习中,,,,,,

#include <avr/io.h>
#include <avr/interrupt.h>
#include<avr/pgmspace.h>
#include<avr/signal.h>
#define uchar unsigned char
#define uint unsigned int
void spi_init(void)
{
  SPCR=((1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<DORD));;//数据的高位先发送
  //SPCR=((1<<SPE)|(1<<MSTR)|(1<<DORD)) ;
   }
/*SIGNAL(SIG_SPI)(1<<CPHA)
{
PORTA=SPDR;
 }*/
   

uint8_t SPI_MasterReceive(uint8_t spiData)
 { SPDR="spiData";  
   while(!(SPSR&0X80));
   return(SPDR);
   }
   void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i="0";
   for (i=0;i<n;i++)
   delay_1us();
  }

int main(void)
    {
  uint8_t i;
     DDRB="0XBF";//1011 1111SCK--OUTPUT,MISO--INPUT,MOSI--OUTPUT,SS--OUTPUT
  PORTB="0X1F";//SS端要拉高,其它的引脚为低
  DDRA="0Xff";
  PORTA="0Xff";
  delay_nus(60000);
  delay_nus(60000);//延时保证FPGA已经初始化
     spi_init();//初始化
     PORTB&=~(1<<4);//片选拉低
     i="SPI"_MasterReceive(0x00);
     PORTB|=(1<<4);//传输完毕
     PORTA="i";
while(1);
 }

系统分类: 单片机   |   用户分类: AVR单片机   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1491)    回复(2)  

投一票您将和博主都有获奖机会!

  • jackxu007

    2007-7-7 12:26:10

    不错,提个建议,请把编译环境列出来。

  • 2008-1-17 10:20:09

    hi,你好,看到你SPI模拟,最近我也在做SPI模拟的方面,遇到了不小的困难,可以向你请教一下么?谢谢,我的qq:70250605 msn:seanzzy2001@hotmail.com