MCS-51單片機(jī)接口技術(shù)知識(shí)培訓(xùn)課件_第1頁
MCS-51單片機(jī)接口技術(shù)知識(shí)培訓(xùn)課件_第2頁
MCS-51單片機(jī)接口技術(shù)知識(shí)培訓(xùn)課件_第3頁
MCS-51單片機(jī)接口技術(shù)知識(shí)培訓(xùn)課件_第4頁
MCS-51單片機(jī)接口技術(shù)知識(shí)培訓(xùn)課件_第5頁
已閱讀5頁,還剩152頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第9章MCS-51單片機(jī)接口技術(shù)9.1鍵盤接口9.2顯示器接口9.3A/D轉(zhuǎn)換器接口9.4D/A轉(zhuǎn)換器接口9.5步進(jìn)電機(jī)控制9.1鍵盤接口9.1.1鍵盤概述1、按鍵開關(guān)去抖動(dòng)問題

圖9-1鍵盤抖動(dòng)過程鍵盤的抖動(dòng)時(shí)間一般為5~10ms,抖動(dòng)現(xiàn)象會(huì)引起CPU對(duì)一次鍵操作進(jìn)行多次處理,從而可能產(chǎn)生錯(cuò)誤。消除抖動(dòng)不良后果的方法:⑴硬件去抖動(dòng)圖9-2硬件去抖動(dòng)電路其中RC濾波電路去抖動(dòng)電路簡(jiǎn)單實(shí)用,效果較好。⑵軟件去抖動(dòng)檢測(cè)到按鍵按下后,執(zhí)行延時(shí)10ms子程序后再確認(rèn)該鍵是否確實(shí)按下,消除抖動(dòng)影響。2.按鍵編碼(1)用鍵盤連接的I/O線的二進(jìn)制組合表示鍵碼。(2)順序排列編碼。

首先確定按鍵的行號(hào)m,再確定按鍵的列號(hào)n,則

鍵碼=行號(hào)m×4+列號(hào)n(a)二進(jìn)制組合編碼;(b)順序排列編碼9.1.2獨(dú)立式按鍵獨(dú)立式按鍵特點(diǎn):(1)各按鍵相互獨(dú)立,電路配置靈活(2)軟件結(jié)構(gòu)簡(jiǎn)單(3)按鍵數(shù)量較多時(shí),I/O線耗費(fèi)較多,只適用于按鍵數(shù)量較少的場(chǎng)合。獨(dú)立式按鍵電路如圖9-4所示。圖9-4獨(dú)立式按鍵圖9-4(a)所示的獨(dú)立按鍵掃描程序如下:KEYA:ORLP1,#07H;置P1.0~P1.2為輸入態(tài)MOVA,P1;讀鍵值,鍵閉合相應(yīng)位為0CPLA;取反,鍵閉合相應(yīng)位為1ANLA,#00000111B;屏蔽高5位,保留有鍵值信息的低3位JZGRET;全0,無鍵閉合,返回LCALLDY10ms;非全0,有鍵閉合,延時(shí)10ms,軟件去抖動(dòng)MOVA,P1;重讀鍵值,鍵閉合相應(yīng)位為0CPLA;取反,鍵閉合相應(yīng)位為1ANLA,#00000111B;屏蔽高5位,保留有鍵值信息的低3位JZGRET;全0,無鍵閉合,返回;非全0,確認(rèn)有鍵閉合JBAcc.0,KA0;轉(zhuǎn)0#鍵功能程序JBAcc.1,KA1;轉(zhuǎn)1#鍵功能程序JBAcc.2,KA2;轉(zhuǎn)2#鍵功能程序GRET:RETKA0:LCALLWORK0;執(zhí)行0#鍵功能子程序RETKA1:LCALLWORK1;執(zhí)行1#鍵功能子程序RETKA2:LCALLWORK2;執(zhí)行2#鍵功能子程序RET圖9-4(b)所示的獨(dú)立按鍵掃描程序如下:KEYB:ORLP1,#07H;置P1.0~P1.2為輸入態(tài)MOVA,P1;讀鍵值,鍵閉合相應(yīng)位為1ANLA,#00000111B;屏蔽高5位,保留有鍵值信息的低3位JZGRET;全0,無鍵閉合,返回LCALLDY10ms;非全0,有鍵閉合,延時(shí)10ms,軟件去抖動(dòng)MOVA,P1;重讀鍵值,鍵閉合相應(yīng)位為1ANLA,#00000111B;屏蔽高5位,保留有鍵值信息的低3位JZGRET;全0,無鍵閉合,返回;非全0,確認(rèn)有鍵閉合JBAcc.0,KB0;轉(zhuǎn)0#鍵功能程序JBAcc.1,KB1;轉(zhuǎn)1#鍵功能程序JBAcc.2,KB2;轉(zhuǎn)2#鍵功能程序GRET:RETKB0:LCALLWORK0;執(zhí)行0#鍵功能子程序RETKB1:LCALLWORK1;執(zhí)行1#鍵功能子程序RETKB2:LCALLWORK2;執(zhí)行2#鍵功能子程序RET9.1.3矩陣式鍵盤若需要的按鍵數(shù)目較多,通常采用矩陣式(也稱行列式)鍵盤。I/O端口線分為行線和列線,按鍵跨接在行線和列線的交叉處,按鍵按下時(shí),行線與列線連同,形成回路。其特點(diǎn)是占用I/O線較少,但軟件較復(fù)雜。圖9-5矩陣式鍵盤結(jié)構(gòu)1.查詢方式查詢式確認(rèn)鍵盤中有無鍵按下的基本方法是(以圖9-5為例):P1.4-P1.7輸出0,即所有列線置成低電平,然后將行線電平狀態(tài)讀入累加器A中。如果有鍵按下,總會(huì)有一根行線電平被拉至低電平,從而使行輸入狀態(tài)不全為"1"。確認(rèn)鍵盤中哪一個(gè)鍵按下的方法是:從P1.4開始,依次輸出"0",置對(duì)應(yīng)的列線為低電平,然后讀入行線狀態(tài),如果全為"1",則所按下之鍵不在此列;如果不全為"1",則所按下的鍵必在此列,而且是與0電平行線相交的交點(diǎn)上的那個(gè)鍵。確認(rèn)鍵碼的過程是:先確認(rèn)行號(hào),再確認(rèn)列號(hào)

