版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)原理及應(yīng)用 (C語(yǔ)言版)第9章 單片機(jī)系統(tǒng)配置及接口,主 編:周?chē)?guó)運(yùn)本章制作:魯慶賓中國(guó)水利水電出版社,第9章 單片機(jī)系統(tǒng)配置及接口,目 錄9.1 鍵盤(pán)接口9.2 LED顯示接口9.3 A/D轉(zhuǎn)換接口9.4 D/A轉(zhuǎn)換接口9.5 開(kāi)關(guān)器件接口,本章要點(diǎn)單片機(jī)主要應(yīng)用于測(cè)控系統(tǒng)中,應(yīng)用系統(tǒng)通常需要人的干預(yù)。本章主要講述鍵盤(pán)、顯示器、A/D轉(zhuǎn)換器、D
2、/A轉(zhuǎn)換器、開(kāi)關(guān)器件等的工作原理及接口電路。,,第9章 單片機(jī)系統(tǒng)配置及接口,圖9-1 單片機(jī)應(yīng)用系統(tǒng)配置框圖,9.1 鍵盤(pán)接口,主要內(nèi)容9.1.1 鍵盤(pán)基本問(wèn)題9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序9.1.3 中斷掃描方式,,1、鍵的識(shí)別 當(dāng)按鍵K未被按下時(shí),P1.0輸入為高電平;當(dāng)K閉合時(shí),P1.0輸入為低電平。,9.1.1 鍵盤(pán)基本問(wèn)題,圖9-2 按鍵電路,,2、鍵的抖動(dòng) 由于機(jī)械觸點(diǎn)的彈性作
3、用,按鍵在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng),如圖9-3所示 。抖動(dòng)時(shí)間一般為5~10ms。抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為確保CPU對(duì)鍵的一次閉合僅做一次處理,必須去除鍵抖動(dòng)。,9.1.1 鍵盤(pán)基本問(wèn)題,9.1.1 鍵盤(pán)基本問(wèn)題,圖9-3 按鍵時(shí)的抖動(dòng),9.1.1 鍵盤(pán)基本問(wèn)題,一.獨(dú)立式鍵盤(pán)獨(dú)立式按鍵是指各按鍵相互獨(dú)立地接通一條輸入數(shù)據(jù)線。當(dāng)任何一個(gè)鍵按下時(shí),
4、與之相連的輸入數(shù)據(jù)線即可讀入數(shù)據(jù)0,而沒(méi)有按下時(shí)讀入1。,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,,優(yōu)點(diǎn):電路簡(jiǎn)單;缺點(diǎn):鍵數(shù)較多時(shí),要占用較多的I/O線。,圖9-4 獨(dú)立式鍵盤(pán),例9-1 設(shè)計(jì)一個(gè)獨(dú)立式按鍵的鍵盤(pán)接口,并編寫(xiě)鍵掃描程序,電路原理圖如圖9-4所示,鍵號(hào)從上到下分別為0~7。C語(yǔ)言程序清單:#includevoid key(){unsigned char k;P1=0xff;//輸入時(shí)P1口置全1k
5、=P1;//讀取按鍵狀態(tài)if(k==0xff) //無(wú)鍵按下,返回return;delay20ms();//有鍵按下,延時(shí)去抖,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,k=P1;if(k==0xff) //確認(rèn)鍵按下return; //抖動(dòng)引起,返回while(P1!=0xff); //等待鍵釋放switch(k){
6、case:0xfe… //0號(hào)鍵按下時(shí)執(zhí)行程序段break;case:0xfd… //1號(hào)鍵按下時(shí)執(zhí)行程序段break;,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,… //2~6號(hào)鍵程序省略case:0x7f… //7號(hào)鍵按下時(shí)執(zhí)行程序段break;}}匯編語(yǔ)言程序清單:KEY:MOVP1,#0FFH
7、 ;P1口為輸入口MOVA,P1 ;讀取按鍵狀態(tài)CPLA ;取正邏輯JZEKEY ;無(wú)鍵按下,返回,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,LCALL DELAY20MS ;有鍵按下,去抖 MOV A,P1 CPL A JZ EKEY ;抖動(dòng)引起,返回 MOV B,A
8、 ;存鍵值KEY1:MOV A,P1 ;以下等待鍵釋放 CPL A JNZ KEY1 ;未釋放,等待 MOV A,B ;取鍵值送A JB ACC.0,PKEY0 ;K0按下轉(zhuǎn)PKEY0 JB ACC.1,PKEY1 ;K1按下轉(zhuǎn)PKEY1 …,9
9、.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,JBACC.7,PKEY7 ;K7按下轉(zhuǎn)PKEY7EKEY: RETPKEY1:LCALLK0 ;K0命令處理程序 RETPKEY2:LCALLK1 ;K1命令處理程序 RET …PKEY4:LCALLK7 ;K7命令處理程序 RET,9.1.2 鍵盤(pán)結(jié)
10、構(gòu)及處理程序,,二.行列式鍵盤(pán) 為了減少鍵盤(pán)與單片機(jī)接口時(shí)所占用I/O線的數(shù)目,在鍵數(shù)較多時(shí),通常都將鍵盤(pán)排列成行列矩陣形式。每一水平線(行線)與垂直線(列線)的交叉處通過(guò)一個(gè)按鍵來(lái)連通。,圖9-5 4×4矩陣鍵盤(pán)接口,利用這種結(jié)構(gòu)只需N條行線和M條列線,即可組成具有N×M個(gè)按鍵的鍵盤(pán)。,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,,圖9|54×4矩陣鍵盤(pán)接口,9.1.2
11、鍵盤(pán)結(jié)構(gòu)及處理程序,1.行掃描法工作原理 判別鍵盤(pán)中有無(wú)鍵按下。向行線輸出全0,讀入列線狀態(tài)。如果有鍵按下,總有一列線被拉至低電平,從而使列輸入不全為1。 查找按下鍵所在位置。依次給行線送低電平,查列線狀態(tài)。全為1,則所按下的鍵不在此行;否則所按下的鍵必在此行且是在與零電平列線相交的交點(diǎn)上的那個(gè)鍵。 對(duì)按鍵位置進(jìn)行編碼。找到所按下按鍵的行列位置后,對(duì)按鍵進(jìn)行編碼,即求得按鍵鍵值。,9.1.2 鍵盤(pán)結(jié)構(gòu)及處
12、理程序,2.鍵盤(pán)掃描識(shí)別子程序C語(yǔ)言程序清單:#includechar key() {char row,col, k =-1; //定義行、列、返回值P1=0xf0;if((P1&0xf0)==0xf0)return k; //無(wú)鍵按下,返回delay20ms(); //延時(shí)去抖if((P1&0xf0)==0xf0)return k; //抖
13、動(dòng)引起,返回,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,for(row=0;row<4;row++)//行掃描{ P1=~(1<<row); //掃描值送P1 k=P1&0xf0; if(k!=0xf0) //列線不全為1, { while(k&(1<<(col+4)))//所按鍵在該列
14、 col++; //查找為0列號(hào) k=row*4+col;//計(jì)算鍵值 P1=0xf0; while((P1&0xf0)!=0xf0); //等待鍵釋放 break;} }return k;//返回鍵值},9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,匯編語(yǔ)言程序清單(返回鍵值:在累加器A中):KEY:LCAL
15、L KS ;判斷是否有鍵按下JZ EKEY ;無(wú)鍵按下,返回LCALL DELAY20MS ;延時(shí)去抖LCALL KSJZ EKEY ;抖動(dòng)引起,返回SKEY:MOV R0,#0 ; 行掃描計(jì)數(shù)器R0 清0MOV R1,#0 ; 列計(jì)數(shù)器R1 清0MOV R3,#0FEH ;R3為行掃描字暫存
16、SKEY1:MOV P1,R3 ;輸出行掃描字,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,MOVA,P1 ;讀列值MOVR1,A ;暫存列值CPLAANLA,#0F0HJNZSKEY2 ;鍵在該列,轉(zhuǎn)SKEY2INCR0 ;行計(jì)數(shù)器加1SETBCMOVA,R3RLCAMOVR3,A ;進(jìn)行下
17、一行掃描CJNER0,#4,SKEY1 ;4未完成, 轉(zhuǎn)SKEY1 EKEY:MOVA,#0FFH;無(wú)鍵返回0FFH RET,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,SKEY2:MOVA,R1JNBACC.4,SKEY3JNBACC.5,SKEY4JNBACC.6,SKEY5JNBACC.7,SKEY6SKEY3:MOVR2,#0;存0列號(hào)S
18、JMPDKEYSKEY4:MOVR2,#1;存1列號(hào)SJMPDKEYSKEY5:MOVR2,#2;存2列號(hào)SJMPDKEY,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,SKEY6:MOVR2,#3 ;存3列號(hào) SJMPDKEYDKEY: MOVA,R0 ; 行號(hào)送A MOVB,#4 MULAB ADDA,R2
19、 ;行號(hào)×4+列號(hào)=鍵值 PUSHACCLK: LCALLKS ;等待鍵釋放 JNZLK POPACC RET,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,;是否有鍵按下子程序,有返回非0,無(wú)返回0KS:MOVP1,#0F0HMOVA,P1CPLAANLA,#0F0HRET,9.1.2
20、 鍵盤(pán)結(jié)構(gòu)及處理程序,3.行列反轉(zhuǎn)法工作原理 判別鍵盤(pán)中有無(wú)鍵按下。(方法同行掃描法) 輸入變輸出,再讀。將上一步讀取到的列線輸入值從列線輸出,讀取行線值。 定位求鍵值。根據(jù)上一步輸出的列線值和讀取到的行線值就可以確定所按下鍵所在的位置,從而查表確定鍵值。,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,4.行列反轉(zhuǎn)法識(shí)別子程序C語(yǔ)言程序代碼:#includechar key(){char code keycode
21、[]= {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77} //鍵盤(pán)表,定義16個(gè)按鍵的行列組合值,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,char row,col,k=-1,i;//定義行、列、返回值、循環(huán)控制變量P1=0xf0;if((P1&0xf0)==0xf
22、0)return k; //無(wú)鍵按下,返回-1delay20ms(); //延時(shí)去抖if((P1&0xf0)==0xf0)return k; //抖動(dòng)引起,返回-1P1=0xf0;col=P1&0xf0; //行輸出全0,讀取列值P1=col|0x0f;row=P1&0x0f; //列值輸出,讀取行值,9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序
23、,//查找行列組合值在鍵盤(pán)表中位置for(i=0;i<16;i++)if((row|col)==keycode[i]) //找到,i即為鍵值, { //否則,返回-1 key=i; //對(duì)重復(fù)鍵,該方法break; //處理為無(wú)鍵按下}P1=0xf0;while((P1&0xf0)!=0xf0); //等待鍵釋
24、放return k; //返回鍵值},9.1.2 鍵盤(pán)結(jié)構(gòu)及處理程序,9.1.3 中斷掃描方式,為了提高CPU的效率,可以采用中斷掃描工作方式,即只有在鍵盤(pán)有鍵按下時(shí)才產(chǎn)生中斷申請(qǐng),CPU響應(yīng)中斷,進(jìn)入中斷服務(wù)程序進(jìn)行鍵盤(pán)掃描,并做相應(yīng)處理。也可以采用定時(shí)掃描方式,即系統(tǒng)每隔一定時(shí)間進(jìn)行鍵盤(pán)掃描,并做相應(yīng)處理。,,9.1.3 中斷掃描方式,,圖9-6 中斷方式鍵盤(pán)接口,9.2 LED顯示接口,主要內(nèi)容
25、9.2.1 LED顯示器結(jié)構(gòu)原理9.2.2 LED顯示器接口及顯示方式9.2.3 LED顯示器與89C52接口及顯示子程序,,9.2.1 LED顯示器結(jié)構(gòu)原理,單片機(jī)中通常使用7段LED構(gòu)成字型為“8”且加一個(gè)小數(shù)點(diǎn)的數(shù)碼管,以顯示數(shù)字、符號(hào)及小數(shù),常見(jiàn)數(shù)碼管如下圖。,顯示器有共陰極和共陽(yáng)極兩種。發(fā)光二極管的陽(yáng)極連在一起的稱(chēng)為共陽(yáng)極顯示器,陰極連在一起的稱(chēng)為共陰極顯示器。一位顯示器由8個(gè)發(fā)光二極管組成,其中,7個(gè)發(fā)
26、光二極管構(gòu)成字型“8”的各個(gè)筆劃,另一個(gè)為小數(shù)點(diǎn)。當(dāng)在某段發(fā)光二極管上施加一定的正向電壓時(shí),該段筆劃即亮;不加電壓則暗。,9.2.1 LED顯示器結(jié)構(gòu)原理,,,,以共陰極顯示器為例,當(dāng)a、b、c三段送1時(shí),數(shù)碼管顯示數(shù)字7。,(c)引腳配置外形圖,(b)共陽(yáng)極,(a)共陰極,9.2.1 LED顯示器結(jié)構(gòu)原理,表9-1 共陰極和共陽(yáng)極7段LED顯示字型編碼表,以上為8段,8段最高位為小數(shù)點(diǎn)段。表中為小數(shù)點(diǎn)不點(diǎn)亮段碼。,9.2.
27、1 LED顯示器結(jié)構(gòu)原理,9.2.2 LED顯示器接口及顯示方式,LED有靜態(tài)顯示和動(dòng)態(tài)顯示兩種方式。1.LED靜態(tài)顯示方式靜態(tài)顯示就是當(dāng)顯示器顯示某個(gè)字符時(shí),相應(yīng)的段(發(fā)光二極管)恒定地導(dǎo)通或截止,直到顯示另一個(gè)字符為止。共陰極(公共端K0)接地;共陽(yáng)極(公共端K0)接+5V電源。每位的段選線(a~dp)分別與一個(gè)8位鎖存器的輸出口相連,顯示器中的各位相互獨(dú)立。,優(yōu)點(diǎn):亮度較高、編程容易、管理簡(jiǎn)單;
28、缺點(diǎn):但占用I/O口線資源較多。2.LED動(dòng)態(tài)顯示方式在多位LED顯示時(shí),為了簡(jiǎn)化電路,降低成本,將所有位的段選線并聯(lián)在一起,由一個(gè)8位I/O口控制。而共陰(或共陽(yáng))極公共端K分別由相應(yīng)的I/O線控制,實(shí)現(xiàn)各位的分時(shí)選通。圖9-8為6位共陰極LED動(dòng)態(tài)顯示接口電路。,9.2.2 LED顯示器接口及顯示方式,圖9-8 6位LED動(dòng)態(tài)顯示接口電路,9.2.2 LED顯示器接口及顯示方式,各位掃描顯示:由于6位LED所有段
29、選線皆由P1口控制,要想每位顯示不同的字符,就必須采用掃描方法輪流點(diǎn)亮各位LED,在每一瞬間只使某一位顯示字符。段選碼、位選碼控制:P1口輸出相應(yīng)字符段選碼,P2口在該顯示位送入選通電平,保證該位顯示相應(yīng)字符,如此輪流。掃描延時(shí):段選碼、位選碼每送入一次后延時(shí)1ms,保證每位有一定亮度,因人眼的視覺(jué)暫留效果,看上去每個(gè)數(shù)碼管總在亮。,9.2.2 LED顯示器接口及顯示方式,9.2.3 顯示器與89C52接口及顯示子程序,
30、下頁(yè)圖為89C52 P1口和P2口控制的6位共陰極LED動(dòng)態(tài)顯示接口電路。P1口輸出段選碼,P2口輸出位選碼,位選碼占用輸出口的線數(shù)決定于顯示器位數(shù)。74LS245是雙向8位緩沖器,在此分別作為段選和位選驅(qū)動(dòng)器。逐位輪流點(diǎn)亮各個(gè)LED,每一位保持1ms,在10~20ms之內(nèi)再一次點(diǎn)亮,重復(fù)不止。這樣,利用人的視覺(jué)暫留,好像6位LED同時(shí)點(diǎn)亮一樣。,圖9|9 數(shù)碼管動(dòng)態(tài)顯示接口,,9.2.3 顯示器與89C52接口及顯
31、示子程序,C語(yǔ)言程序清單:#includeunsigned char code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char buf[6];//定義字型碼和顯示緩沖區(qū)void disp(){unsigned char i;for(i=0;i>i);//位碼送P2口delay1ms();//延時(shí)1
32、ms}},9.2.3 顯示器與89C52接口及顯示子程序,匯編語(yǔ)言程序清單:DISP: MOV R0,#DISPBUF ; R0指向顯示緩沖區(qū) MOV R2,#0DFH ;位碼送R2 MOV R3,#6 ;6位顯示 MOV DPTR,#TAB ;DPTR指向段碼表LOOP:MOV P2,R2 ;位碼送P2口 M
33、OV A,@R0 ;取顯示數(shù)據(jù) MOVC A,@A+DPTR ;取出字型碼 MOV P1,A ;送出顯示 LCALL DELAY1MS ;延時(shí)1ms INC R0 ;數(shù)據(jù)緩沖區(qū)地址加1 MOV A,R2 RR A ;位碼右移一位 MOV R2,A,9.2.3 顯示器
34、與89C52接口及顯示子程序,DJNZ R3,LOOP ;掃描到最左邊顯示位?RETTAB:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FH,9.2.3 顯示器與89C52接口及顯示子程序,9.3 A/D轉(zhuǎn)換接口,主要內(nèi)容9.3.1 多通道串行輸出A/D芯片TLC2543及接口9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口9.3.3 單片機(jī)
35、內(nèi)部集成的A/D轉(zhuǎn)換器,模/數(shù)(A/D)轉(zhuǎn)換的方式:有很多種,例如,計(jì)數(shù)比較型、逐次逼近型、雙積分型等。選擇A/D轉(zhuǎn)換器件主要是從速度、精度和價(jià)格上考慮。A/D轉(zhuǎn)換器的輸出方式:有串行、并行方式,并且有些增強(qiáng)型的單片機(jī)在片內(nèi)也集成有A/D轉(zhuǎn)換器。,9.3 A/D轉(zhuǎn)換接口,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,,,TLC2543是TI公司生產(chǎn)的串行A/D轉(zhuǎn)換器,它具有輸入通道多、精度高、速度高、使用靈活和體積
36、小的優(yōu)點(diǎn)。TLC2543為CMOS 型12位開(kāi)關(guān)電容逐次逼近A/D轉(zhuǎn)換器。片內(nèi)含有一個(gè)14通道多路器,可從11個(gè)模擬輸入或3個(gè)內(nèi)部自測(cè)電壓中選擇一個(gè)。,TLC2543與微處理器的接線用SPI接口只有4根連線,其外圍電路也大大減少。TLC2543的特性如下:12位A/D轉(zhuǎn)換器(可8位、12位和16位輸出)。在工作溫度范圍內(nèi)轉(zhuǎn)換時(shí)間為l0μs。11通道輸入。3種內(nèi)建的自檢模式。片內(nèi)采樣/保持電路。最大±1/4 09
37、6的線性誤差。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,內(nèi)置系統(tǒng)時(shí)鐘。轉(zhuǎn)換結(jié)束標(biāo)志位。單/雙極性輸出。輸入/輸出的順序可編程(高位或低位在前)??芍С周浖P(guān)機(jī)。輸出數(shù)據(jù)長(zhǎng)度可編程。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,1.TLC2543的片內(nèi)結(jié)構(gòu)及引腳功能TLC2543片內(nèi)由通道選擇器、數(shù)據(jù)(地址和命令字)輸入寄存器、采樣/保持電路、12位的模/數(shù)轉(zhuǎn)換器、輸出寄存器、并行到串行
38、轉(zhuǎn)換器以及控制邏輯電路7個(gè)部分組成。TLC2543片內(nèi)結(jié)構(gòu)如圖9-11所示。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,圖9-11 TLC2543片內(nèi)結(jié)構(gòu)框圖,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,TLC2543的引腳意義如下:AIN0~AIN10 模擬輸入通道。CS片選端。DIN 串行數(shù)據(jù)輸入。DOUT轉(zhuǎn)換結(jié)束數(shù)據(jù)輸出。EOC轉(zhuǎn)換結(jié)束信號(hào)。GND地。SCLK(I/O CLO
39、CK)輸入/輸出同步時(shí)鐘。REF+、 REF- 轉(zhuǎn)換參考電壓。VCC 設(shè)備的電源。,,,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,2.TLC2543的命令字TLC2543的每次轉(zhuǎn)換都必須給其寫(xiě)入命令字,以便確定下一次轉(zhuǎn)換用哪個(gè)通道,下次轉(zhuǎn)換結(jié)果用多少位輸出,轉(zhuǎn)換結(jié)果輸出是低位在前還是高位在前。命令字的輸入采用高位在前。命令字如下:,輸入到輸入寄存器中的8位編程數(shù)據(jù)選擇器件輸入通道和輸出數(shù)據(jù)的長(zhǎng)度及格式。其選擇
40、格式如下表。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,表9-2 輸入寄存器命令字格式,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,注:X表示無(wú)關(guān)項(xiàng)。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,3.TLC2543與89C52的SPI接口及程序,圖9-12 TLC2543和89C52的接口電路,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,TLC2543提供SPI接口。
41、對(duì)于89C52,須用軟件合成SPI操作來(lái)和TLC2543接口。TLC2543的I/O CLOCK、DIN和兩端由單片機(jī)的P1.0、P1.1和P1.3提供。TLC2543轉(zhuǎn)換結(jié)果的輸出(DOUT)數(shù)據(jù)由P1.2接收。89C52將用戶(hù)的命令字通過(guò)P1.1輸入到TLC2543的輸入寄存器中,等待20μs開(kāi)始讀數(shù)據(jù),同時(shí)寫(xiě)入下一次的命令字。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,TLC2543與89C52的8位數(shù)據(jù)傳
42、送程序TLC2543與89C52進(jìn)行1次8位數(shù)據(jù)傳送,選用AIN0(即采集1次),高位在前。C語(yǔ)言程序清單:#include#includesbit CS=P1^3;sbit CLK=P1^0;sbit DIN=P1^1;sbit DOUT=P1^2;//定義函數(shù),輸入?yún)?shù)為命令字,輸出轉(zhuǎn)換結(jié)果,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,unsigned char TLC2543(unsig
43、ned char command){unsigned char i,result=0;CS=0;//片選有效for(i=0;i>i);//命令字按位送出result<<=1;result|=DOUT;//按位接收轉(zhuǎn)換結(jié)果CLK=1;//產(chǎn)生一個(gè)時(shí)鐘_nop_();//高電平有一定寬度CLK=0;}return result;//返回轉(zhuǎn)換
44、結(jié)果},9.3.1 多通道串行輸出A/D芯片TLC2543及接口,匯編語(yǔ)言程序清單:TLC2543:MOVR4,#04H;控制字,AIN0,8位MOVA,R4CLRP1.3;片選有效,選中2543MSB:MOVR5,#08H;傳送8位LOOP:MOVP1,#04H;P1.2為輸入MOVC,P1.2;讀結(jié)果到C中RLCA;帶進(jìn)位循環(huán)左移MOVP1.1
45、,C;將控制字(ACC中)的一位經(jīng)DIN送入,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,SETB P1.0;產(chǎn)生一個(gè)時(shí)鐘NOPCLR P1.0DJNZ R5,LOOPMOV R2,A;將轉(zhuǎn)換的數(shù)據(jù)存入R2RET執(zhí)行上述子程序,經(jīng)8次循環(huán),執(zhí)行“RLC A”指令8次,最后命令字00000100經(jīng)P1.1、DIN進(jìn)入TLC2543的輸入寄存器,8
46、位A/D轉(zhuǎn)換數(shù)據(jù)××××.××××讀入累加器。,9.3.1 多通道串行輸出A/D芯片TLC2543及接口,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,1.ADC0809的片內(nèi)結(jié)構(gòu)及引腳功能ADC0809是CMOS工藝,采用逐次逼近法的8位A/D轉(zhuǎn)換芯片。多路開(kāi)關(guān)有8路模擬量輸入端,最多允許8路模擬量分時(shí)輸入,共用一個(gè)A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換
47、。圖9-13為ADC0809的內(nèi)部邏輯結(jié)構(gòu)圖。它由8路模擬開(kāi)關(guān)、8位A/D轉(zhuǎn)換器、三態(tài)輸出鎖存器以及地址鎖存譯碼器等組成。,圖9-13 ADC0809內(nèi)部邏輯結(jié)構(gòu)結(jié)構(gòu),9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,引腳功能說(shuō)明如下:IN0~I(xiàn)N7:8個(gè)通道的模擬輸入端。D0~D7:8位數(shù)字量輸出端。START:?jiǎn)?dòng)信號(hào)。ALE:地址鎖存信號(hào)。EOC:轉(zhuǎn)換結(jié)束信號(hào)。OE:輸出允許控制端。CLOCK:時(shí)鐘信號(hào)。VRE
48、F+和VREF-:A/D轉(zhuǎn)換器的參考電壓。VCC 電源電壓。,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,8位模擬開(kāi)關(guān)地址輸入通道的關(guān)系見(jiàn)表9-3。模擬開(kāi)關(guān)的作用和8選1的CD4051作用相同。,表9-3 8位模擬開(kāi)關(guān)功能表,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,2.ADC0809與89C52接口ADC0809芯片的轉(zhuǎn)換速度在最高時(shí)鐘頻率下為100μs左右。ADC0809與89C52連接可采用查詢(xún)方式,也
49、可采用中斷方式。圖9-14為中斷方式連接電路圖。由于ADC0809片內(nèi)有三態(tài)輸出鎖存器,因此可直接與89C52接口。,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,圖9-14 ADC0809與89C52的連接,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,這里將ADC0809作為外部擴(kuò)展并行I/O口,采用線選法尋址。ADC0809的ADDA、ADDB和ADDC端由P0.0、P0.1、P0.2送出,ADC0809的地址由P2
50、.7控制,其他地址位與此無(wú)關(guān),設(shè)為1,于是ADC0809地址為為7FFFH。在圖9-14所示的接口電路中,ADC0809與片外RAM統(tǒng)一編址。,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,啟動(dòng)ADC0809的工作過(guò)程是:先送數(shù)據(jù)(通道地址)到ADC0809,由ALE信號(hào)鎖存,同時(shí)START有效,啟動(dòng)A/D轉(zhuǎn)換。A/D轉(zhuǎn)換完畢,EOC端發(fā)出一正脈沖,申請(qǐng)中斷。在中斷服務(wù)程序中,使OE端有效,8位數(shù)據(jù)便讀入到CPU中。,9.3
51、.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,3.8路巡回檢測(cè)系統(tǒng)例9-2 某糧庫(kù)或某冷凍廠需對(duì)8點(diǎn)(8個(gè)冷凍室或8個(gè)糧倉(cāng))進(jìn)行溫度巡回檢測(cè)。要求設(shè)計(jì)一個(gè)單片機(jī)巡回檢測(cè)系統(tǒng),使其能對(duì)各冷凍室或各糧倉(cāng)的溫度巡回檢測(cè)并加以處理。設(shè)被測(cè)溫度范圍為-30~+50℃,溫度檢測(cè)精度要求不大于±l℃。溫度傳感器可選用熱電阻、熱敏電阻、PN結(jié)或集成溫度傳感器AD590和SL134等芯片。,9.3.2 逐次逼近型并行輸出A
52、/D轉(zhuǎn)換器及接口,C語(yǔ)言程序清單:#include#include//絕對(duì)地址定位#define DAC0809 XBYTE[0x7fff]//定義C0809地址unsigned char xdata buffer[8];//數(shù)據(jù)存放定義unsigned char i=0;void main(){IT1=1;//邊沿觸發(fā)EA=1;EX1=1;DAC0809=i;//啟動(dòng)0通道轉(zhuǎn)換
53、while(1);},9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,void int1_srv() interrupt 2{buffer[i]=DAC0809; //讀數(shù)存放if(++i!=8) //最后一個(gè)通道沒(méi)結(jié)束DAC0809=i; //啟動(dòng)下一個(gè)通道轉(zhuǎn)換},9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,匯編語(yǔ)言主程序:MAIN:
54、MOV R0,#0A0H ;數(shù)據(jù)暫存區(qū)首地址 MOVR2,#8 ;8路計(jì)數(shù)初值 MOVR3,#0 ;R3存放通道號(hào) SETBIT1 ;邊沿觸發(fā) SETBEA ;開(kāi)中斷 SETBEX1 MOV DPTR,#7FFFH;指向0809
55、 MOV A,R3 MOVX @DPTR,A ;送通道號(hào),啟動(dòng)轉(zhuǎn)換 SJMP $,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,中斷服務(wù)程序:MOVX A,@DPTR ;讀數(shù)MOVX @R0,A ;存數(shù)INC R0 ;更新存放單元INC R3
56、 ;更新通道DJNZ R2,DONERETIDONE:MOV A,R3MOVX @DPTR,ARETI,9.3.2 逐次逼近型并行輸出A/D轉(zhuǎn)換器及接口,9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,目前,很多單片機(jī)片內(nèi)集成有A/D轉(zhuǎn)換器,下面以STC89LE516AD/X2為例,說(shuō)明A/D轉(zhuǎn)換的使用方法。1.STC89LE516AD/X2片內(nèi)A/D轉(zhuǎn)換器特點(diǎn)STC89LE516AD/X
57、2的模擬量輸入在P1口,有8位精度的高速A/D轉(zhuǎn)換器,P1.0-P1.7共8路,為電壓輸入型,可做按鍵掃描、電池電壓檢測(cè)、頻譜檢測(cè)等。,2.特殊功能寄存器(1)P1_ADC_EN特殊功能寄存器。P1.x作為A/D轉(zhuǎn)換輸入通道允許特殊功能寄存器,地址為97H,復(fù)位值為00000000B。格式如圖9-15所示。,圖9-15 P1_ADC_EN 特殊功能寄存器,9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,(2)ADC_DATA 特殊功能
58、寄存器。A/D轉(zhuǎn)換結(jié)果特殊功能寄存器,地址為0C6H,復(fù)位值為00000000B,模擬/數(shù)字轉(zhuǎn)換結(jié)果計(jì)算公式如下:結(jié)果=256 * Vin /VCC。(3)ADC_CONTR 特殊功能寄存器。A/D轉(zhuǎn)換控制特殊功能寄存器,地址為0C5H,復(fù)位值為xxx00000B。格式如圖9-16所示。,圖9-16 ADC_CONTR 特殊功能寄存器,9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,相關(guān)位說(shuō)明如下:1)ADC_FLAG:模擬/數(shù)
59、字轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1。2)ADC_START:模擬/數(shù)字轉(zhuǎn)換(ADC)啟動(dòng)控制位,設(shè)置為“1”時(shí),開(kāi)始轉(zhuǎn)換。3)CHS2/CHS1/CHS0:模擬輸入通道選擇,如表9-4所示。,9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,表9-4 模擬輸入通道選擇,9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,3.A/D轉(zhuǎn)換程序用P1.0為模擬量輸入端進(jìn)行A/D轉(zhuǎn)換,程序如下:#include
60、sfr P1_ADC_EN=0x97;//A/D轉(zhuǎn)換功能允許寄存器sfr ADC_CONTR=0xC5;//A/D轉(zhuǎn)換控制寄存器sfr ADC_DATA=0xC6;//A/D轉(zhuǎn)換結(jié)果寄存器,9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,//延時(shí)函數(shù)voiddelay(unsigned chardelay_time){unsigned inti;while(d
61、elay_time--)for(i=0;i<10000;i++);},9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,unsignedcharADC() //AD轉(zhuǎn)換函數(shù){delay(1); //使輸入電壓達(dá)到穩(wěn)定ADC_CONTR=0x08; //P1.0為模擬量輸入端,啟動(dòng)A/D轉(zhuǎn)換while((ADC_CONTR&0
62、x10)==0); //等待轉(zhuǎn)換結(jié)束return ADC_DATA; //返回轉(zhuǎn)換結(jié)果},9.3.3 單片機(jī)內(nèi)部集成的A/D轉(zhuǎn)換器,9.4 D/A轉(zhuǎn)換接口,主要內(nèi)容9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù)9.4.2 串行輸入D/A轉(zhuǎn)換器TLC5615接口技術(shù),9.4.1 并行D/A轉(zhuǎn)
63、換器DAC0832接口技術(shù),1.DAC0832的結(jié)構(gòu)原理(1)DAC0832的特性。具有兩級(jí)輸入數(shù)據(jù)寄存器的8位單片D/A轉(zhuǎn)換器,它能直接與單片機(jī)89C52相連接,采用二次緩沖方式,可以在輸出的同時(shí),采集下一個(gè)數(shù)據(jù),從而提高轉(zhuǎn)換速度,能夠在多個(gè)轉(zhuǎn)換器同時(shí)工作時(shí),實(shí)現(xiàn)多通道D/A的同步轉(zhuǎn)換輸出。,主要的特性參數(shù)如下:分辨率為8位。只需在滿(mǎn)量程下調(diào)整其線性度??膳c所有的單片機(jī)或微處理器直接接口。電流穩(wěn)定時(shí)間為1μs。可雙緩沖
64、、單緩沖或直通數(shù)據(jù)輸入。功耗低,約為200mW。邏輯電平輸入與TTL兼容。單電源供電(+5V~+15V)。,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),(2)DAC0832的引腳及邏輯結(jié)構(gòu)。DAC0832的邏輯結(jié)構(gòu)如下圖所示,由8位鎖存器、8位DAC 寄存器和8位D/A轉(zhuǎn)換器構(gòu)成。,圖9-17 DAC0832結(jié)構(gòu),9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),DAC0832各引腳的功能說(shuō)明如下:D0
65、~D7:數(shù)字量數(shù)據(jù)輸入線。ILE:數(shù)據(jù)鎖存允許信號(hào),高電平有效。CS:輸入寄存器選擇信號(hào),低電平有效。WR1:輸入寄存器的“寫(xiě)”選通信號(hào),低電平有效。WR2:DAC寄存器的“寫(xiě)”選通信號(hào),低電平有效。XFER:數(shù)據(jù)傳送信號(hào),低電平有效。VREF:基準(zhǔn)電壓輸入線。,,,,,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),RFB:反饋信號(hào)輸入線,片內(nèi)已有反饋電阻。IOUT1和IOUT2:電流輸出線。IOUT1與IOU
66、T2的和為常數(shù),DAC寄存器的內(nèi)容線性變化。一般在單極性輸出時(shí),IOUT2接地。VCC:工作電源。DGND:數(shù)字地。AGND:模擬信號(hào)地。,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),2.DAC0832與單片機(jī)的接口(1)單緩沖器方式接口。,圖9-18 DAC0832單緩沖方式接口,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),將ILE接+5V,寄存器選擇信號(hào)及數(shù)據(jù)傳送信號(hào)都與地址選擇線相連(圖中
67、為P2.7),兩級(jí)寄存器的寫(xiě)信號(hào)都由89C52的WR端控制。當(dāng)?shù)刂肪€選通DAC0832后,只要輸出控制信號(hào),DAC0832就能一步完成數(shù)字量的輸入鎖存和D/A轉(zhuǎn)換輸出。,,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),C語(yǔ)言程序清單:/*------------頭文件聲明及端口地址定義------------*/#include #define DAC0832 XBYTE[0x7FFF]/*--在需要輸出時(shí), da
68、ta1為輸出模擬量的數(shù)字值--*/DAC0832=data1;匯編語(yǔ)言程序清單:MOV DPTR,#7FFFHMOV A,#DATA1MOVX @DPTR,A,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),(2)雙緩沖器同步方式接口。圖9-19是一個(gè)二路同步輸出的D/A轉(zhuǎn)換接口電路。89C52的P2.5和P2.6分別選擇兩路D/A轉(zhuǎn)換器的輸入寄存器,控制輸入鎖存;P2.7連到兩路D/A轉(zhuǎn)換器
69、的XFER端控制同步轉(zhuǎn)換輸出;WR與所有的WR1、WR2端相連,在執(zhí)行MOVX指令時(shí),89C52自動(dòng)輸出WR信號(hào)。,,,,,,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),圖9-19 DAC0832雙緩沖方式接口,9.4.1 8位并行D/A轉(zhuǎn)換器DAC0832接口技術(shù),C語(yǔ)言程序清單:#include/* 定義兩片0832輸入寄存器端口地址和 // 同步輸出地址
70、 */#define DAC0832_1XBYTE[0xDFFF]#define DAC0832_2XBYTE[0xBFFF]#define DAC_ALLXBYTE[0x7FFF]/* 在需要模擬量同步輸出時(shí) */DAC0832_1=data1; //第一片0832輸出數(shù)字值DAC08
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)原理及應(yīng)用(c語(yǔ)言版)第2章
- 單片機(jī)原理及應(yīng)用(c語(yǔ)言版)(周?chē)?guó)運(yùn))習(xí)題答案
- 51單片機(jī)(呼吸燈)c語(yǔ)言版
- 單片機(jī)原理及應(yīng)用c語(yǔ)言版6mcs-51單片機(jī)定時(shí)器計(jì)數(shù)器
- (c語(yǔ)言版)單片機(jī)復(fù)習(xí)題資料
- 單片機(jī)原理、接口及應(yīng)用
- 單片機(jī)原理與接口應(yīng)用
- 單片機(jī)應(yīng)用技術(shù)c語(yǔ)言版第3版王靜霞習(xí)題答案
- 系統(tǒng)配置中
- 系統(tǒng)配置清單
- 系統(tǒng)配置如下
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
- 系統(tǒng)配置簡(jiǎn)圖.dwg
評(píng)論
0/150
提交評(píng)論