今天发个程序上来吧,是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);
}
用户365246 2011-8-11 00:23
用户365246 2011-8-11 00:21
用户365246 2011-8-11 00:19
用户78553 2008-1-17 10:20
用户1047417 2007-7-7 12:26
不错,提个建议,请把编译环境列出来。
用户153800 2007-4-9 00:28
不好意思我不是学电子专业的对这方面不太懂,现在遇到开关电源对仪表产生干扰不知道怎么去屏蔽他,所以想请教,二极管怎么接呢?怎么选用呢?磁珠又是怎么选用呢?请赐教!
用户1053025 2006-9-27 11:54
msn:cocappjj@hotmail.com
用户50962 2006-9-26 18:17
用户1053025 2006-9-26 11:45