鍵碼=行號(hào)×4+列號(hào)。參考程序如下:KEY:MOVP1,#0F0H;行線置低電平,列線置輸入態(tài)KEY0:MOVA,P1;讀列線數(shù)據(jù)CPLA;數(shù)據(jù)取反,“1”有效ANLA,#0F0H;屏蔽行線,保留列線數(shù)據(jù)MOVR1,A;存列線數(shù)據(jù)(R1高4位)JZGRET;全0,無鍵按下,返回KEY1:MOVP1,#0FH;行線置輸入態(tài),列線置低電平MOVA,P1;讀行線數(shù)據(jù)CPLA;數(shù)據(jù)取反,“1”有效ANLA,#0FH;屏蔽列線,保留行線數(shù)據(jù)MOVR2,A;存行線數(shù)據(jù)(R2低4位)JZGRET;全0,無鍵按下,返回JBCF0,WAIT;已有消抖標(biāo)志,轉(zhuǎn)SETBF0;無消抖標(biāo)志,置消抖標(biāo)志LCALLDY10ms;調(diào)用10ms延時(shí)子程序消抖SJMPKEY0;重讀行線列線數(shù)據(jù)GRET:RETWAIT:MOVA,P1;等待按鍵釋放

CPLAANLA,#0FHJNZWAIT;按鍵未釋放,繼續(xù)等待KEY2:MOVA,R1;取列線數(shù)據(jù)(高4位)MOVR1,#03H;取列線編號(hào)初值MOVR3,#03H;置循環(huán)數(shù)CLRCKEY3:RLCA;依次左移入C中JCKEY4;C=1,該列有鍵按下,(列線編號(hào)存R1)DECR1;C=0,無鍵按下,修正列編號(hào)DJNZR3,KEY3;判循環(huán)結(jié)束否?未結(jié)束繼續(xù)尋找有鍵按下的列線KEY4:MOVA,R2;取行線數(shù)據(jù)(低4位)MOVR2,#00H;置行線編號(hào)初值MOVR3,#03H;置循環(huán)數(shù)CLRCKEY5:RRCA;依次右移入C中JCKEY6;C=1,該行有鍵按下,(行線編號(hào)存R2)INCR2;C=0,無鍵按下,修正行線編號(hào)DJNZR3,KEY5;判循環(huán)結(jié)束否?未結(jié)束繼續(xù)尋找有鍵按下的行線KEY6:MOVA,R2;取行線編號(hào)CLRCRLCA;行編號(hào)×2RLCA;行編號(hào)×4ADDA,R1;行編號(hào)×4+列編號(hào)=按鍵編號(hào)KEY7:CLRCRLCA;按鍵編號(hào)×2RLCA;按鍵編號(hào)×4(LCALL+RET共4字節(jié))MOVDPTR,#TABJJMP@A+DPTR;散轉(zhuǎn),執(zhí)行相應(yīng)鍵功能子程序TABJ:LCALLWORK0;調(diào)用執(zhí)行0#鍵功能子程序RETLCALLWORK1;調(diào)用執(zhí)行1#鍵功能子程序RET……

LCALLWORK15;調(diào)用執(zhí)行15#鍵功能子程序RET

2.定時(shí)掃描方式圖9-6定時(shí)掃描流程定時(shí)掃描方式就是每隔一段時(shí)間對(duì)鍵盤掃描一次,它利用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生一定時(shí)間(例如10ms)的定時(shí),當(dāng)定時(shí)時(shí)間到就產(chǎn)生定時(shí)器溢出中斷。CPU響應(yīng)中斷后對(duì)鍵盤進(jìn)行掃描。3.中斷方式圖9-7中斷鍵盤接口電路具體工作如下:當(dāng)鍵盤無鍵按下時(shí),與門各輸入端均為高電平,輸出端也為高電平,無中斷請(qǐng)求;當(dāng)有鍵按下時(shí),相應(yīng)行線為低電平,與門輸出端也為低電平,向CPU申請(qǐng)中斷。若CPU開放外部中斷,則會(huì)響應(yīng)中斷請(qǐng)求,轉(zhuǎn)去執(zhí)行鍵盤掃描子程序。參考程序如下:ORG0000H;復(fù)位地址LJMPSTAT;轉(zhuǎn)初始化ORG0003H;中斷入口地址LJMPPINT0;轉(zhuǎn)中斷服務(wù)程序

ORG0100H;初始化程序首地址STAT:MOVSP,#60H;置堆棧指針

SETBIT0;置為邊沿觸發(fā)方式

MOVIP,#00000001B;置為高優(yōu)先級(jí)中斷

MOVP1,#00001111B;置P1.0~P1.3置為輸入態(tài),置P1.4~P1.7輸出0SETBEA;CPU開中

SETBEX0;開中

LJMPSTAT;轉(zhuǎn)主程序,并等待有鍵按下時(shí)中斷ORG0200H;中斷服務(wù)程序首地址PINT0:PUSHAcc;保護(hù)現(xiàn)場(chǎng)

PUSHPSWMOVA,P1;讀行線(P1.0~P1.3)數(shù)據(jù)

CPLA;數(shù)據(jù)取反,“1”有效

ANLA,#0FH;屏蔽列線,保留行線數(shù)據(jù)

MOVR2,A;存行線(P1.0~P1.3)數(shù)據(jù)(R2低4位)MOVP1,#0F0H;行線置低電平,列線置輸入態(tài)

MOVA,P1;讀列線(P1.4~P1.7)數(shù)據(jù)

CPLA;數(shù)據(jù)取反,“1”有效

ANLA,#0F0H;屏蔽行線,保留列線數(shù)據(jù)(A中高4位)MOVR1,#03H;取列線編號(hào)初值

MOVR3,#03H;置循環(huán)數(shù)

