一個SPI的實例,通過SPI實現(xiàn)兩機通訊, 采用中斷方式實現(xiàn)雙全工通訊。
本例用兩MEGA8515實現(xiàn),連接為:
MISO----MISO
MOSI----MOSI
SCK ----SCK
/SS ----/SS
將要發(fā)送的數(shù)據(jù)加載到發(fā)送緩沖區(qū)的函數(shù)fill_tx_buffer和從接收緩沖區(qū)讀出數(shù)據(jù)的函數(shù)read_rx_buffer未給出,根據(jù)各自需求請自己完成。
#define SPI_RX_BUFFER_SIZE 10
#define SPI_RX_BUFFER_MASK ( SPI_RX_BUFFER_SIZE - 1 )
#define SPI_TX_BUFFER_SIZE 10
#define SPI_TX_BUFFER_MASK ( SPI_TX_BUFFER_SIZE - 1 )
#define SET_SPI_MODE PORTB.4
#define SPI_MODE PINB.4
static unsigned char SPI_RxBuf[SPI_RX_BUFFER_SIZE];
static volatile unsigned char SPI_RxHead;
static unsigned char SPI_TxBuf[SPI_TX_BUFFER_SIZE];
static volatile unsigned char SPI_TxHead;
//******************************************
// SPI 中斷服務(wù)程序
//******************************************
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
if(spi_m==0) //如果spi_m為0,表明是接收狀態(tài)
{
data = SPDR; //讀入接受到的數(shù)據(jù)
SPI_RxBuf[SPI_RxHead-1] = data; //將接收到的數(shù)據(jù)存入接收緩存區(qū)
if ( SPI_RxHead == SPI_RX_BUFFER_MASK ) //如果是接收幀的最后一個數(shù)據(jù)
{
SPI_RxHead = 0; //已接收數(shù)據(jù)還原
MSTR=1; //接收完成,將SPI設(shè)回主方式
spi_trans_com=1; //置接收完成標(biāo)志
}
else
{
SPI_RxHead++; //已接收數(shù)據(jù)計數(shù)器加1
}
}
else //如果spi_m為1,表明是發(fā)送狀態(tài)
{
if ( SPI_TxHead <= SPI_TX_BUFFER_MASK) //如果要發(fā)送的數(shù)據(jù)還未全部發(fā)完
{
SPDR = SPI_TxBuf[SPI_TxHead]; //從發(fā)送緩存區(qū)取數(shù)發(fā)送
SPI_TxHead++; //已發(fā)送數(shù)據(jù)計數(shù)器加1
}
else //如果要發(fā)送的數(shù)據(jù)已全部發(fā)完
{
SPI_TxHead=0; //已發(fā)送數(shù)據(jù)計數(shù)器還原
DDRB.4=0;
SET_SPI_MODE=1; //釋放總線,以便接收方進(jìn)入主發(fā)送。
spi_m=0;
spi_sending=0; //清空發(fā)送中標(biāo)記
}
}
}
//******************************************
// SPI 初始化
//******************************************
void InitSPI(void)
{
SPCR=0x52;
SPI_RxHead = 0;
SPI_TxHead = 0;
}
//******************************************
//發(fā)送數(shù)據(jù)
//******************************************
void spi_send(void)
{
if(spi_sending==0) //發(fā)送中標(biāo)記為0,表明spi發(fā)送空閑
{
fill_tx_buffer(); //調(diào)用fill_tx_buffer函數(shù),將要發(fā)送的數(shù)據(jù)加載到發(fā)送緩沖區(qū)
while(PINB.4==0) //如果PINB.4為低,表明總線被接受方占用,等待直至接受方發(fā)送完成。
{;}
InitSPI(); //初始化spi為主方式
DDRB.4=1;
SET_SPI_MODE=0; //將PORTB.4拉低,強迫接收方進(jìn)入從接收方式
spi_m=1; //置spi_m標(biāo)志表明為發(fā)送狀態(tài)
delay_us(10);
spi_sending=1; //置spi_sending標(biāo)志表明發(fā)送進(jìn)行中
SPDR=0xFF; //開始發(fā)送,接收方接收到的第一個數(shù)據(jù)為0xFF應(yīng)忽略
SPIE=1; //開SPI中斷,
SPI_TxHead = 0; //已發(fā)送數(shù)據(jù)計數(shù)器清0
}
}
void main(void)
{
...
while(1)
{
...
if(spi_trans_com==1) //如果接收完成標(biāo)志為1,表明有所數(shù)據(jù)已接收
{
read_rx_buffer(); //調(diào)用read_rx_buffer函數(shù),將接收到的數(shù)據(jù)從接收緩沖區(qū)讀出
spi_trans_com=0; //讀完清除接收完成標(biāo)志
}
...
}
}
AVR單片機SPI通訊實例程序 (C語言源代碼)
- ARM(389826)
相關(guān)推薦
熱點推薦
AVR單片機C語言例程(書籍 仿真)集合大全
本內(nèi)容提供了AVR單片機C語言實例書籍集合,比較全面的介紹了AVR單片機的所有知識書籍適合新手及相關(guān)技術(shù)人員開發(fā)學(xué)習(xí).基于AVR Studio+WinAVR(GCC)組合環(huán)境和Proteus硬件仿真
2018-10-15 15:03:34
AVR單片機C語言編程及應(yīng)用實例
AVR單片機C語言編程及應(yīng)用實例本書針對Amel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT9OLS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既
2010-03-19 21:28:42
AVR單片機實用C語言程序設(shè)計與典型實例..光盤
AVR單片機實用C語言程序設(shè)計與典型實例 吳健編著光盤使用說明#################################光盤內(nèi)容:本光盤中主要放置有書中實例的C語言源程序。
2013-05-31 12:51:05
AVR系列單片機C語言編程與應(yīng)用實例—金春林*清華大學(xué)教材
和指針等。 本書的特點是:深入淺出。從最基本的概念開始,循序漸進(jìn)地講解單片機的應(yīng)用開發(fā);列舉了大量實例,使讀者能從實際應(yīng)用中掌握單片機的開發(fā)與應(yīng)用技術(shù)。 本書適合作為從事單片機開發(fā)人員的參考用書。AVR系列單片機C語言編程與應(yīng)用實例[hide][/hide]`
2011-11-16 10:02:32
AVR系列單片機C語言編程及應(yīng)用實例
AVR系列單片機C語言編程及應(yīng)用實例對Amel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT9OLS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既
2008-07-11 09:32:23
avr單片機C語言開發(fā)入門指導(dǎo)
6.26C能支持的庫函數(shù)。本書重點放在如何利用C語言來操作AVR單片機的硬件資源,以及如何編寫一些實用的程序段,最后再通過一些簡單的應(yīng)用實例來說明如何使用C語言一開發(fā)AVR芯片。本書適合開發(fā)AVR單片機
2010-03-19 21:24:53
單片機C語言編程寶典大全,初學(xué)必備
單片機應(yīng)用從零開始(400頁PPT)6. 單片機程序設(shè)計實例 7. 單片機應(yīng)用程序設(shè)計技術(shù)_周航慈.pdf 8. 8051單片機C語言徹底應(yīng)用 9. C語言程序實例大全-220個詳細(xì)程序源代碼 10. 笨辦法學(xué)C語言 (完整翻譯版)
2022-04-18 10:04:16
【下載】《AVR單片機實用C語言程序設(shè)計與典型實例》
`內(nèi)容簡介《AVR單片機實用C語言程序設(shè)計與典型實例》以ATMEL公司新一代AVR系列單片機為主,全面系統(tǒng)地介紹了以AVR為核心構(gòu)成的單片機嵌入式系統(tǒng)的各種應(yīng)用,算法分析與仿真等知識。主要內(nèi)容包括
2017-09-04 17:17:23
AVR系統(tǒng)單片機C語言編程與應(yīng)用實例
AVR系統(tǒng)單片機C語言編程與應(yīng)用實例針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT90LS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既涉及到了單片機
2008-10-27 22:51:11
102
102AVR單片機C語言編程及應(yīng)用實例
AVR單片機C語言編程及應(yīng)用實例:本書針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT90LS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既涉及到了單片機
2009-04-27 20:45:53
0
0單片機接口技術(shù)(C51版)例程源代碼
單片機接口技術(shù)(C51版)例程源代碼:文件名基本與教材中的例題序號一致,如"例3-2"的源程序為"Ch3-2"。有些程序在使用前請參閱程序開頭的注釋,這些注釋解釋了程序使用方法。
2009-06-12 23:30:59
0
0AVR單片機與串行AD的SPI接口設(shè)計
為了解決信號采集系統(tǒng)的同步串行通訊問題,在理解AVR 單片機SPI接口的通訊原
理和方法的基礎(chǔ)上,分析了AVR 單片機SPI接口的工作過程,
2011-02-18 16:07:59
211
211AVR單片機C語言實例書籍集合
本內(nèi)容提供了AVR單片機C語言實例書籍集合,比較全面的介紹了AVR單片機的所有知識書籍 適合新手及相關(guān)技術(shù)人員開發(fā)學(xué)習(xí).
2011-04-01 10:06:17
6137
6137DS18B20基于51單片機的C語言源代碼
DS18B20基于51單片機的C語言源代碼。實現(xiàn)溫度數(shù)據(jù)的讀取和顯示,使用時請注意程序中所定義的每個單片機引腳,希望對單片機初學(xué)者有幫助。
2015-11-03 11:33:07
8
8基于AVR+PROTEUS仿真_單片機C語言程序設(shè)計實例100例
本書基于AVR Studio+WinAVR(GCC)組合環(huán)境和PROTEUS硬件仿真平臺,提供了100個AVR單片機C程序設(shè)計案例。
2016-03-22 18:02:28
35
35單片機C語言程序設(shè)計實訓(xùn)100例基于+仿真-源代碼
51CTO下載-單片機C語言程序設(shè)計實訓(xùn)100例基于+仿真-源代碼部分
2016-06-16 18:21:22
25
25單片機C語言程序設(shè)計實訓(xùn)100例--基于AVR+PROTEUS仿
單片機C語言程序設(shè)計實訓(xùn)100例--基于AVR+PROTEUS仿真
2016-12-16 22:13:20
36
36單片機C語言程序設(shè)計實訓(xùn)100例--基于AVR PROTEUS仿真
單片機C語言程序設(shè)計實訓(xùn)100例--基于AVR PROTEUS仿真
2017-01-04 22:01:46
45
45avr單片機c語言編程風(fēng)格介紹
摘要:作為一個初學(xué)者如何具有良好的程序設(shè)計風(fēng)格呢?下面小編將以avr單片機介紹它的c語言編程風(fēng)格。
2017-12-10 10:08:55
9578
9578
單片機教程之51單片機C語言程序設(shè)計教程(王云)資料合集
本文檔的主要內(nèi)容詳細(xì)介紹的是單片機教程之51單片機C語言程序設(shè)計教程(王云)資料合集主要內(nèi)容包括了:電子教材,例程代碼,課后作業(yè)答案,配套視頻
2018-11-14 08:00:00
385
385多個51單片機C語言程序設(shè)計源代碼的詳細(xì)資料合集
本文檔的主要內(nèi)容詳細(xì)介紹的是多個51單片機C語言程序設(shè)計源代碼的詳細(xì)資料合集。
2019-03-11 08:00:00
23
23使用單片機實現(xiàn)Modbus通訊協(xié)議的實例程序和講解分析
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)Modbus通訊協(xié)議的實例程序和講解分析。
2019-09-06 17:26:00
47
47使用PIC單片機進(jìn)行匯編語言的學(xué)習(xí)資料和實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用PIC單片機進(jìn)行匯編語言的學(xué)習(xí)資料和實例程序免費下載。
2019-08-13 17:33:00
33
33NEC單片機C編譯中SREG的應(yīng)用實例程序說明
本文檔的主要內(nèi)容詳細(xì)介紹的是NEC單片機C編譯中SREG的應(yīng)用實例程序說明。
2019-08-01 17:34:00
0
051單片機帶注解MyCreateOS的C語言源代碼免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機帶注解MyCreateOS的C語言源代碼免費下載。
2019-11-14 17:06:04
6
6單片機C語言400實例的詳細(xì)工程文件和源代碼免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是單片機C語言400實例的詳細(xì)工程文件和源代碼免費下載。
2019-12-05 17:55:00
80
80學(xué)習(xí)AVR單片機C語言編程的方法和教程說明
AVR單片機是一種新型高效的單片機,主要的編程語言是C語言,但與一般的c語言又有所不同,與其它的單片機C語言也有所不同,AVR單片機C語言有自已的特點.學(xué)習(xí)AVR單片機首先要解決 AVR單片機c語言
2019-12-30 08:00:00
17
1751單片機C語言應(yīng)用程序實例精講的代碼合集免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機C語言應(yīng)用程序實例精講的代碼合集免費下載。
2020-01-15 16:15:00
220
220秦龍MSP430單片機C語言應(yīng)用程序設(shè)計實例精解的實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是秦龍MSP430單片機C語言應(yīng)用程序設(shè)計實例精解的實例程序免費下載。
2020-09-01 08:00:00
36
36使用單片機C語言實現(xiàn)消防車警報的實例程序和工程文件免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機C語言實現(xiàn)消防車警報的實例程序和工程文件免費下載。
2021-02-02 10:48:18
17
17使用單片機C語言實現(xiàn)步進(jìn)電機轉(zhuǎn)動原理的實例程序和工程文件免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機C語言實現(xiàn)步進(jìn)電機轉(zhuǎn)動原理的實例程序和工程文件免費下載。
2021-02-02 10:48:18
10
10使用單片機實現(xiàn)報警發(fā)聲的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)報警發(fā)聲的C語言實例程序免費下載。
2021-03-02 11:34:03
10
10使用單片機實現(xiàn)步進(jìn)電機轉(zhuǎn)速數(shù)碼管顯示的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)步進(jìn)電機轉(zhuǎn)速數(shù)碼管顯示的C語言實例程序免費下載。
2021-03-02 11:34:02
11
11使用單片機實現(xiàn)步進(jìn)電機按鍵控制的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)步進(jìn)電機按鍵控制的C語言實例程序免費下載。
2021-03-02 11:33:59
17
17實現(xiàn)PC機與單片機雙向通信的C語言程序設(shè)計實例免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)PC機與單片機雙向通信的C語言程序設(shè)計實例免費下載。
2021-03-30 15:52:46
29
29使用單片機實現(xiàn)ADC0832模數(shù)轉(zhuǎn)換與LCD顯示的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)ADC0832模數(shù)轉(zhuǎn)換與LCD顯示的C語言實例程序免費下載。
2021-03-30 16:49:01
63
63使用單片機實現(xiàn)單片機內(nèi)置EEPROM讀寫測試的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)單片機內(nèi)置EEPROM讀寫測試的C語言實例程序免費下載。
2021-03-30 16:48:00
19
19使用單片機實現(xiàn)溫室監(jiān)控系統(tǒng)仿真設(shè)計的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機實現(xiàn)溫室監(jiān)控系統(tǒng)仿真設(shè)計的C語言實例程序免費下載。
2021-03-30 16:48:00
10
10使用單片機和DAC0832生成鋸齒波的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機和DAC0832生成鋸齒波的C語言實例程序免費下載。
2021-03-30 16:48:54
26
26C語言 | 用51單片機實現(xiàn)公歷與農(nóng)歷星期的轉(zhuǎn)換(完整源代碼)
C語言 | 用51單片機實現(xiàn)公歷與農(nóng)歷星期的轉(zhuǎn)換(完整源代碼)
2021-11-21 11:36:07
56
56
電子發(fā)燒友App


評論