版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
壬建工商大學(xué)
單片機實驗
課程名稱:步進電機表實驗
授課班級:2023級自動化三班
任課教師:文遠落
計劃學(xué)時:學(xué)時------------------
實驗成員:張?zhí)僖w福亮王聰慧
秦菱蔚梁欽鄭歡
目錄
摘要.......................................................
第一章概述................................................
1.1實驗?zāi)康?......................................................
1.2實驗規(guī)定.......................................................
1.3步進電機的介紹...................................................
1.4研究思緒......................................................
第二章硬件設(shè)計............................................
2.151單片機介紹...................................................
2.2UIN2023A.........................................................................................................................
2.3ZLG7290.............................................................................................................................
2.3.17290工作原理...............................................
2.3.27290引腳圖...................................................
第三章相關(guān)圖像................................................
3.1總電路圖....................................................
3.27290控制數(shù)碼管..................................................
3.3程序流程圖.......................................................
3.3.1控制框圖....................................................
3.3.2流程圖.....................................................
第四章調(diào)試.....................................................
第五章心得體會.................................................
附錄【一】系統(tǒng)程序.............................................
附錄【二】參考文獻............................................../摘
要】:
步進電機是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元步進電機件。在非超載的情
況下,電機的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響,當(dāng)
步進驅(qū)動器接受到一個脈沖信號,它就驅(qū)動步進電機按設(shè)定的方向轉(zhuǎn)動一個固定的角度,稱為
“步距角”,它的旋轉(zhuǎn)是以固定的角度一步一步運營的??梢酝ㄟ^控制脈沖個數(shù)來控制角位移
量,從而達成準(zhǔn)擬定位的目的;同時可以通過控制脈沖頻率來控制電機轉(zhuǎn)動的速度和加速度,
從而達成調(diào)速的目的。
本課程設(shè)計的內(nèi)容是運用51單片機,達成控制步進電機的啟動、停止、正轉(zhuǎn)、反轉(zhuǎn)、點動
和狀態(tài)顯示的目的,使步進電機控制更加靈活。步進電機驅(qū)動芯片采用UIN2023,具有大電流、
高電壓,外電路簡樸等優(yōu)點。運用四位數(shù)碼管(ZLG7290)增設(shè)電機狀態(tài)顯示功能,各項數(shù)
據(jù)更直觀。實測結(jié)果表白,該控制系統(tǒng)達成了設(shè)計的規(guī)定。
【關(guān)鍵詞】:單片機步進電機UIN2023ZLG7290數(shù)碼管
第一章概述
1.1實驗?zāi)康?/p>
1、單片機對步進電機控制可以熟悉步進電機的原理和應(yīng)用。
2、單片機對步進電機控制可以熟悉單哦就功能已經(jīng)原理、構(gòu)造。
3、通過這次實驗?zāi)苓\用所學(xué)基本理論知識、專業(yè)技能來對問題進行分析,思考,解決,提高
對專業(yè)知識的掌握以及鍛煉邏輯思維能力。
1.2實驗規(guī)定
實現(xiàn)步進電機按規(guī)定的速度正轉(zhuǎn)、反轉(zhuǎn),轉(zhuǎn)過指定的角度,要有點動功能。所有命令通過鍵
盤輸入,步進電機在運營過程中要有狀態(tài)和數(shù)據(jù)指示。
1.3步進電機的介紹
步進電機是一種感應(yīng)電機,它的工作原理是運用電子電路,將直流電變成分時供電的,多相
時序控制電流,用這種電流為步進電機供電,步進電機才干正常工作,驅(qū)動器就是為步進電機
分時供電的,多相時序控制器
雖然步進電機已被廣泛地應(yīng)用,但步進電機并不能像普通的直流電機,交流電機在常規(guī)
下使用。它必須由雙環(huán)形脈沖信號、功率驅(qū)動電路等組成控制系統(tǒng)方可使用。因此用好步
進電機卻非易事,它涉及到機械、電機、電子及計算機等許多專業(yè)知識。
步進電機作為執(zhí)行元件,是機電一體化的關(guān)鍵產(chǎn)品之一,廣泛應(yīng)用在各種自動化控制
系統(tǒng)中。隨著微電子和計算機技術(shù)的發(fā)展,步進電機的需求量與日俱增,在各個國民經(jīng)濟領(lǐng)域
都有應(yīng)用。
步進電機是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機構(gòu)。通俗一點講:當(dāng)步進驅(qū)動器接受到
一個脈沖信號,它就驅(qū)動步進電機按設(shè)定的方向轉(zhuǎn)動一個固定的角度(即步進角)。您可以通
過控制脈沖個數(shù)來控制角位移量,從而達成準(zhǔn)擬定位的目的;同時您可以通過控制脈沖頻率
來控制電機轉(zhuǎn)動的速度和加速度,從而達成調(diào)速的目的。
圖1步進電機剖面圖
1.4研究思緒
1、了解單片機自身內(nèi)部應(yīng)有的資源,如:中斷、定期器、計數(shù)器、1\0的使用。
2、了解步進電機的工作原理和作用。
3、根據(jù)步進電機的原理,分析并分派單片機內(nèi)部資源,并根據(jù)單片機的資源,來實現(xiàn)硬件電路的
設(shè)計以及軟件程序的編寫。
4.、對于自己不熟悉的東西,查閱資料。
5、在設(shè)計好單片機步進電機時,要學(xué)會分析電路中出現(xiàn)的問題,并好好總結(jié)。
第二章硬件設(shè)計
2.1單片機的簡介
單片機是續(xù)計算機出現(xiàn)之后,并隨著電器時代大到來,人們借助電氣技術(shù)想實現(xiàn)了自動控
制機械,自動生產(chǎn)線甚至自動工廠,但依靠計算機去完畢每一個自動的過程,反而有些復(fù)雜以
及資源的亂費;所以用更方便,更微小,更智能的微型解決器來解決工業(yè)現(xiàn)場的測控領(lǐng)域,控
制領(lǐng)域,有著重大意義;更何況目前,彩電,冰箱,空調(diào),錄像機,VCD,遙控器,游戲機,電飯煲等
無處不見單片機的影子,所以單片機將會更滿足我們的生活,會更取代大型的計算機。
現(xiàn)在單片機重要按用途,大體上可分為兩大類:1—通用型單片機2-專用型單片機
專用型單片機是指用途比較專一,出廠時程序已經(jīng)一次性固化好,不能再修該的單片機。
例如電子表里的單片機就是其中的一種。其生產(chǎn)成本很低。A通用型單片機的用途很
廣泛,使用不同的接口電路及編制不同的應(yīng)用程序就可完畢不同的功能。小到家用電器儀
器儀表,大到機器設(shè)備和整套生產(chǎn)線都可用單片機來實現(xiàn)自動化控制。
2.2UIN2023
本文選用ULN2023構(gòu)成步進電機的驅(qū)動電路,下面但見介紹下ULN2023的結(jié)構(gòu)和特
占?
八、、?
ULN2023是高耐壓、大電流達林頓陳列,由七個硅NPN達林頓管組成。
該電路的特點如下:
ULN2023的每一對達林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL
和CMOS電路直接相連,可以直接解決原先需要標(biāo)準(zhǔn)邏輯緩沖器來解決的數(shù)據(jù)。
ULN2023工作電壓高,工作電流大,灌電流可達500mA,并且可以在關(guān)態(tài)時承受50V的
電壓,輸出還可以在高負載電流并行運營。
ULN2023方框圖如圖2所示。
9
圖2ULN2023內(nèi)部方框圖
運用ULN2023以及AT89c54RD設(shè)計的步進電機驅(qū)動電路如圖3所示。
2.3ZLG7290
2.3.17290工作原理
ZLG7290的核心是一塊ZLG7290B芯片,它采用12c接口,能直接驅(qū)動8位共陰式數(shù)碼
管,同時可掃描管理多達64只按鍵,實現(xiàn)人機對話的功能資源十分豐富。除具有自動消除抖動
功能外,它還具有段閃爍、段點亮、段熄滅、功能鍵、連擊鍵計數(shù)等強大功能,并可提供10種
數(shù)字和21種字母的譯碼顯示功能,用戶可以直接向顯示緩存寫入顯示數(shù)據(jù),并且無需外接元
件即可直接驅(qū)動數(shù)碼管,還可擴展驅(qū)動電壓和電流。此外,ZLG7290B的電路簡樸,使用也很
方便。用戶按下某個鍵時,ZLG7290的INT引腳會產(chǎn)生一個低電平的中斷請求信號,讀取鍵
值后,中斷信號就會自動撤消。正常情況下,微控制器只需要判斷INT引腳就可以得到鍵盤輸
入的信息。微控制器可通過兩種方式得到用戶的鍵盤輸入信息。其一是中斷方式,該方式的優(yōu)
點是抗干擾能力強,缺陷是要占用微控制器的一個外部中斷源。其二是查詢方式,即通過不斷查
詢INT引腳來判斷是否有鍵按下,該方式可以節(jié)省微控制器的一根1/O口線,但是代價是12C
總線處在頻繁的活動狀態(tài),消耗電流多并且不利于抗干擾。
2.3.27290引腳圖
1323
Dig7SegA
1224
Dig6SegB
211
Dig5SegC
222
Dig4SegD
37
Dig3SegE
48
Dig2SegF
59
DiglSegG
610
DigOSegH
2016
SDAVCC
1918
SCLOSC2
17
吩/INT0SC1
GND/RES
ZLG7290
圖37290引腳圖
第三章相關(guān)圖像
3.1總體電路圖
PQDMMJ
?Q3TA”
*□
,0????
raiM?r
g■
M
la
2c
2a三
39D
?8c
g??
“
3.27290控制數(shù)碼管
3.3程序流程圖
3.3.1控制框圖
3.3.2流程圖
ZLG729O庫函激
第四章調(diào)試
1、按照實驗原理圖連接好電路圖。
2、根據(jù)原理圖編寫程序。
3、電路上電,調(diào)試程序,觀測并控制電機使其按照預(yù)期的行為工作。
4、當(dāng)電機可以通過按鍵控制其正轉(zhuǎn)加減速、反轉(zhuǎn)加減速程序、點動后,調(diào)試結(jié)束。
5、優(yōu)化程序,整理實驗結(jié)果。
總的來說,過程比較順利,只是粗心之下,連線出現(xiàn)了錯誤,對于此,我進行了深刻
的自我檢討和批評。在通過老師的知道后,我們終于實現(xiàn)了實驗規(guī)定的功能,能實現(xiàn)正反轉(zhuǎn),快
慢變化及點動等。
第五章收獲體會
一方面是關(guān)于課題的選擇,開始是準(zhǔn)備做一個萬年歷,通過查看資料后發(fā)現(xiàn)計算機的過
程實現(xiàn)比較的復(fù)雜,而這次的課程設(shè)計時間比較短,故放棄了這個想法。通過各種篩選,最后決
定做步進電機的相關(guān)設(shè)計,起初看著指導(dǎo)書上的內(nèi)容覺得實現(xiàn)步進電機是比較的簡樸的,但當(dāng)
我真正開始設(shè)計之后才發(fā)現(xiàn)并沒有想像中那么的簡樸。
這學(xué)期的微機課和單片機課沒怎么學(xué)好,故感覺在做這個設(shè)計時有點困難,比如匯編程
序。后來決定用c來編寫程序,這樣稍微輕松點,在設(shè)計程序中涉及到了中斷程序的編寫,發(fā)
現(xiàn)已學(xué)的理論知識完全用不上來,也許這就是理論脫離時間的結(jié)果,在期間惡補了單片機的中
斷知識及其相應(yīng)的程序編寫。
通過這次課程設(shè)計實驗,我對步進電機調(diào)速控制系統(tǒng)有了實際的了解和結(jié)識,提高了動手
能力。本次實驗把書本上、課堂上學(xué)到的知識靈活地運用到實際的實物上,感覺是對學(xué)以致用
的一種鍛煉和考驗提高了用所學(xué)知識解決實際問題的能力,加深和鞏固的對知識的理解和掌
握??刂齐娐?、驅(qū)動電路、測速反饋電路、步進電機幾個模塊的整合,也實際中提高了自己對
系統(tǒng)的結(jié)識,有了些整體的概念和思維觀。實驗是團隊合作完畢的,從設(shè)計電路到設(shè)計軟件,
然后仿真到做硬件做出符合規(guī)定的控制系統(tǒng),不僅從實際中鍛煉了動手能力并且學(xué)會了團隊合
作,互相學(xué)習(xí),提高自己。
這次的課程設(shè)計總的感覺就是很累,但在不斷的學(xué)習(xí)機實踐當(dāng)中學(xué)到了很多東西,知識的
提高那是最基礎(chǔ)的,中斷,電路工作及相關(guān)的知識都是得到了提高;然后就是個人解決問題能
力的提高,雖然說這次的設(shè)計不算一個大的項目,但也算是小的雛形,課題的選擇,前期的準(zhǔn)備,
理論的實踐,知識的提高,解決實際問題及后期的總結(jié)歸納。
付出去收獲往往是成正比的,這次的課程設(shè)計中得到了充足的體現(xiàn)。
總的來說,這次設(shè)計的步進電機控制電路還是比較成功的在設(shè)計中碰到了很多問題,
最后在自己的思考下,宿舍大家一起通過劇烈的探討下,終于游逆而解,有點小小的成就感,終
于覺得平時所學(xué)的知識有了實用的價值,達成了理論與實際相結(jié)合的目的。不僅學(xué)到了不少知
識,并且鍛煉了自己的能力,使自己對以后的路有了更加清楚的結(jié)識。同時,對未來有了更多的
信心。最后,對文老師表達忠心的感謝,老師,你辛勞了。
《附錄【一】系統(tǒng)程序
主程序:
/***************************************************************
*********
基于51單片機的異步電機控制程序
**************************************************************
**********/
#include<reg51.h>
#include"VIIC_C51.Hn
#includeHZLG7290,h"
#defineucharunsignedchar
#defineuintunsignedint
/*四相步進電動機單、雙八拍運營狀態(tài)表
111111100?FEHA
111111OOOFCHoAB
111111010。FDHB
111110010F9HoBC
11111011?0FBH?C
11110011?0F3HCD
111101110F7HD
11110110OF6H0DA
*/
sbitPA=P1A0;〃P1控制電機
sbitPB=P1Al;
sbitPC=P「2;
sbitPD=PlA3;
sbitRST=P1A4;
sbitKEY_INT=P3-2;〃看是否更改為P3A2
sbitSCL=P1A6;
sbitSDA=P1A7;
ucharcodestep_tab[9]={0xff,0xfe,0xfc,0xfd,Oxf9,0xfb,0xf3,0xf7,0xf6};
uintcodede1aytime[4]={60,40,20,10};//延時時間列表
〃變量的定義
uchardirection;?〃狀態(tài)變量0-正向」一反向
ucharcontinuous;?〃狀態(tài)變量。。一指定步數(shù)運營,1—連續(xù)速度運營
ucharrun;。//狀態(tài)變量0—電機未運營,1-電機運營中
ucharspeed_num;//連續(xù)速度運營標(biāo)號1—4
ucharcur_step;〃八拍運營狀態(tài)
ucharstep_num;//指定運營的步數(shù),范圍0-99
〃鍵值定義
#defineKey_dir1〃方向鍵
#defineKey_Run2?!▎渔I
#defineKey_stop3。//停止鍵
#defineKet_Step4//單步運營鍵
#defineKey_step_add5〃步數(shù)加鍵
#defineKey_step_sub6“/步數(shù)減鍵
#defineKey_speed_add7。//速度加鍵
#defineKey_speed_sub8〃速度減鍵
#defineKey_Con_Set9?!ㄟB續(xù)運營與指定步數(shù)運營切換鍵。
//定義鍵盤中斷標(biāo)志,FlagINT0=1表達有鍵按下
volatilebitF1agINTO=0;
voidKeyProsess(ucharkey);
/*************************************************************
***********
函數(shù):INT0_SVC()
功能:ZLG7290鍵盤中斷服務(wù)程序
說明:中斷觸發(fā)方式選擇負邊沿觸發(fā),因此不必等待中斷請求信號恢復(fù)為高電平
***************************************************************
voidINT0_SVC()interrupt0
unsignedcharKeyValue;
〃讀取鍵值
KeyValue=ZLG7290_GetKey();
?!ń鉀Q鍵值
?KeyProsess(KeyValue);
}
/**************************************************************
**********
函數(shù):Delay()
功能:定期器實現(xiàn)延時tms
**************************************************************
**********/
voidDelay(unsignedintt)
{
do
{。//TH=64536
?TH1=OxFC;
8TL1=Ox18;
TR1=1;//啟動定期器T1并等待中斷
。whi1e(!TF1);
ooTFl=0;o//中斷請求標(biāo)致清零
。TRI=0;//停止T1定期器
}while(—t);
/***************************************************************
*********
函數(shù):DispDir()
功能:顯示方向子程序
說明:dat0正向,1反向
******************************************************
******************/
voidDispDir(uchardat)
(
if(dat==0)
°{
ZLG7290_SendCmd(0x60+7,0xOf);//"F"表達正轉(zhuǎn)
?e1se
°(
ZLG7290_SendCmd(0x60+7,0x0b);//"B"表達反轉(zhuǎn)
}
I*****************************************************************
*******
函數(shù):DispSpeed()
功能:顯示速度號子程序
說明:dat1~4。代表四種不同的速度
********************************************************************
****/
voidDispSpeed(uchardat)
{
?ZLG7290_SendCmd(0x60+5,dat);
)
/*************************************************************
***********
函數(shù):DispStepNum()
功能:顯示運營步數(shù)號程序
說明:間接實現(xiàn)轉(zhuǎn)過指定角度=步距角*步數(shù)
*************************************************************
***********/
voidDispStepNum(uchardat)
(
unsignedchard;
d=dat/10;
oZLG7290_SendCmd(Ox60+l,d);
。d=dat—d*10;
ZLG7290_SendCmd(0x60+0,d);
)
/***********************************************************
*************
函數(shù):DispContinuous()
功能:顯示運營狀態(tài),連續(xù)還是指定步數(shù)
說明:0一指定步數(shù)運營,1一連續(xù)速度運營
*************************************************************
***********/
voidDispContinuous(uchardat)
(
if(dat==0)
(
ZLG7290_SendCmd(0x60+3,OxOd);〃d表達指定步數(shù)運營狀態(tài)
°)
else
6(
。ZLG7290_SendCmd(0x60+3,0xOc);//'C'表達連續(xù)速度運營
}
)
/*********************************************************************
***
函數(shù):OnStep()
功能:實現(xiàn)單步運營
******************************************************************
******/
voidOneStep()
(
if(direction==0)
{〃正向
8if(cur_step==8)
00{
o。cur_step=1;
}else
6{
ocur_step++;
°}
o?P1=step_tab[cur_step];//輸出
。}
else
e(
?if(cur_step<=1)
6{
?<>cur_step=8;
}else
(
oocur_step-
?P1=step_tab[cur_step];〃輸出
)
)
/***********************************************************
****************
函數(shù):OnContinue()
功能:連續(xù)運營
*************************************************************
**************/
voidOnContinue()
(
if(continuous!=0)
。{//連續(xù)運營
gwhi1e(run!=0)
0(
。?OneStep();
。。Delay(delaytime[speed_num-1]);//延遲目的改變轉(zhuǎn)速
。}
)
eIse
{//指定步數(shù)運營
?if(step_num!=0)
0{
MDneStep();
Delay(50);//50ms延遲
8step—num—;
。DispStepNum(step—num);〃更新顯示步數(shù)即顯示剩下沒有執(zhí)行的步數(shù)
。Mf(run==0)return;〃若停止鍵按下,則停止
)
oeIse
grun=0;//停止
return;
}
}
/*************************************************************
***************
函數(shù):KeyProsess()
功能:鍵值解決程序
********************************************************
voidKeyProsess(ucharkey)
{
switch(key)
(
?caseKey_dir。:。//方向鍵
gif(run==0)
。{
“f(direction==0)
3direction=1;
。else
gdirection=0;
sDispDir(direction);
)
^break;
ocaseKey_Run"http://啟動鍵
f(run==0)
。”un=1;
。}
。break;
ocaseKey_stop:〃停止鍵
if(run!=0)
°{
run=0;
)
。break;
CaseKet_Step://單步運營鍵實現(xiàn)點動功能
“f(run=0)
grim=1;
。OneStep();
。run=0;
0)
break;
caseKey_step_add:〃步數(shù)加鍵。n=(步距角*60)/(360*t*0.001)單位r/min
>if(run==0)
(
=>if(step_num==99)
00
step_num=0;
}eIse
0
88Step_num++;
}
。oDispStepNum(step_num);
°}
obreak;
℃aseKey_step_sub:。//步數(shù)減鍵
。if(run==0)
。{
if(step_num==0)
?step_num=99;
}eIse
°{
g<>step_num—;
6)
sDispStepNum(step_num);
)
?break;
ocaseKey_speed_add:“/速度力口鍵
if(run=0)
if(speed_num4)
8speed_num=1;
8。}e1se
6{
。speed_num++;
000}
oeDispSpeed(speed_num);
00}
break;
。caseKey_speed_sub://速度減鍵
。if(run==0)
00{
if(speed_num==1)
06{
?speed_num=4;
g}else
8{
speed_num—;
)
o“DispSpeed(speed_num);
)
。。break;
℃aseKey_Con_Set。://連續(xù)運營與指定步數(shù)運營切換鍵。
Xf(run==0)
if(continuous==0)
0001
。continuous=1;
}else
0001
8continuous=0;
00}
。。DispContinuous(continuous);
)
break;
。default:
。break;
)
)
/******************************************************************
****************
函數(shù):SystemInit()
功能:系統(tǒng)初始化
**********************************************************
************************/
voidSystemInit()
“//初始化單片機
?TM0D=Oxll;//定期器設(shè)立,T0,T1方式1:16位定期器
?Delay(300);“/延時300ms等待ZLG7290復(fù)位完畢
EA=0;
ITO1;//INTO,負邊沿觸發(fā)中斷
?EXOh//允許外部中斷INTO
FlagINTO=0;
?EA=1;
。//初始化步進電機控制器
direction=0;〃狀態(tài)變量0。-正向,1-反向
continuous=0;〃狀態(tài)變量0■指定步數(shù)運營」一連續(xù)速度運營
”un=1;//,狀態(tài)變量0。-電機未運營,1—電機運營中
ospeed_num=1;<>//連續(xù)速度運營標(biāo)號1-4
cur_step=0;//八拍運營狀態(tài)
?step_num=0;。//。指定運營的步數(shù),范圍0-99
DispContinuous(continuous);
DispStepNum(step_num);
2ispSpeed(speed_num);
DispDir(direction);
P1=step_tab[cur_step];〃輸出
)
/***************************************************************
******************
主函數(shù)main()
**********************************************************
************************/
voidmain(void)
oSystemlnit();//系統(tǒng)初始化
whi1e(l)//循環(huán)檢測按鍵狀態(tài)
°if(run==1)
°{
。OnContinue();
)
。}
)
庫函數(shù)程序:
I************************************************************
********
VIIC_C51.C
此程序是12c操作平臺(主方式的軟件平臺)的底層的C子程序,如發(fā)送數(shù)據(jù)
及接受數(shù)據(jù),應(yīng)答位發(fā)送,并提供了幾個直接面對器件的操作函數(shù),它很方便的
與用戶程序連接并擴展.?…
注意:函數(shù)是采用軟件延時的方法產(chǎn)生SCL脈沖,固對高晶振頻率要作
一定的修改....(本例是lus機器周期,即晶振頻率要小于12MHZ)
********************************************************I
#include<reg52.h>/*頭文獻的包含*/
#include<intrins.h>
#defineucharunsignedchar/*宏定義*/
#defineuintunsignedint
#define_Nop()_nop_()/*定義空指令*/
/*常,變量定義區(qū)*/
/*端口位定義*/
sbitSDA=P1A7;/*模擬12C數(shù)據(jù)傳送位*/
sbitSCL=P1A6;/*模擬12c時鐘控制位*/
/*狀態(tài)標(biāo)志
*/
bitack;/*應(yīng)答標(biāo)志位*/
/************************************************************
*****
起動總線函數(shù)
函數(shù)原型:voidStart_I2c();
功能:啟動12c總線,即發(fā)送12c起始條件.
****************************************************************
****/
voidStart_I2c()
SDA=1;/*發(fā)送起始條件的數(shù)據(jù)信號*/
_Nop();
SCL=1;
_Nop();/*起始條件建立時間大于4.7us,延時*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0;/*發(fā)送起始信號*/
_Nop();/*起始條件鎖定期間大于4us*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;/*鉗住I2c總線,準(zhǔn)備發(fā)送或接受數(shù)據(jù)*/
_Nop();
_Nop();
)
/***************************************************************
****
結(jié)束總線函數(shù)
函數(shù)原型:voidStop」2c();
功能:結(jié)束12c總線,即發(fā)送I2C結(jié)束條件.
********************************************************************/
voidStop_I2c()
(
SDA=0;/*發(fā)送結(jié)束條件的數(shù)據(jù)信號*/
_Nop();/*發(fā)送結(jié)束條件的時鐘信號*/
SCL=1;/*結(jié)束條件建立時間大于4口s*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1;/*發(fā)送12c總線結(jié)束信號*/
_Nop();
_Nop();
_Nop();
_Nop();
****************************************************************
***
字節(jié)數(shù)據(jù)傳送函數(shù)
函數(shù)原型:voidSendByte(ucharc);
功能:將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對
此狀態(tài)位進行操作.(不應(yīng)答或非應(yīng)答都使ack=0假)
發(fā)送數(shù)據(jù)正常,ack=1;ack=0表達被控器無應(yīng)答或損壞。
*********************************************************
***********/
voidSendByte(ucharc)
(
ucharBitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳送的數(shù)據(jù)長度為8位*/
(
if((c?BitCnt)&0x80)SDA=l;/*判斷發(fā)送位*/
elseSDA=0;
_Nop();
SCL=1;/*置時鐘線為高,告知被控器開始接受數(shù)據(jù)位*/
_Nop();
_Nop();/*保證時鐘高電平周期大于4口s*/
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1;/*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接受應(yīng)答位*/
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==l)ack=0;
elseack=1;/*判斷是否接受到應(yīng)答信號*/
SCL=0;
_Nop();
_Nop();
/**************************************************************
*****
字節(jié)數(shù)據(jù)傳送函數(shù)
函數(shù)原型:ucharRcvByte();
功能:用來接受從器件傳來的數(shù)據(jù),并判斷總線錯誤(不發(fā)應(yīng)答信號),
發(fā)完后請用應(yīng)答函數(shù)。
**************************************************************
******I0
ucharRcvByte()
(
ucharretc;
ucharBitCnt;
retc=0;
SDA=1;/*置數(shù)據(jù)線為輸入方式*/
for(BitCnt=0;BitCnt<8;BitCnt++)
(
_Nop();
SCL=0;/*置時鐘線為低,準(zhǔn)備接受數(shù)據(jù)位*/
_Nop();
_Nop();/*時鐘低電平周期大于4.7ns*/
_Nop();
_Nop();
_Nop();
SCL=1;/*置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/
_Nop();
_Nop();
retc=retC<<1;
if(SDA=l)retc=retc+1;/*讀數(shù)據(jù)位,接受的數(shù)據(jù)位放入retc中*/
_Nop();
_Nop();
SCL=O;
_Nop();
_Nop();
return(retc);
/*********************************************************
***********
應(yīng)答子函數(shù)
原型:voidAck_I2c(bita);
功能:主控器進行應(yīng)答信號,(可以是應(yīng)答或非應(yīng)答信號)
***************************************************************
*****/
voidAck_I2c(bita)
(
if(a==0)SDA=0;/*在此發(fā)出應(yīng)答或非應(yīng)答信號*/
e1seSDA=1;
_Nop();
Nop();
_Nop();
SCL=1;
_Nop();
_Nop();/*時鐘低電平周期大于4口s*/
_Nop();
_Nop();
_Nop();
SCL=0;/*清時鐘線,鉗住12c總線以便繼續(xù)接受*/
_Nop();
_Nop();
/****************************************************************
***
向無子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)
函數(shù)原型:bitISendByte(ucharsla,ucahrc);
功能:從啟動總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla.
假如返回1表達操作成功,否則操作有誤。
注意:使用前必須已結(jié)束總線。
********************************************************************
bitISendByte(ucharsia,ucharc)
Start_I2c();/*啟動總線*/
SendByte(sla);/*發(fā)送器件地址*/
if(ack==O)return(0);
SendByte(c);/*發(fā)送數(shù)據(jù)*/
if(ack==0)return(0);
Stop_I2c();/*結(jié)束總線*/
return(l);
I*************************************************************
******
向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)
函數(shù)原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);
功能:從啟動總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件
地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個字節(jié)。
假如返回1表達操作成功,否則操作有誤。
注意:使用前必須已結(jié)束總線。
****************************************************************
****/
bitISendStr(uchars1a,ucharsuba,uchar*s,ucharno)
uchari;
Start_I2c();/*啟動總線列
SendByte(s1a);/*發(fā)送器件地址*/
if(ack==O)return(O);
SendByte(sub
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 崗前安全培訓(xùn)試題(歷年考題)
- 租賃儲備土地合同模板
- 2025年山東省臨沂市臨沭縣第一中學(xué)高三下學(xué)期期中考試試卷語文試題含解析
- 商業(yè)推廣策劃合同模板
- 2023年包裝薄膜項目需求分析報告
- 電子廠試用期合同模板
- 公司開展安全環(huán)?;顒涌偨Y(jié)材料
- 2024年淀粉及淀粉制品項目立項申請報告范稿
- 2024年汽缸套項目提案報告
- 2024年弱粘煤項目提案報告
- 公路工程施工合同示范文本及合同管理ppt課件
- TAPP手術(shù)技巧PPT學(xué)習(xí)教案
- 抹灰工程實測實量記錄表(共3頁)
- kV電力電纜試驗報告
- 海關(guān)報關(guān)員常用英語術(shù)語
- 業(yè)務(wù)人員考核表模板
- NetApp存儲安裝、配置與維護手冊
- 道成肉身歌譜整理word
- 胰島素瘤PPT參考幻燈片
- 有限空間安全作業(yè)票
- 用Phylomatic和PhyloCom進行
評論
0/150
提交評論