CLRCPINT01:RLCA;依次左移入C中JCPINT02;C=1,該列有鍵按下,(列線編號(hào)存R1)DECR1;C=0,無鍵按下,修正列編號(hào)DJNZR3,PINT01;判循環(huán)結(jié)束否?未結(jié)束繼續(xù)尋找有鍵按下列線PINT02:MOVA,R2;取行線數(shù)據(jù)(低4位)MOVR2,#00H;置行線編號(hào)初值MOVR3,#03H;置循環(huán)數(shù)PINT03:RRCA;依次右移入C中JCPINT04;C=1,該行有鍵按下,(行線編號(hào)存R2)INCR2;C=0,無鍵按下,修正行線編號(hào)DJNZR3,PINT03;判循環(huán)結(jié)束否?未結(jié)束繼續(xù)尋找有鍵按下行線PINT04:MOVA,R2;取行線編號(hào)CLRCRLCA;行編號(hào)×2RLCA;行編號(hào)×4ADDA,R1;行編號(hào)×4+列編號(hào)=按鍵編號(hào)MOV30H,A;存按鍵編號(hào)POPPSWPOPAccRETI9.1.4鍵盤控制器MM74C922引腳

圖9-8MM74C922引腳DATAOUTA—DATAOUTB鍵盤輸出,接單片機(jī)輸入口。COLUMNX1—X3鍵盤列線ROWY1—Y4鍵盤行線。Oscillator振蕩引腳,接電容。KeyboardMask按鍵淹沒引腳,功能為硬件消抖動(dòng)。DataAvailable數(shù)據(jù)有效。OutEnable輸出使能。表9-1MM74C922芯片輸出與按鍵關(guān)系按鍵DCBA按鍵DCBA00000810001000191001200101010103001111101140100121100501011311016011014111070111151111圖9-9MM74C922與單片機(jī)連接返回9.2顯示器接口9.2.1LED數(shù)碼管顯示器結(jié)構(gòu)圖9-107段LED數(shù)碼管顯示器段選碼:通常把控制發(fā)光二極管的8位二進(jìn)制數(shù)稱為段選碼(顯示代碼)。各段碼與數(shù)據(jù)位的對(duì)應(yīng)關(guān)系如下:段碼位D7D6

D5D4D3D2D1D0顯示位Dpgfedcba表9-2七段LED的段選碼03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82H

Γ31HCEH707HF8Hy6EH91H87FH80H8FFH00H96FH90H“滅”00HFFHA77H88HB7CH83H共陰極段選碼共陰極段選碼共陽極段選碼共陽極段選碼顯示字符顯示字符9.2.2LED數(shù)碼管顯示器工作原理1、LED靜態(tài)顯示

靜態(tài)顯示是指數(shù)碼管顯示某一字符時(shí),相應(yīng)的發(fā)光二極管恒定導(dǎo)通或恒定截止。各位數(shù)碼管相互獨(dú)立,公共端恒定接地(共陰極)或接正電源(共陽極)。

圖9-11一位靜態(tài)LED顯示圖9-123位靜態(tài)LED顯示DIR1:MOVDPTR,#TABMOVA,30H;讀顯示數(shù)MOVB,#100;置除數(shù)DIVAB;產(chǎn)生百位顯示數(shù)字MOVCA,@A+DPTR;讀百位顯示符MOVDPTR,#0DFFFH;置74377(百位)地址MOVX@DPTR,A;輸出百位顯示符MOVA,B;讀余數(shù)MOVB,#10;置除數(shù)DIVAB;產(chǎn)生十位顯示數(shù)字MOVDPTR,#TAB;置共陽字段碼表首址MOVCA,@A+DPTR;讀十位顯示符MOVDPTR,#0BFFFH;置74377(十位)地址MOVX@DPTR,A;輸出十位顯示符靜態(tài)顯示參考程序如下,設(shè)要顯示的數(shù)據(jù)(≤255)存在30H開始的內(nèi)RAM中。MOVA,B;讀個(gè)位顯示數(shù)字MOVDPTR,#TAB;置共陽字段碼表首址MOVCA,@A+DPTR;讀個(gè)位顯示符MOVDPTR,#7FFFH;置74377(個(gè)位)地址MOVX@DPTR,A;輸出個(gè)位顯示符RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H;共陽字段碼表DB92H,82H,0F8H,80H,90H;靜態(tài)顯示也可以用串行方式實(shí)現(xiàn),如圖9-13所示。圖9-13串行靜態(tài)顯示顯示程序如下,設(shè)顯示字段碼已分別存在32H~30H內(nèi)RAM中。DIR2:MOVSCON,#00H;置串口方式0CLRES;串口禁中SETBP1.0;“與”門開,允許TXD發(fā)移位脈沖MOVSBUF,30H;串行輸出個(gè)位顯示字段碼JNBTI,$;等待串行發(fā)送完畢CLRTI;清串行中斷標(biāo)志MOVSBUF,31H;串行輸出十位顯示字段碼JNBTI,$;等待串行發(fā)送完畢CLRTI;清串行中斷標(biāo)志MOVSBUF,32H;串行輸出百位顯示字段碼JNBTI,$;等待串行發(fā)送完畢CLRTI;清串行中斷標(biāo)志CLRP1.0;“與”門關(guān),禁止TXD發(fā)移位脈沖RET在實(shí)際應(yīng)用中,常常還會(huì)用到BCD顯示。如圖9-14所示。4511為BCD碼LED顯示器譯碼器,其輸入為BCD,輸出為相應(yīng)的段選碼(顯示代碼)。圖9-14靜態(tài)BCD顯示參考程序如下,小數(shù)點(diǎn)固定在第二位,設(shè)顯示數(shù)存在內(nèi)RAM30H~32H中。DIR3:MOVP1,#11100000B;選通個(gè)位ORLP1,30H;輸出個(gè)位顯示數(shù)MOVP1,#11010000B;選通十位ORLP1,31H;輸出十位顯示數(shù)MOVP1,#10110000B;選通百位ORLP1,32H;輸出百位顯示數(shù)RET2、LED動(dòng)態(tài)顯示

