一個SPI的實例,通過SPI實現(xiàn)兩機(jī)通訊, 采用中斷方式實現(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拉低,強(qiáng)迫接收方進(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單片機(jī)SPI通訊實例程序 (C語言源代碼)
- ARM(361233)
相關(guān)推薦
51單片機(jī)C語言程序設(shè)計
(原創(chuàng)【全】) 51單片機(jī)C語言程序設(shè)計--速學(xué)教程實例(入門篇+進(jìn)階+高級綜合).doc/(原創(chuàng)【全】) 51單片機(jī)C語言程序設(shè)計--速學(xué)教程實例(入門篇+進(jìn)階+高級綜合).doc/(原創(chuàng)00
2021-07-14 07:17:51
51單片機(jī)C語言程序設(shè)計教程_電子版樣章(王云編著)
案例來講述單片機(jī)的工作原理。本書提供有配套課件,方便進(jìn)行PPT教學(xué);書中提供完整實例代碼和課后作業(yè)參考例程,所有程序代碼都可以在Keil編程軟件上通過調(diào)試,并在YL51開發(fā)板上驗證,方便讀者參考并動手實踐
2018-10-11 13:47:44
51單片機(jī)競賽設(shè)計實例程序44例分享
51單片機(jī)競賽設(shè)計實例程序44例(Proteus仿真資料) 51單片機(jī)競賽設(shè)計實例程序44例(Proteus仿真資料).zip
2018-07-19 03:00:51
AVR單片機(jī)C語言例程(書籍 仿真)集合大全
本內(nèi)容提供了AVR單片機(jī)C語言實例書籍集合,比較全面的介紹了AVR單片機(jī)的所有知識書籍適合新手及相關(guān)技術(shù)人員開發(fā)學(xué)習(xí).基于AVR Studio+WinAVR(GCC)組合環(huán)境和Proteus硬件仿真
2018-10-15 15:03:34
AVR單片機(jī)C語言程序框架(單片機(jī)最簡操作系統(tǒng))及詳解
本帖最后由 lvhoujun 于 2014-2-28 00:37 編輯
這是本人以ATMEGA128為例編寫的C語言程序框架,做簡單的修改即適合AVR所有單片機(jī)。可以說是一個單片機(jī)最簡操作系統(tǒng)
2014-02-12 20:27:23
AVR單片機(jī)C語言開發(fā)入門與典型實例,單片機(jī)學(xué)習(xí)必看
本帖最后由 一只耳朵怪 于 2018-5-24 17:37 編輯
AVR單片機(jī)C語言開發(fā)入門與典型實例,是比較全面的,我之前在華清遠(yuǎn)見學(xué)習(xí)的時候的一些學(xué)習(xí)資料,分享給你們學(xué)學(xué)。
2018-05-24 15:17:10
AVR單片機(jī)C語言開發(fā)入門指導(dǎo)
AVR單片機(jī)C語言開發(fā)入門指導(dǎo),PDF文檔,希望對大家有用 AVR單片機(jī)C語言開發(fā)入門指導(dǎo).pdf 15.76 MB, 下載次數(shù): 64
2018-07-03 09:32:38
AVR單片機(jī)C語言編程及應(yīng)用實例
AVR單片機(jī)C語言編程及應(yīng)用實例本書針對Amel公司的AVR系列單片機(jī)和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT9OLS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既
2010-03-19 21:28:42
AVR單片機(jī)C語言編程及應(yīng)用實例
`<p>AVR單片機(jī)C語言編程及應(yīng)用實例針對Atmel公司的AVR系列單片機(jī)和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT90LS8535的C語言
2009-04-27 20:51:49
AVR單片機(jī)C語言實例講解帶你輕松從入門到精通
本帖最后由 eehome 于 2013-1-5 10:08 編輯
AVR單片機(jī)C語言實例講解帶你輕松從入門到精通
2012-11-05 14:22:39
AVR單片機(jī)GCC程序設(shè)計
開發(fā)人員,我不會建議你使用BASIC 編寫AVR 程序,因為我們在編寫與硬件密切相關(guān)的單片機(jī)程序時通常需要想象編譯器是如何將這些代碼翻譯成匯編程序的,而C 更適合我們?nèi)ミ@樣做。二 GCC 編譯器UNIX 上
2009-04-27 21:11:44
AVR單片機(jī)實用C語言程序設(shè)計與典型實例..光盤
AVR單片機(jī)實用C語言程序設(shè)計與典型實例 吳健編著光盤使用說明#################################光盤內(nèi)容:本光盤中主要放置有書中實例的C語言源程序。
2013-05-31 12:51:05
AVR系列單片機(jī)C語言編程與應(yīng)用實例—金春林*清華大學(xué)教材
和指針等。 本書的特點是:深入淺出。從最基本的概念開始,循序漸進(jìn)地講解單片機(jī)的應(yīng)用開發(fā);列舉了大量實例,使讀者能從實際應(yīng)用中掌握單片機(jī)的開發(fā)與應(yīng)用技術(shù)。 本書適合作為從事單片機(jī)開發(fā)人員的參考用書。AVR系列單片機(jī)C語言編程與應(yīng)用實例[hide][/hide]`
2011-11-16 10:02:32
AVR系列單片機(jī)C語言編程及應(yīng)用實例
AVR系列單片機(jī)C語言編程及應(yīng)用實例對Amel公司的AVR系列單片機(jī)和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT9OLS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既
2008-07-11 09:32:23
avr單片機(jī)C語言開發(fā)入門指導(dǎo)
6.26C能支持的庫函數(shù)。本書重點放在如何利用C語言來操作AVR單片機(jī)的硬件資源,以及如何編寫一些實用的程序段,最后再通過一些簡單的應(yīng)用實例來說明如何使用C語言一開發(fā)AVR芯片。本書適合開發(fā)AVR單片機(jī)
2010-03-19 21:24:53
單片機(jī)C語言程序實例
`單片機(jī)C語言程序,幾百道代碼,適合新手練習(xí),帶注釋。感興趣的還不趕緊戳進(jìn)去:http://m.1cnz.cn/soft/33/2015/20150721377286.html`
2015-07-22 11:08:53
單片機(jī)C語言編程實例
`本書結(jié)合目前應(yīng)用非常廣泛的C語言以及Keil C51編譯器,詳細(xì)介紹單片機(jī)C語言編程的方法。本書通過大量應(yīng)用實例對單片機(jī)資源及其外圍芯片進(jìn)行詳細(xì)介紹。`
2019-06-22 10:29:50
單片機(jī)C語言編程寶典大全,初學(xué)必備
單片機(jī)應(yīng)用從零開始(400頁P(yáng)PT)6. 單片機(jī)程序設(shè)計實例 7. 單片機(jī)應(yīng)用程序設(shè)計技術(shù)_周航慈.pdf 8. 8051單片機(jī)C語言徹底應(yīng)用 9. C語言程序實例大全-220個詳細(xì)程序源代碼 10. 笨辦法學(xué)C語言 (完整翻譯版)
2022-04-18 10:04:16
單片機(jī)C語言實例有哪些
單片機(jī)C語言實例(400例)/單片機(jī)C語言實例(400例)/1-IO輸出-點亮1個LED燈方法1/單片機(jī)C語言實例(400例)/1-IO輸出-點亮1個LED燈方法1/IO輸出.Opt單片機(jī)C語言實例
2021-07-15 10:06:30
單片機(jī)原理及c語言程序設(shè)計
0417、C語言程序設(shè)計及應(yīng)用實例單片機(jī)的C語言應(yīng)用程序設(shè)計 0413、單片機(jī)原理與應(yīng)用及C51程序設(shè)計課件電子教案0414、《單片機(jī)原理與應(yīng)用》(金龍國)電子教案0427、單片機(jī)典型模塊設(shè)計實例0428、C語言趣味程序百例精解C語言程序設(shè)計及應(yīng)用實例--2
2013-08-14 16:31:29
CVAVR基于CodeVisionAVR的AVR單片機(jī)資料
基于CodeVisionAVR平臺的AVR單片機(jī)資料陳忠平的《基于Proteus的AVR單片機(jī)C語言程序設(shè)計與仿真》的例程馬潮老師的《AVR單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用實踐》電子版CVAVR破解版,無長度限制還有一些實驗例程希望對使用CVAVR編程的朋友有用
2012-07-05 12:21:52
PIC單片機(jī)C語言程序設(shè)計實例精粹
PIC單片機(jī)C語言程序設(shè)計實例精粹新概念51單片機(jī)C語言教程-入門、提高、開發(fā)
2018-10-21 07:20:24
《實戰(zhàn)AVR單片機(jī)C語言》
本帖最后由 zgzzlt 于 2012-8-16 08:29 編輯
《實戰(zhàn)AVR單片機(jī)C語言》
2012-08-15 16:26:15
【下載】《AVR單片機(jī)實用C語言程序設(shè)計與典型實例》
`內(nèi)容簡介《AVR單片機(jī)實用C語言程序設(shè)計與典型實例》以ATMEL公司新一代AVR系列單片機(jī)為主,全面系統(tǒng)地介紹了以AVR為核心構(gòu)成的單片機(jī)嵌入式系統(tǒng)的各種應(yīng)用,算法分析與仿真等知識。主要內(nèi)容包括
2017-09-04 17:17:23
什么是AVR單片機(jī)
采用C語言編程,從而能高效地開發(fā)出目標(biāo)產(chǎn)品.為了對目標(biāo)代碼大小.性能及功耗的優(yōu)化.AVR單片機(jī)采用了大型快速存取寄存器文件和快速單周期指令。
2011-03-04 17:12:57
利用C語言編寫PIC單片機(jī)程序的方法是什么
PI C單片機(jī)程序的方法,本刊特推出《PI C 單片機(jī)C 語言程序設(shè)計》系列連載文章。文中給出的C 語言程序實例,均是可執(zhí)行的,讀者可以放心引用。原來用各種匯編語言編寫的單片機(jī)程序,均可用C一、匯...
2021-07-15 08:40:22
實戰(zhàn)AVR單片機(jī)C語言
實戰(zhàn)AVR單片機(jī)C語言可以能夠全面掌握AVR單片機(jī)。實戰(zhàn)AVR單片機(jī)C語言[hide][/hide]
2011-10-20 12:06:49
求大佬分享atmega16單片機(jī)c語言程序設(shè)計的經(jīng)典實例
求大佬分享atmega16單片機(jī)c語言程序設(shè)計的經(jīng)典實例
2021-09-18 06:37:59
觸控式flash單片機(jī)C語言程序實例
請問哪位大神有觸控式flash單片機(jī)(BS83B04A-4)C語言程序實例分享,想搞清楚具體怎么實現(xiàn)觸摸檢測和控制的?
2020-02-19 22:03:14
AVR系統(tǒng)單片機(jī)C語言編程與應(yīng)用實例
AVR系統(tǒng)單片機(jī)C語言編程與應(yīng)用實例針對Atmel公司的AVR系列單片機(jī)和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT90LS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既涉及到了單片機(jī)
2008-10-27 22:51:1198
AVR單片機(jī)C語言編程及應(yīng)用實例
AVR單片機(jī)C語言編程及應(yīng)用實例:本書針對Atmel公司的AVR系列單片機(jī)和ImageCraft公司的ICC AVR開發(fā)環(huán)境,詳細(xì)地介紹了AT90LS8535的C語言程序設(shè)計。全書共有13章,其內(nèi)容既涉及到了單片機(jī)
2009-04-27 20:45:530
單片機(jī)接口技術(shù)(C51版)例程源代碼
單片機(jī)接口技術(shù)(C51版)例程源代碼:文件名基本與教材中的例題序號一致,如"例3-2"的源程序為"Ch3-2"。有些程序在使用前請參閱程序開頭的注釋,這些注釋解釋了程序使用方法。
2009-06-12 23:30:590
AVR單片機(jī)與串行AD的SPI接口設(shè)計
為了解決信號采集系統(tǒng)的同步串行通訊問題,在理解AVR 單片機(jī)SPI接口的通訊原
理和方法的基礎(chǔ)上,分析了AVR 單片機(jī)SPI接口的工作過程,
2011-02-18 16:07:59211
單片機(jī)C語言程序設(shè)計實訓(xùn)100例基于+仿真-源代碼
51CTO下載-單片機(jī)C語言程序設(shè)計實訓(xùn)100例基于+仿真-源代碼部分
2016-06-16 18:21:2224
合泰_單片機(jī)_AD_Flash_HT66Fxx_應(yīng)用實例程序
合泰_單片機(jī)_AD_Flash_HT66Fxx_應(yīng)用實例程序
2017-09-20 09:16:06276
使用單片機(jī)實現(xiàn)Modbus通訊協(xié)議的實例程序和講解分析
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實現(xiàn)Modbus通訊協(xié)議的實例程序和講解分析。
2019-09-06 17:26:0045
單片機(jī)C語言400實例的詳細(xì)工程文件和源代碼免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)C語言400實例的詳細(xì)工程文件和源代碼免費下載。
2019-12-05 17:55:0074
秦龍MSP430單片機(jī)C語言應(yīng)用程序設(shè)計實例精解的實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是秦龍MSP430單片機(jī)C語言應(yīng)用程序設(shè)計實例精解的實例程序免費下載。
2020-09-01 08:00:0031
使用單片機(jī)實現(xiàn)報警發(fā)聲的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實現(xiàn)報警發(fā)聲的C語言實例程序免費下載。
2021-03-02 11:34:0310
STM8S單片機(jī)匯編實例源代碼免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是一些STM8S單片機(jī)匯編實例源代碼、匯編程序設(shè)計。
2021-03-05 08:00:0010
使用單片機(jī)實現(xiàn)單片機(jī)內(nèi)置EEPROM讀寫測試的C語言實例程序免費下載
本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實現(xiàn)單片機(jī)內(nèi)置EEPROM讀寫測試的C語言實例程序免費下載。
2021-03-30 16:48:0017
基于51單片機(jī)的占空比可調(diào)方波(PWM)例程源代碼
基于51單片機(jī)的單片機(jī)產(chǎn)生占空比可調(diào)方波(PWM)例程源代碼
2023-05-12 15:59:2219
評論
查看更多