




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于51單片機(jī)的SPI總線基于51單片機(jī)的SPI總線單片機(jī)與其它芯片或設(shè)備之間的數(shù)據(jù)傳輸在單片機(jī)的應(yīng)用中具有重要的地位,單片機(jī)本身的數(shù)據(jù)傳輸接口過去主要為8位并行數(shù)據(jù)接口或異步串行通信接口,但電子技術(shù)的迅速發(fā)展使得許多新的數(shù)據(jù)傳輸接口標(biāo)準(zhǔn)不斷涌現(xiàn),大多數(shù)的51單片機(jī)并沒有在硬件中集成這些新的數(shù)據(jù)傳輸接口。SPI(SerialPeripheralInterface)總線是由Motorola公司提出的一種同步串行外圍接口,采用三或四根信號線。51單片機(jī)一般并沒有在硬件中集成這種新的接口,所以要用軟件來進(jìn)行模擬。1硬件設(shè)計(jì)DS1302是涓流充電時(shí)鐘芯片,內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM,
2、實(shí)時(shí)時(shí)鐘/日歷電路提供秒、分、時(shí)、日、星期、月、年的信息,每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整,時(shí)鐘操作可通過AM/PM指示決定采用24或12小時(shí)格式。DS1302與單片機(jī)之間能簡單地采用SPI同步串行的方式進(jìn)行通信,僅需用到三根信號線:RES(復(fù)位),1/0(數(shù)據(jù)線),SCLK(同步串行時(shí)鐘)。通過1602LCD顯示日期和時(shí)間,其電路如下所示。LCD1LIHIISL在桌面上雙擊圖標(biāo)打開ISIS7Professional窗口(本人使用的是v7.4SP3中文版)。單擊菜單命令“文件”一“新建設(shè)計(jì)”,選擇DEFAULT模板,保存文件名為“SPI.DSN”。在器件選擇按鈕I郵編中單擊“P”按鈕,或執(zhí)行菜
3、單命令“庫”f“拾取元件/符號”,添加如下表所示的元件。51單片機(jī)AT89C51一片晶體CRYSTAL12MHz只瓷片電容CAP22pF二只電解電容CAP-ELEC10uF一只電阻RES10K一只排阻RESPAC-810K一只1602液晶顯示器LM016L只晶體CRYSTAL32.768KHz一只時(shí)鐘芯片DS1302一片電池BATTERY3V一只若用Proteus軟件進(jìn)行仿真,則上圖中的兩只晶體、U1的復(fù)位電路和U1的31腳以及電池都可以不畫,它們大都是默認(rèn)的。在ISIS原理圖編輯窗口中放置元件,再單擊工具箱中元件終端圖標(biāo),在對象選擇器中單擊POWER或GROUND放置電源或地。放置好元件后,
4、布好線。左鍵雙擊各元件,設(shè)置相應(yīng)元件參數(shù),完成電路圖的設(shè)計(jì)。2軟件設(shè)計(jì)采用AT89C51以及日歷芯片DS1302和1602LCD組成時(shí)鐘的流程圖如下所示。本例主要目的是如何用軟件模擬SPI總線對DS1302進(jìn)行讀、寫,其詳細(xì)詳細(xì)C51程序如下。/實(shí)例:基于DS1302的日歷時(shí)鐘#include/包含單片機(jī)寄存器的頭文件#include/包含_nop_()函數(shù)定義的頭文件/*以下是DS1302芯片的操作程序*/unsignedcharcodedigit10=0123456789;/定義字符數(shù)組顯示數(shù)字sbitDATA二P1J;/位定義1302的數(shù)據(jù)輸出端定義在P1.1引腳sbitRST二Pl2;
5、/位定義1302的復(fù)位端口定義在P1.2引腳sbitSCLK二Pl八0;/位定義1302的時(shí)鐘輸出端口定義在P1.0引腳/*函數(shù)功能:延時(shí)若干微秒入口參數(shù):n*/voiddelaynus(unsignedcharn)unsignedchari;for(i=0;in;i+)/*函數(shù)功能:向1302寫一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):dat*/voidWrite1302(unsignedchardat)unsignedchari;SCLK=0;delaynus(2);for(i=0;i=1;/將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個(gè)數(shù)據(jù)位/*函數(shù)功能:根據(jù)命令字,向1302寫一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd,儲(chǔ)
6、存命令字;dat,儲(chǔ)存待寫的數(shù)據(jù)*/voidWriteSet1302(unsignedcharCmd,unsignedchardat)/禁止數(shù)據(jù)傳遞/確保寫數(shù)居前SCLK被拉低/啟動(dòng)數(shù)據(jù)傳輸/稍微等待,使硬件做好準(zhǔn)備/寫入命令字/寫數(shù)據(jù)/將時(shí)鐘電平置于已知狀態(tài)/禁止數(shù)據(jù)傳遞RST=0;SCLK=0;RST=1;delaynus(2);Write1302(Cmd);Write1302(dat);SCLK=1;RST=0;/*函數(shù)功能:從1302讀一個(gè)字節(jié)數(shù)據(jù)出口參數(shù):dat*/unsignedcharRead1302(void)/稍微等待,使硬件做好準(zhǔn)備/連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù)unsignedc
7、hari,dat;delaynus(2);for(i=0;i=1;if(DATA=1)dat|=0 x80;SCLK=1;delaynus(2);SCLK=0;delaynus(2);/將讀出的數(shù)據(jù)返回returndat;/*函數(shù)功能:根據(jù)命令字,從1302讀取一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd出口參數(shù):dat*/unsignedcharReadSet1302(unsignedcharCmd)unsignedchardat;RST=0;SCLK=0;RST=1;Write1302(Cmd);dat=Read1302();SCLK=1;RST=0;returndat;/拉低RST/確保寫數(shù)居前SCLK
8、被拉低/啟動(dòng)數(shù)據(jù)傳輸/寫入命令字/讀出數(shù)據(jù)/將時(shí)鐘電平置于已知狀態(tài)/禁止數(shù)據(jù)傳遞/將讀出的數(shù)據(jù)返回/*函數(shù)功能:1302進(jìn)行初始化設(shè)置*/voidInit_DS1302(void)WriteSet1302(0 x8E,0 x00);/寫入不保護(hù)指令WriteSet1302(0 x80,(0/10)4|(0%10);/寫入秒的初始值WriteSet1302(0 x82,(0/10)4|(0%10);/寫入分的初始值WriteSet1302(0 x84,(12/10)4|(12%10);/寫入小時(shí)的初始值WriteSet1302(0 x86,(24/10)4|(24%10);/寫入日的初始值Wri
9、teSet1302(0 x88,(4/10)4|(4%10);/寫入月的初始值WriteSet1302(0 x8c,(10/10)4|(10%10);/寫入年的初始值/*以下是對液晶模塊的操作程序*/sbitRS=P20;/寄存器選擇位,將RS位定義為P2.0引腳sbitRW二P2J;/讀寫選擇位,將RW位定義為P2.1引腳sbitE=P22;/使能信號位,將E位定義為P2.2引腳sbitBF二P0八7;/忙碌標(biāo)志位,將BF位定義為P0.7引腳/*函數(shù)功能:延時(shí)1ms(3j+2)*i=(3X33+2)X10=1010(微秒),可以認(rèn)為是1毫秒*/voiddelay1ms()unsignedch
10、ari,j;for(i=0;i10;i+)for(j=0;j33;j+)/*函數(shù)功能:延時(shí)若干毫秒入口參數(shù):n*/voiddelaynms(unsignedcharn)unsignedchari;for(i=0;i4)*10+(ReadValue&0 x0F);/將讀出數(shù)據(jù)轉(zhuǎn)化DisplaySecond(second);/顯示秒ReadValue=ReadSet1302(0 x83);/從分寄存器讀數(shù)據(jù)minute=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/將讀出數(shù)據(jù)轉(zhuǎn)化DisplayMinute(minute);/顯示分ReadValue=ReadS
11、etl302(0 x85);/從時(shí)寄存器讀數(shù)據(jù)hour=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/將讀出數(shù)據(jù)轉(zhuǎn)化DisplayHour(hour);/顯示小時(shí)ReadValue=ReadSet1302(0 x87);/從日寄存器讀數(shù)據(jù)day=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/將讀出數(shù)據(jù)轉(zhuǎn)化DisplayDay(day);/顯示日ReadValue=ReadSet1302(0 x89);/從月寄存器讀數(shù)據(jù)month=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/將讀出
12、數(shù)據(jù)轉(zhuǎn)化DisplayMonth(month);/顯示月ReadValue=ReadSet1302(0 x8d);/從年寄存器讀數(shù)據(jù)year=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/將讀出數(shù)據(jù)轉(zhuǎn)化DisplayYear(year);/顯示年打開Keil程序(本人使用的是Keil8.05中文版),執(zhí)行菜單命令“工程”f“新建工程”創(chuàng)建“SPI”項(xiàng)目,并選擇單片機(jī)型號為AT89C51。執(zhí)行菜單命令“文件”f“新建”創(chuàng)建文件,輸入C語言源程序,保存為“SPI.C”。在ProjectWorkspace窗口中右擊源代碼組1,選擇“添加文件到組源代碼組l”將源程
13、序“SPI.C”添加到項(xiàng)目中。在Keil中執(zhí)行執(zhí)行菜單命令“工程”f“創(chuàng)建目標(biāo)”(或點(diǎn)擊“創(chuàng)建目標(biāo)”快捷按鈕),編譯源程序。如果編譯成功,則在“OutputWindow”的“創(chuàng)建”窗口中顯示沒有錯(cuò)誤,并創(chuàng)建了“SPI.HEX”文件。3仿真與調(diào)試關(guān)于Proteus與Keil的聯(lián)合仿真調(diào)試,可參見我以前所寫的博文或其它參考資料。啟動(dòng)Proteus的ISIS,并將其放在屏幕的右上角(可將原理圖放大到合適大小);再啟動(dòng)Keil的口Vision3,并將其放在屏幕的左下角。在Keil中執(zhí)行菜單命令“調(diào)試”f“啟動(dòng)/停止調(diào)試”,或直接單擊圖標(biāo)二匸進(jìn)入Keil調(diào)試環(huán)境。同時(shí),在ProteusISIS的窗口中可看出Proteus也進(jìn)入了程序調(diào)試狀態(tài)。在Ke訂代碼編輯窗口中設(shè)置相應(yīng)斷點(diǎn),斷點(diǎn)的設(shè)置方法:在需要設(shè)置斷點(diǎn)語句前雙擊鼠標(biāo)左鍵,可設(shè)置斷點(diǎn);再次雙擊,可取消該斷點(diǎn)。在Keil中按F5鍵(或點(diǎn)擊“運(yùn)行”快捷按鈕)運(yùn)行程序。1602LCD第一行顯示日期“Date:20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 結(jié)核診療考試題及答案
- 山東鐵通面試題及答案
- 專注力培養(yǎng)的有效策略
- 2026屆廣西桂林市、賀州市、崇左市化學(xué)高一第一學(xué)期期末檢測試題含解析
- 家電公司質(zhì)量管理辦法
- 2020-2025年教師資格之小學(xué)教育教學(xué)知識與能力題庫檢測試卷A卷附答案
- 21.2.3解一元二次方程-因式分解法(第2課時(shí))(教學(xué)課件)數(shù)學(xué)人教版九年級上冊
- 鄉(xiāng)村房屋清掃方案(3篇)
- 管理項(xiàng)目方案設(shè)計(jì)(3篇)
- 戀愛課件教學(xué)課件
- 同步控制器說明書
- 輔助角公式練習(xí)題
- GB/T 7631.8-1990潤滑劑和有關(guān)產(chǎn)品(L類)的分類第8部分:X組(潤滑脂)
- GB/T 40333-2021真空計(jì)四極質(zhì)譜儀的定義與規(guī)范
- GB/T 35778-2017企業(yè)標(biāo)準(zhǔn)化工作指南
- 羽毛球校本教材
- GB/T 15601-2013管法蘭用金屬包覆墊片
- GB/T 12325-2008電能質(zhì)量供電電壓偏差
- 汽輪機(jī)原理-凝汽器課件
- 二年級下冊認(rèn)識方向練習(xí)題
- 檢驗(yàn)報(bào)告(風(fēng)機(jī))
評論
0/150
提交評論