動(dòng)態(tài)顯示是一位一位地輪流點(diǎn)亮各位數(shù)碼管,這種逐位點(diǎn)亮顯示器的方式稱為位掃描。各位數(shù)碼管的段選線相應(yīng)并聯(lián)在一起,由一個(gè)8位的I/O口控制;各位的位選線(公共陰極或陽極)由另外的I/O口線控制。

圖9-15LED動(dòng)態(tài)顯示編制循環(huán)掃描10次顯示子程序,已知顯示字段碼存在以30H(低位)為首址的8字節(jié)內(nèi)RAM中。參考程序如下:DIR4:MOVR2,#10;置循環(huán)掃描次數(shù)MOVDPTR,#7FFFH;置74377口地址DLP1:ANLP1,#11111000B;第0位先顯示MOVR0,#30H;置顯示字段碼首址DLP2:MOVA,@R0;讀顯示字段碼MOVX@DPTR,A;輸出顯示字段碼LCALLDY2ms;調(diào)用延時(shí)2ms子程序INCR0;指向下一位字段碼INCP1;選通下一位顯示CJNER0,#38H,DLP2;判8位掃描顯示完否?未完繼續(xù)DJNZR2,DLP1;8位掃描顯示完畢,判10次循環(huán)完否?CLRA;10次循環(huán)完畢,關(guān)顯示MOVX@DPTR,ARET;子程序返回9.2.3液晶(LCD)顯示1.HD44780引腳圖9-16HD44780引腳引腳符號(hào)功能1Vss電源地2Vdd電源:5V3V1-V5驅(qū)動(dòng)電壓:0-5V4RS0選指令寄存器IR,1選數(shù)據(jù)寄存器DR5R/W0寫操作,1讀操作6E下降沿使能有效7-10DB0-DB3數(shù)據(jù)低位,4位傳送時(shí),不用11-14DB4-DB7數(shù)據(jù)高位,4位傳送時(shí),使用2.HD44780內(nèi)部結(jié)構(gòu)圖9-17HD44780內(nèi)部結(jié)構(gòu)IR:指令寄存器,存儲(chǔ)指令DR:數(shù)據(jù)寄存器。DDRAM、CGRAM的數(shù)據(jù)存取都要經(jīng)過DR,當(dāng)CPU讀取DR內(nèi)容后,DR會(huì)自動(dòng)加載下一個(gè)數(shù)據(jù)內(nèi)容。連續(xù)讀數(shù)時(shí),只需指定起始地址。BF:“忙”標(biāo)志,1表示器件正在進(jìn)行內(nèi)部工作,不能讀寫數(shù)據(jù)。AC:AC的內(nèi)容為DDRAM或CGRAM的地址指針。DDRAM:DDRAM的內(nèi)容與顯示屏的物理位置一一對(duì)應(yīng)。給DDRAM某一單元寫入字符編碼時(shí),就在顯示屏對(duì)應(yīng)位置顯示該字符。123…1516171819201000102…0E0F101112132404142…4E4F505151533141516…2223242526274545556…626364656667表9-4DDRAM地址與顯示位置的對(duì)應(yīng)關(guān)系CGROM:如表9-5所示,其內(nèi)容為192個(gè)字符的點(diǎn)陣信息。表9-5CGROM內(nèi)容DDRAM數(shù)據(jù)CGRAM地址CGRAM數(shù)據(jù)765432105432107654321000000000(低3位000表示字符代碼為00H,最高為111表示字符代碼是07H)000000第1行000001000010:000011:000100:000101000110000111第8行000001000000010000000100000001

1100000100000001000001111100000000CGRAM:CGRAM的內(nèi)容為用戶編寫的特殊字符的點(diǎn)陣信息。CGRAM地址與字符圖形的對(duì)應(yīng)關(guān)系如表9-6所示。以“上”字為例。表9-6CGRAM地址與字符圖形的對(duì)應(yīng)關(guān)系從圖中可以看出,DDRAM地址的0-2位等同于CGRAM地址的3-5位,表示字符代碼的0-7。CGRAM地址的0-2位定義字符的行號(hào)?!吧稀弊值腃GRAM數(shù)據(jù)為:04H,04H,04H,07H,04H,04H,1FH對(duì)應(yīng)的CGRAM地址為:00H-07H,字符代碼為0。3.HD44789指令表9-7HD44789指令4.HD44780與單片機(jī)接口

圖9-18HD44789與單片機(jī)的連接5.ASCII字符顯示應(yīng)用舉例編寫程序,在HD44780上第一行顯示“LCDtestingprog”,2秒后在第二行顯示“TA-ANEEDepart.”再經(jīng)2秒后,在第一行顯示“TAIPEI,TAIWAN”,2秒后在第二行顯示。(a)主程序流程(b)子程序流程參考程序如下:ENEQUP3.0RWEQUP3.1RSEQUP3.2LCDEQUP1ORG0300HINITIALIZE:MOVA,#00111000B;設(shè)定為8位,2行,5×7字型CALLWRINSTMOVA,#00001000B;關(guān)閉顯示器CALLWRINSTMOVA,#00000001B;清除顯示器CALLWRINSTMOVA,#00001111B;開顯示、游標(biāo)、閃爍CALLWRINSTMOVA,#00000110B;設(shè)定AC+1CALLWRINSTLOOP:MOVA,#10000000B;設(shè)定第一行起始地址CALLWRINSTMOVDPTR,#LINE1;指向第一行顯示數(shù)據(jù)MOVR0,#16;一行16個(gè)字符CALLWRSTRING;顯示第一行CALLDELAY2;延時(shí)2秒MOVA,#11000000B;設(shè)定第二行起始地址CALLWRINSTMOVDPTR,#LINE2;指向第二行顯示數(shù)據(jù)MOVR0,#16;一行顯示16個(gè)字符CALLWRSTRING;顯示第二行CALLDELAY2;延時(shí)2秒MOVA,#10000000B;設(shè)定第一行起始地址CALLWRINST MOVDPTR,#LINE3;指向第一行顯示數(shù)據(jù) MOVR0,#16;一行顯示16個(gè)字符CALLWRSTRING;顯示第一行CALLDELAY2;延時(shí)2秒MOVA,#11000000B;設(shè)定第二行起始地址CALLWRINSTMOVDPTR,#LINE4;指向第二行顯示數(shù)據(jù)MOVR0,#16;一行顯示16個(gè)字符CALLWRSTRING;顯示第二行CALLDELAY2;延時(shí)2秒JMPLOOP;循環(huán)顯示W(wǎng)RINST:CALLCHECKBF;檢查"忙"標(biāo)志CLRRS;RS=0,RW=0為指令寫入操作CLRRWSETBENMOVLCD,A;傳送指令CLREN;下降沿寫入RETCHECKBF:PUSHACCBUSY:CLRRS;RS=0,RW=1為讀取BF操作CLRRWSETBENMOVA,LCDCLRENJBACC.7,BUSYCALLDELAYPOPACCRETWRSTRING:MOVR1,#0;寫入數(shù)據(jù),R1為計(jì)數(shù)器NEXT:MOVA,R1MOVCA,@A+DPTR;查表讀取數(shù)據(jù)

