原创 SPI接口通信程序

2007-4-13 15:43 5938 6 11 分类: MCU/ 嵌入式

        今天发个程序上来吧,是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);
 }

文章评论5条评论)

登录后参与讨论

用户365246 2011-8-11 00:23

SPCR=((1<

用户365246 2011-8-11 00:21

用户365246 2011-8-11 00:19

我怎么总是读取的数据是32639 16位的数据

用户78553 2008-1-17 10:20

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

用户1047417 2007-7-7 12:26

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

用户153800 2007-4-9 00:28

不好意思我不是学电子专业的对这方面不太懂,现在遇到开关电源对仪表产生干扰不知道怎么去屏蔽他,所以想请教,二极管怎么接呢?怎么选用呢?磁珠又是怎么选用呢?请赐教!

用户1053025 2006-9-27 11:54

还不加我啊,QQ: 79811625(说你是xlf)  
msn:cocappjj@hotmail.com

用户50962 2006-9-26 18:17

呵呵。好的。

用户1053025 2006-9-26 11:45

博主,我又来啦。。。加我加我 :D
相关推荐阅读
用户1316816 2008-10-19 23:58
写下心情,一段平凡的日子
      2008,不平常的一年,这一年我毕业了,从自己的梦想走入了社会,也许刚入社会,总要有一段适应的过程,从实习到工作,离开学校也快半年了,时间总是过得这么快,有时又觉得又是那么的慢.曾经的梦想...
用户1316816 2008-08-28 20:27
我的毕业设计--存储示波器
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />整个系统采用FPGA Cyclone 2C5芯片,在内嵌...
用户1316816 2008-03-15 12:12
基于FPGA的密码锁
采用4X4键盘电路,和一个四位动显示电路.来完成基本的控制功能 .1.4X4 键盘扫描电路的设计电路中分为键盘去抖电路和键盘译码电路。弹跳消除电路所使用的频率必须比其它电路的工作频率高,扫描电路的工作...
用户1316816 2008-03-13 18:43
简易电压源
/*****************************************************This program was produced by theCodeWizardAVR ...
用户1316816 2008-03-13 18:41
基于1302的万年历
这个是1302程序,液晶用12864来显示...
用户1316816 2008-03-13 18:38
模拟SPI接口程序
//***********************************************************//功能      : 由AVR作为主机,向FPGA发送数据,采用模拟SPI接...
我要评论
5
6
关闭 站长推荐上一条 /2 下一条