CALLWRDATAINCR1DJNZR0,NEXTRETWRDATA:CALLCHECKBFSETBRS;RS=0,RW=1為數(shù)據(jù)寫入操作CLRRWSETBENMOVLCD,ACLRENRETDELAY:MOVR6,#15;"忙"標(biāo)志檢查延時(shí)D1:MOVR7,#200DJNZR7,$DJNZR6,D1RETDELAY2:MOVR5,#20;2秒延時(shí)D3:MOVR6,#200D2:MOVR7,#250DJNZR7,$DJNZR6,D2DJNZR5,D3RETLINE1:DB'LCDtestingprog'LINE2:DB'TA-ANEEDepart.'LINE3:DB'TAIPEI,TAIWAN'LINE4:DB'‘END6.自建字符顯示舉例在HD44789上顯示自建字符“上”,方法如下:(1)將自建字符“上”轉(zhuǎn)換成5×7點(diǎn)陣代碼,如表9-6所示。(2)初始化。和顯示ASCII字符一樣。(3)設(shè)置CGRAM地址(000-111),將自建字符點(diǎn)陣代碼寫入指定的CGRAM單元。(4)設(shè)置DDRAM地址,決定自建字符顯示位置,并將自建字符點(diǎn)陣代碼在CGRAM中的地址號(hào)(000-111)寫入DDRAM指定單元。參考程序如下:ENEQUP3.0RWEQUP3.1RSEQUP3.2LCDEQUP1ZIFUEQU38H;自建字符點(diǎn)陣代碼的CGRAM地址ORG0300HINITIALIZE:MOVA,#00111000B;設(shè)定為8位,2行,5×7字型CALLWRINSTMOVA,#00001000B;關(guān)閉顯示器CALLWRINSTMOVA,#00000001B;清除顯示器CALLWRINSTMOVA,#00001111B;開顯示、游標(biāo)、閃爍CALLWRINSTMOVA,#00000110B;設(shè)定AC+1CALLWRINSTMOVZIFU,#0;從0號(hào)地址開始WRCG:MOVA,#01000000B;指定CGRAM起始地址0CALLWRINSTMOVR2,#8;8個(gè)字節(jié)MOVR0,#0MOVDPTR,#CHAR;自建字符點(diǎn)陣代碼首地址NEXTC:MOVA,R0MOVCA,@A+DPTR;取自建字符代碼CALLWRDATA;寫入CGRAMINCR0DJNZR2,NEXTCWRZIFU:MOVA,#10000000B;設(shè)定DDRAM第一行起始地址CALLWRINSTMOVA,ZIFU;取自建字符的CGRAM地址CALLWRDATA;寫入DDRAMSJMP$WRINST:CALLCHECKBF;檢查"忙"標(biāo)志CLRRS;RS=0,RW=0為指令寫入操作CLRRWSETBENMOVLCD,A;傳送指令CLREN;下降沿寫入RETCHECKBF:PUSHACCBUSY:CLRRS;RS=0,RW=1為讀取BF操作CLRRWSETBENMOVA,LCDCLRENJBACC.7,BUSYCALLDELAYPOPACCRETWRDATA:CALLCHECKBFSETBRS;RS=0,RW=1為數(shù)據(jù)寫入操作CLRRWSETBENMOVLCD,ACLRENRETDELAY:MOVR6,#15;"忙"標(biāo)志檢查延時(shí)D1:MOVR7,#200DJNZR7,$DJNZR6,D1RETCHAR:DB04H,04H,04H,07H,04H,04H,1FH,00HEND返回9.3A/D轉(zhuǎn)換器接口被測(cè)控的對(duì)象單片微機(jī)應(yīng)用系統(tǒng)傳感器采樣保持A/D開關(guān)控制部件模擬執(zhí)行部件D/A非電信號(hào)模擬電信號(hào)圖9-20單片機(jī)應(yīng)用系統(tǒng)結(jié)構(gòu)

模/數(shù)轉(zhuǎn)換(A/D):由模擬量變?yōu)閿?shù)字量的轉(zhuǎn)換。數(shù)/模轉(zhuǎn)換(D/A):由數(shù)字量轉(zhuǎn)為模擬量的轉(zhuǎn)換。9.3.1概述A/D轉(zhuǎn)換器的主要性能指標(biāo):1.分辯率。2.量程。3.精度。4.轉(zhuǎn)換時(shí)間。5.輸出邏輯電平。6.工作溫度范圍。7.對(duì)參考電壓的要求。9.3.2A/D轉(zhuǎn)換應(yīng)用1.ADC0809芯片簡(jiǎn)介圖9-21ADC0809芯片的內(nèi)部邏輯結(jié)構(gòu)與引腳圖

ADC0809的引腳功能⑴IN0~I(xiàn)N7:8路模擬信號(hào)輸入端。⑵C、B、A:8路模擬信號(hào)轉(zhuǎn)換選擇端。與低8位地址中A0~A2連接。由A0~A2地址000~111選擇IN0~I(xiàn)N7八路A/D通道。⑶CLK:外部時(shí)鐘輸入端。時(shí)鐘頻率高,A/D轉(zhuǎn)換速度快。允許范圍為10~1280KHz。通常由80C51ALE端直接或分頻后與0809CLK端相連接。⑷D0~D7:數(shù)字量輸出端。⑸OE:A/D轉(zhuǎn)換結(jié)果輸出允許控制端。OE=1,允許將A/D轉(zhuǎn)換結(jié)果從D0~D7端輸出。通常由80C51的端與0809片選端(例如P2.0)通過或非門與0809OE端相連接。⑹ALE:地址鎖存允許信號(hào)輸入端。0809ALE信號(hào)有效時(shí)將當(dāng)前轉(zhuǎn)換的通道地址鎖存。⑺START:?jiǎn)?dòng)A/D轉(zhuǎn)換信號(hào)輸入端。當(dāng)START端輸入一個(gè)正脈沖時(shí),立即啟動(dòng)0809進(jìn)行A/D轉(zhuǎn)換。START端與ALE端連在一起,由80C51WR與0809片選端(例如P2.0)通過或非門相連。⑻EOC:A/D轉(zhuǎn)換結(jié)束信號(hào)輸出端,高電平有效。⑼UREF(+)、UREF(-):正負(fù)基準(zhǔn)電壓輸入端。⑽Vcc:正電源電壓(+5V)。GND:接地端。表9-8ADC0809通道地址選擇表CBA選通的通道000 IN0001IN1010 IN2011 IN3100 IN4101 IN5110 IN6111 IN72.ADC0809與單片機(jī)接口圖9-22ADC0809與8051接口3、A/D轉(zhuǎn)換應(yīng)用舉例設(shè)圖9-22接口電路用于一個(gè)8路模擬量輸入的巡回檢測(cè)系統(tǒng),使用中斷方式采樣數(shù)據(jù),把采樣轉(zhuǎn)換所得的數(shù)字量按序存于片內(nèi)RAM的30H~37H單元中。采樣完一遍后停止采集。

初始化程序:MOVR0,#30H;設(shè)立數(shù)據(jù)存儲(chǔ)區(qū)指針MOVR2,#08H;設(shè)置8路采樣計(jì)數(shù)值SETBIT0;設(shè)置外部中斷0為邊沿觸發(fā)方式SETBEA;CPU開放中斷SETBEX0;允許外部中斷0中斷MOVDPTR,#0FEF8H;送入口地址并指向IN0LOOP:MOVX@DPTR,A;啟動(dòng)A/D轉(zhuǎn)換,A的值無意義HERE:SJMPHERE;等待中斷中斷服務(wù)程序:MOVXA,@DPTR;讀取轉(zhuǎn)換后的數(shù)字量MOV@R0,A;存入片內(nèi)RAM單元INCDPTR;指向下一模擬通道INCR0;指向下一個(gè)數(shù)據(jù)存儲(chǔ)單元DJNZR2,INT;8路未轉(zhuǎn)換完,則繼續(xù)CLREA;已轉(zhuǎn)換完,則關(guān)中斷CLREX0;禁止外部中斷0中斷RETI;中斷返回INT:MOVX@DPTR,A;再次啟動(dòng)A/D轉(zhuǎn)換RETI;中斷返回用查詢方式實(shí)現(xiàn)轉(zhuǎn)換,參考程序如下:ORG0000H;主程序入口地址LJMPMAIN;跳轉(zhuǎn)主程序

ORG1000HMAIN:MOVR0,#30HMOVR2,#08HMOVDPTR,#0FEF8HMOVA,#00HL0:MOVX@DPTR,AL1:JBP3.3,L1;查詢/INT1是否為0MOVXA,@DPTR;/INT1為0,則轉(zhuǎn)換結(jié)束,讀出數(shù)據(jù)MOV@R0,AINCR0INCDPTRDJNZR2,L0SJMP$返回9.4D/A轉(zhuǎn)換器接口9.4.1概述D/A轉(zhuǎn)換器的主要性能指標(biāo):(1)分辨率

(2)建立時(shí)間

(3)輸入編碼形式

(4)轉(zhuǎn)換線性(5)輸出電平

9.4.2D/A轉(zhuǎn)換應(yīng)用1、DAC0832的引腳及功能圖9-23DAC0832引腳DI0~DI7:8位數(shù)據(jù)輸入端。ILE:輸入數(shù)據(jù)允許鎖存信號(hào),高電平有效。/CS:片選端,低電平有效。/WR1:輸入寄存器寫選通信號(hào),低電平有效。/WR2:DAC寄存器寫選通信號(hào),低電平有效。/XFER:數(shù)據(jù)傳送信號(hào),低電平有效。IOUT1、IOUT2:電流輸出端。RFB:反饋電流輸入端。UREF:基準(zhǔn)電壓輸入端。Vcc:正電源端。AGND:模擬地。DGND:數(shù)字地。2.DAC0832邏輯結(jié)構(gòu)圖9-24DAC0832內(nèi)部結(jié)構(gòu)3、DAC0832工作方式用軟件指令控制這5個(gè)控制端:ILE、/CS、/WR1、/WR2、/XFER,可實(shí)現(xiàn)三種工作方式:直通工作方式:5個(gè)控制端均有效,直接D/A轉(zhuǎn)換;單緩沖工作方式:5個(gè)控制端一次選通,即兩個(gè)輸入寄存器中任意一個(gè)處于直通方式,另一個(gè)工作于受控方式。雙緩沖工作方式:5個(gè)控制端分二次選通。即兩個(gè)鎖存器都處于受控狀態(tài)。4、DAC0832單緩沖方式圖9-25DAC0832單緩沖方式圖9-26用DAC產(chǎn)生鋸齒波

假定輸入寄存器地址為7FFFH,產(chǎn)生鋸齒波的源程序清單如下:ORG0200HDASAW:MOVDPTR,#7FFFH;輸入寄存器地址,假定P2.7接MOVA,#00H;轉(zhuǎn)換初值WW:MOVX@DPTR,A;D/A轉(zhuǎn)換INCA;A中的植加1NOP;延時(shí)NOPNOPAJMPWW;循環(huán)矩形波參考程序:BEGIN:MOVDPTR,#7FFFHLP:MOVA,#DATAH;矩形波上限MOVX@DPTR,ALCALLDELAYH;高電平延時(shí)時(shí)間MOVA,#DATAL;矩形波下限MOVX@DPTR,ALCALLDELAYL;低電平延時(shí)時(shí)間SJMPLP對(duì)鋸齒波的產(chǎn)生作如下幾點(diǎn)說明:(1)程序每循環(huán)一次,A加1,因此實(shí)際上鋸齒波的上升沿是由256個(gè)小階梯構(gòu)成的,但由于階梯很小,所以從宏觀上看就是線性增長(zhǎng)的鋸齒波。(2)可通過循環(huán)程序段的機(jī)器周期數(shù)計(jì)算出鋸齒波的周期,并可根據(jù)需要,通過延時(shí)的辦法來改變波形周期。當(dāng)延遲時(shí)間較短時(shí),可用NOP指令來實(shí)現(xiàn);當(dāng)需要延遲時(shí)間較長(zhǎng)時(shí),可以使用一個(gè)延時(shí)子程序。延遲時(shí)間不同,波形周期不同,鋸齒波的斜率就不同。(3)通過A加1,可得到正向的鋸齒波;如要得到負(fù)向的鋸齒波,改為減1指令即可實(shí)現(xiàn)。(4)程序中A的變化范圍是0~255,因此得到的鋸齒波是滿幅度的。如要求得到非滿幅鋸齒波,可通過計(jì)算求得數(shù)字量的初值和終值,然后在程序中通過置初值判終值的辦法即可實(shí)現(xiàn)。5.DAC0832雙緩沖方式圖9-27DAC0832雙緩沖方式如果將DAC0832⑴和⑵的輸出端接運(yùn)放后,分別接圖形顯示器X軸和Y軸偏轉(zhuǎn)放大器輸入端,實(shí)現(xiàn)同步輸出,則可更新圖形顯示器的光點(diǎn)位置。設(shè)已知X軸信號(hào)和Y軸信號(hào)已分別存于30H、31H中。參考程序如下:DOUT:MOVDPTR,#0DFFFH;置DAC0832(1)輸入寄存器地址MOVA,30H;取X軸信號(hào)MOVX@DPTR,A;X軸信號(hào)→0832(1)輸入寄存器MOVDPTR,#0BFFFH;置DAC0832(2)輸入寄存器地址MOVA,31H;取Y軸信號(hào)MOVX@DPTR,A;Y軸信號(hào)→0832(2)輸入寄存器MOVDPTR,#7FFFH;置0832(1)、(2)DAC寄存器地址MOVX@DPTR,A;同步D/A,輸出X、Y軸信號(hào)RET產(chǎn)生階梯波的程序如下,階梯波如圖9-28所示。START:MOVA,#00HMOVDPTR,#1FFFH;0832的地址送DPTRMOVR1,#0AH;臺(tái)階數(shù)為10LP:MOVX@DPTR,A;送數(shù)據(jù)至0832CALLDELAY;1ms延時(shí)DJNZR1,NEXT;不到10臺(tái)階轉(zhuǎn)移SJMPSTART;產(chǎn)生下一個(gè)周期NEXT:ADDA,#10;臺(tái)階增幅SJMPLP;產(chǎn)生下一臺(tái)階DELAY:MOV20H,#249;1ms延時(shí)程序AGAIN:NOPNOPDJNZ20H,AGAIN圖9-28DAC0832雙緩沖方式產(chǎn)生階梯波返回9.5步進(jìn)電機(jī)控制

步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)換成機(jī)械角位移或線位移的電磁機(jī)械裝置。由于它所使用的電源是脈沖電源,所以也稱為脈沖馬達(dá)。每當(dāng)輸入一個(gè)電脈沖,電動(dòng)機(jī)就轉(zhuǎn)動(dòng)一定角度前進(jìn)一步。脈沖一個(gè)一個(gè)地輸入,電動(dòng)機(jī)便一步一步地轉(zhuǎn)動(dòng)。轉(zhuǎn)動(dòng)的角度大小與施加的脈沖數(shù)目成正比,轉(zhuǎn)動(dòng)的速度與脈沖頻率成正比,轉(zhuǎn)動(dòng)方向與脈沖的順序有關(guān)。步進(jìn)電機(jī)主要由轉(zhuǎn)子和定子兩部分組成。轉(zhuǎn)子和定子均由帶齒的硅鋼片疊成。定子上有分為若干相的繞組。當(dāng)某相定子繞組通以直流電壓激磁后,便會(huì)吸引轉(zhuǎn)子,令轉(zhuǎn)子轉(zhuǎn)動(dòng)一定的角度。向定子繞組輪流激磁,轉(zhuǎn)子便連續(xù)旋轉(zhuǎn)。

圖9-29步進(jìn)電機(jī)組成9.5.1步進(jìn)電機(jī)工作原理

步進(jìn)電機(jī)轉(zhuǎn)子上均勻分布著很多小齒,相鄰兩轉(zhuǎn)子齒軸線間的距離為齒距,以て表示。定子齒有三個(gè)勵(lì)磁繞阻,其幾何軸線依次分別與轉(zhuǎn)子齒軸線錯(cuò)開0て、1/3て、2/3て,即A與齒1相對(duì)齊,B與齒2向右錯(cuò)開1/3て,C與齒3向右錯(cuò)開2/3て,A‘與齒5相對(duì)齊,(A’就是A,齒5就是齒1)。圖9-303相步進(jìn)電機(jī)原理如A相通電,B,C相不通電時(shí),由于磁場(chǎng)作用,齒1與A對(duì)齊,(轉(zhuǎn)子不受任何力,以下均同)。如B相通電,A,C相不通電時(shí),齒2應(yīng)與B對(duì)齊,此時(shí)轉(zhuǎn)子向右轉(zhuǎn)動(dòng)1/3て,此時(shí)齒3與C偏移為1/3て,齒4與A偏移(て-1/3て)=2/3て。如C相通電,A,B相不通電,齒3應(yīng)與C對(duì)齊,此時(shí)轉(zhuǎn)子又向右轉(zhuǎn)動(dòng)1/3て,此時(shí)齒4與A偏移為1/3て。如A相通電,B,C相不通電,齒4與A對(duì)齊,轉(zhuǎn)子又向右轉(zhuǎn)動(dòng)1/3て。經(jīng)過A、B、C、A分別通電狀態(tài),齒4(即齒1前一齒)移到A相,電機(jī)轉(zhuǎn)子向右轉(zhuǎn)過一個(gè)齒距,如果不斷地按A,B,C,A……通電,電機(jī)就每步(每脈沖)1/3て,向右旋轉(zhuǎn)。如按A,C,B,A……通電,電機(jī)就反轉(zhuǎn)。由此可見,電機(jī)的位置和速度由導(dǎo)電次數(shù)(脈沖數(shù))和頻率成決定。而轉(zhuǎn)動(dòng)方向由導(dǎo)電順序決定。

電機(jī)一旦通電,在定轉(zhuǎn)子間將產(chǎn)生磁場(chǎng)(磁通量Ф)當(dāng)轉(zhuǎn)子與定子錯(cuò)開一定角度時(shí),便會(huì)產(chǎn)生電磁力F。F與(dФ/dθ)成正比,與L×D×N×I×N/R成正比。其中,Ф=Br*S為磁通量,Br為磁通密度,S為導(dǎo)磁面積,L為鐵芯有效長(zhǎng)度,D為轉(zhuǎn)子直徑,I×N為勵(lì)磁繞阻安匝數(shù)(即電流乘匝數(shù)),R為磁阻。由物理學(xué)知識(shí)可知,力矩=力*半徑??梢?,力矩與電機(jī)有效體積*安匝數(shù)*磁通密度成正比。因此,電機(jī)有效體積越大,勵(lì)磁安匝數(shù)越大,定轉(zhuǎn)子間氣隙越小,電機(jī)力矩就越大,反之亦然。9.5.2步進(jìn)電機(jī)與單片機(jī)接口從單片機(jī)輸出脈沖信號(hào)控制步進(jìn)電機(jī)工作,一般要經(jīng)過二個(gè)過程,一是環(huán)行分配器,它的作用是給步進(jìn)電機(jī)輸出所需的相信號(hào);二是驅(qū)動(dòng)電路,它的作用是放大電流信號(hào),達(dá)到步進(jìn)電機(jī)所需的功率要求。1相驅(qū)動(dòng)1相驅(qū)動(dòng)方式是只有一組線圈被激磁,其它線圈休息。正轉(zhuǎn)激勵(lì)信號(hào)為:1000→0100→0010→0001→1000;反轉(zhuǎn)激勵(lì)信號(hào)為:1000→0001→0010→0100→1000。在8051單片機(jī)上產(chǎn)生這個(gè)序列信號(hào),可先輸出“11H”(00010001),經(jīng)過一段延時(shí),讓步進(jìn)電機(jī)建立磁場(chǎng)及實(shí)現(xiàn)轉(zhuǎn)動(dòng)后,用“RLA”指令將“11H”左移成“22H”、“44H”、“88H”,或用“RRA”指令右移形成“88H”、“44H”、“22H”“11H”輸出即可。用“11H”而不是“01H”作為起始激勵(lì)信號(hào)是為了簡(jiǎn)化控制,目的是在每次移位時(shí)不必判斷是否已經(jīng)超出范圍。

2相驅(qū)動(dòng)2相驅(qū)動(dòng)時(shí),正轉(zhuǎn)激勵(lì)信號(hào)為:1100→0110→0011→1001→1100;反轉(zhuǎn)激勵(lì)信號(hào)為:1100→1001→0011→0110→1100。在8051單片機(jī)上產(chǎn)生這個(gè)序列信號(hào),可先輸出“33H”(00110011),經(jīng)過一段延時(shí)后,用“RLA”或“RRA”指令將“33H”左移或右移成輸出即可。

步進(jìn)電機(jī)的定位由于步進(jìn)電機(jī)在加電啟動(dòng)時(shí),定子與轉(zhuǎn)子的位置是隨機(jī)的,不一定符合圖9-30的要求。因此,使用之前,應(yīng)該先定位。否則,可能會(huì)出現(xiàn)非預(yù)期的狀況。最簡(jiǎn)單的定位方法是,先送出一組驅(qū)動(dòng)信號(hào),讓步進(jìn)電機(jī)工作一個(gè)循環(huán)。如對(duì)1相驅(qū)動(dòng),則依次送出“11H”、“22H”、“44H”、“88H”4個(gè)驅(qū)動(dòng)信號(hào),步進(jìn)電機(jī)即可抓住正確的位置,此即定位或歸零。9.5.3步進(jìn)電機(jī)應(yīng)用舉例圖9-31單片機(jī)控制步進(jìn)電機(jī)典型電路例:?jiǎn)纹瑱C(jī)89C51通過UNL2003控制步進(jìn)電機(jī)先定位,然后以左移方式控制正轉(zhuǎn)200步,以右移方式控制反轉(zhuǎn)200步,延時(shí)程序決定旋轉(zhuǎn)的速度。圖9-32單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)程序框圖參考程序如下:;延時(shí)DELAY子程序(0.05秒R5);P1輸出;#11H為1相驅(qū)動(dòng),#33H為2相驅(qū)動(dòng);速度為1/(0.05TIMES)步/秒STEPSEQU200;步數(shù)設(shè)定TIMESEQU10;時(shí)間延遲重復(fù)次數(shù)PHASEEQU11H;驅(qū)動(dòng)方式OUTEQUP1;輸出口;-------------------------------------------ORG0000HLCALLPOSITION;調(diào)用定位子程序START:MOVA,#PHASE;指定驅(qū)動(dòng)信號(hào);--------------正轉(zhuǎn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論