單片機(jī)與嵌入式系統(tǒng)(111X)-06典型單片機(jī)系統(tǒng)AVRIO系統(tǒng)及其應(yīng)用_第1頁
單片機(jī)與嵌入式系統(tǒng)(111X)-06典型單片機(jī)系統(tǒng)AVRIO系統(tǒng)及其應(yīng)用_第2頁
單片機(jī)與嵌入式系統(tǒng)(111X)-06典型單片機(jī)系統(tǒng)AVRIO系統(tǒng)及其應(yīng)用_第3頁
單片機(jī)與嵌入式系統(tǒng)(111X)-06典型單片機(jī)系統(tǒng)AVRIO系統(tǒng)及其應(yīng)用_第4頁
單片機(jī)與嵌入式系統(tǒng)(111X)-06典型單片機(jī)系統(tǒng)AVRIO系統(tǒng)及其應(yīng)用_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六講AVR單片機(jī)

IO系統(tǒng)及其應(yīng)用主講教師:董秀則dongxz@(主樓610;5097單片機(jī)與嵌入式系統(tǒng)本講主要內(nèi)容及重點(diǎn)通用IO接口的基本結(jié)構(gòu)與特性通用IO接口的輸出應(yīng)用8段數(shù)碼管應(yīng)用通用IO輸入接口設(shè)計(jì)本講重點(diǎn)IO接口的基本結(jié)構(gòu)IO接口的輸入輸出設(shè)計(jì)M16具有PA、PB、PC、PD4組8位共32路IO接口,分別對應(yīng)32個(gè)引腳所用的IO接口都可以作為數(shù)字通用IO接口使用IO接口也可以設(shè)置為中斷、定時(shí)器、USRAT、I2C、SPI、模擬比較等功能使用IO接口配合外部電路可以構(gòu)成各式各樣的單片機(jī)系統(tǒng)6.1通用IO接口的基本結(jié)構(gòu)和特性通用IO結(jié)構(gòu)示意圖輸入和輸出時(shí)工作邏輯AVR通用IO端口的特點(diǎn)雙向可獨(dú)立進(jìn)行按位控制PP大電流驅(qū)動(dòng)可控引腳內(nèi)部上拉電阻DDR可控方向寄存器引腳的配置每個(gè)端口引腳的配置都是通過寄存器完成的每個(gè)端口都具有三個(gè)寄存器DDRx、PORTx、PINx。:DDRxn:確定x端口、n引腳的方向。0—輸入;1—輸出。PORTxn引腳配置為輸入時(shí),若PORTxn為“1“,上拉電阻將使能。PORTxn清零,引腳上拉電阻無效,引腳處于三態(tài)。

復(fù)位時(shí)各引腳為高阻態(tài),即使此時(shí)并沒有時(shí)鐘在運(yùn)行。當(dāng)引腳配置為輸出時(shí),若PORTxn為"1“,引腳輸出高電平("1“),否則輸出低電平(“0“)。PINxn:x端口、n引腳的物理狀態(tài)特殊控制寄存器SFIOR($30):PUD位設(shè)置上拉電阻是否有效引腳配置方案如表所示讀取引腳物理狀態(tài)數(shù)據(jù)不論如何配置DDxn,都可以通過讀取PINxn寄存器來獲得引腳電平讀取引腳數(shù)據(jù)時(shí)續(xù)及同步讀取寫出的數(shù)據(jù)的時(shí)續(xù)及同步例程:匯編語言實(shí)現(xiàn);定義上拉電阻和設(shè)置高電平輸出;為端口引腳定義方向ldir16,(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0)ldir17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)outDDRB,r17outPORTB,r16;為了同步插入nop指令nop;讀取端口引腳inr16,PINB結(jié)果:PB0、PB1:輸出端口,初始狀態(tài)為1PB3、PB2:輸出端口,初始狀態(tài)為0PB7、PB6:輸入端口,上拉電阻有效,外部引腳拉低時(shí)會(huì)有小電流輸出用C語言實(shí)現(xiàn)unsignedchari;.../*定義上拉電阻和設(shè)置高電平輸出*//*為端口引腳定義方向*/DDRB=(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);PORTB=(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);/*為了同步插入nop指令*/_NOP();/*讀取端口引腳*/i=PINB;注意PINx寄存器實(shí)際意義上不是寄存器,而是可控的三態(tài)門,因此只能讀不能寫初始狀態(tài)IO口復(fù)位后均設(shè)置為輸入、內(nèi)部上拉電阻無效,各個(gè)端口處于高祖狀態(tài)用戶使用前必須先進(jìn)性各個(gè)端口的初始化,再進(jìn)行使用引腳未被使用,建議給這些引腳賦予一個(gè)確定電平常用編程指令及方法匯編指令I(lǐng)N/OUT指令:實(shí)現(xiàn)通用寄存器與IO寄存器之間的數(shù)據(jù)交換SBI/CBI指令:實(shí)現(xiàn)IO寄存器某位置位或清零SBIC/SBIS指令:測試IO寄存器某位為零或1時(shí)跳行LD、SER等C語言指令PORTB=(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);i=PORTBPORTB&=~0x80PORTB|=~0x80。。。。。。。。。。。。通用IO端口的第二功能除了通用數(shù)字I/O功能之外,大多數(shù)端口引腳都具有第二功能6.2IO端口的輸出應(yīng)用通用IO接口的輸出設(shè)計(jì)要點(diǎn)輸出電平的匹配和轉(zhuǎn)換M16的IO引腳輸出與外部的電路和設(shè)備間存在一定的差別。如UART通信接口和通用的RS232通信總線電平之間的差別,需要同過RS232芯片進(jìn)行電平轉(zhuǎn)換MX2325伏I/O芯片與3.3伏I/O芯片IO連接的設(shè)備會(huì)插拔,如IC卡6.2IO端口的輸出應(yīng)用兩個(gè)IO中間串一個(gè)電阻200-300歐使用專用的芯片-TI的TXB01086.2IO端口的輸出應(yīng)用通用IO接口的輸出設(shè)計(jì)要點(diǎn)輸出電流驅(qū)動(dòng)能力的設(shè)計(jì)AVR提供20mA驅(qū)動(dòng)電流,當(dāng)外部電路需要電流大于20mA時(shí)需要行功率驅(qū)動(dòng)電路設(shè)計(jì),如電機(jī)控制、音響上拉電阻提供三級管6.2IO端口的輸出應(yīng)用6.3IO端口的輸出應(yīng)用輸出電平轉(zhuǎn)換的延時(shí)單片機(jī)在執(zhí)行引腳的電平轉(zhuǎn)換時(shí)僅需2個(gè)周期,這樣輸出就會(huì)是一個(gè)頻率較高的脈沖信號(hào),應(yīng)用中往往需要一個(gè)低/高電平延時(shí)較長的信號(hào),就需要加入延時(shí)設(shè)計(jì)進(jìn)行獲得可以通過計(jì)數(shù)器/定時(shí)器獲得精度較高的延時(shí),也可以使用軟件延時(shí)獲得一個(gè)精度要求較低的延時(shí)LED發(fā)光二極管的控制軟件設(shè)計(jì)實(shí)現(xiàn)跑馬燈。8個(gè)LED逐一循環(huán)點(diǎn)亮#include<iom16v.h>voidmain(void){unsignedcharpin_num=0; //引腳控制的位置變量DDRB=0xFF; //設(shè)置B口為輸出口PORTB=0xFF; //設(shè)置初值為1,LED滅While(1){ PORTB=~(1<<pin_num); //依次點(diǎn)亮相應(yīng)的LED if(++pin_num>=8)pin_num=0 //當(dāng)計(jì)數(shù)等于或大于8時(shí)清零

delay_ms(500); //延時(shí)0.5s}}voiddelay_ms(unsignedintK){ unsignedinti,j;for(i=0;i<k;i++){for(j=0;i<570;j++);}}利用按鍵控制LED點(diǎn)亮按S1...S8鍵點(diǎn)亮LED1...LED8燈#include<iom16v.h>voidmain(void){ unsignedcharpin_num=0; //引腳控制狀態(tài)變量DDRB=0xFF; //設(shè)置B口為輸出口PORTB=0xFF; //設(shè)置初值為1,LED滅DDRA=0xFF; //設(shè)置A口為輸入PORTA=0xFF; //初始化A口為1,設(shè)置上拉電阻While(1){ PORTB=PINA; //依次點(diǎn)亮相應(yīng)的LED}}6.4LED數(shù)碼顯示管的應(yīng)用LED數(shù)碼管的原理8個(gè)發(fā)光二極管構(gòu)成分為共陰極和共陽極兩大類8段數(shù)碼管的字段編碼表字形hgfedcba共陰極共陽極0001111113FHC0H10000011006HF9H2010110115BHA4H3010011114FHB0H40110011066H99H5011011016DH92H6011100107DH82H70000011107HF8H8011111117FH80H9011011116FH90HA0111011177H868B011111007CH83HC0110100139HC6HD010111105EHA1HE0111100179H86HF0111000171H8EHLED數(shù)碼管的顯示電路設(shè)計(jì)可以分為:靜態(tài)顯示接口動(dòng)態(tài)顯示接口靜態(tài)顯示接口即將共陽極的數(shù)碼管的共陽極端連接在電源上(共陰極的電源端連接在地上),數(shù)碼管的顯示由控制電路控制a~g的8個(gè)端口來獲得特點(diǎn):不夠靈活、功耗較大、控制簡便、使用硬件資源較少動(dòng)態(tài)顯示接口共陽極、共陰極的端子作為器件的選通端,由控制電路給出信號(hào)進(jìn)行控制的方式特點(diǎn):靈活設(shè)置、可以進(jìn)行功耗設(shè)計(jì)、控制較為復(fù)雜、使用硬件資源較多常用的靜態(tài)多位LED數(shù)碼管的設(shè)計(jì)串行數(shù)據(jù)傳輸?shù)撵o態(tài)顯示接口74HC164邏輯移位寄存器74HC164串行輸入、并行輸出真值表輸入輸出CLRCLKABQAQB...QHLxxxLL...LH↓xx不變化H↑LxLQAn...QGnH↑xLLQAn...QGnH↑HHHQAn...QGn對應(yīng)的控制程序,對以上的圖紙,假如PB0表示數(shù)據(jù),PB1生成時(shí)鐘#include<iom16v.h>#include<macros.h>unsignedcharcharlib[18]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0x00};unsignedchardisp_buff[8];voiddisp_scr(void){unsignedchartmp;unsignedinti;for(i=0;i<8;i++){tmp=charlib[disp_buff[i]];hc164_send_byte(tmp);delay_ms(2);}}voidhc164_send_byte(unsignedchardisp_Num){unsignedchara;unsignedinti;for(i=0;i<8;i++){a=PORTB&(1<<0);If(a==0)PORTB=PORTB|(disp_num&0x01)elsePORTB=PORTB&(disp_num|0xFE);PORTB=PORTB|(1<<1);PORTB=PORTB&(~(1<<1));disp_num>>=disp_num;}}常用的動(dòng)態(tài)多位LED數(shù)碼管的設(shè)計(jì)6.5通用IO輸入接口設(shè)計(jì)輸入信號(hào)的分類模擬信號(hào)和數(shù)字信號(hào)模擬信號(hào)的輸入必須進(jìn)行數(shù)字化處理,即進(jìn)行AD轉(zhuǎn)換,然后才能進(jìn)入單片機(jī)系統(tǒng)進(jìn)行處理數(shù)字信號(hào)的輸入可以直接進(jìn)入單片機(jī)系統(tǒng),然后進(jìn)行處理電壓信號(hào)和電流信號(hào)單片機(jī)的IO接口采用電平邏輯,即只能區(qū)分高低電平、電平轉(zhuǎn)換等信號(hào),電流信號(hào)必須經(jīng)過電壓轉(zhuǎn)換才能進(jìn)入系統(tǒng)但在長距離傳輸過程中往往需要使用電平信號(hào)來進(jìn)行數(shù)據(jù)傳遞單次信號(hào)和連續(xù)信號(hào)軟件設(shè)計(jì)注意注意初始狀態(tài)正確設(shè)置控制口的方向再進(jìn)行讀寫操作讀取數(shù)據(jù)時(shí)應(yīng)當(dāng)取PINx的值而不是PORTx一個(gè)時(shí)鐘周期后才能夠讀取新設(shè)置的值簡單按鍵設(shè)計(jì)為什么不能使用K3的

連接方式?簡單的按鍵輸入設(shè)計(jì)—消除抖動(dòng)抖動(dòng)的產(chǎn)生力度方向按鍵的接觸方式抖動(dòng)特性壓緊和放開兩個(gè)過

程分別為10~20ms按鍵閉合時(shí)間通常:300~500ms硬件消除抖動(dòng)利用R-S觸發(fā)器:將信號(hào)鎖存積分電路:將抖動(dòng)信號(hào)消除300~500ms10~20ms10~20ms消除抖動(dòng)的方法軟件消除抖動(dòng)延時(shí)兩次讀取無按鍵狀態(tài)消抖狀態(tài)按鍵確認(rèn)狀態(tài)等待按鍵按下第一次測試到按鍵按下第二次測試到按鍵未按下確認(rèn)按鍵按下等待按鍵釋放測試到按鍵釋放過程中只出現(xiàn)一次確認(rèn)按鍵按下不能實(shí)現(xiàn)按鍵“連發(fā)”功能在單片機(jī)系統(tǒng)設(shè)計(jì)中一般不適用“連發(fā)”功能有限狀態(tài)機(jī)思想的設(shè)計(jì)!6.6基于有限狀態(tài)機(jī)的鍵盤設(shè)計(jì)鍵盤是嵌入式系統(tǒng)、單片機(jī)控制設(shè)備的最基本、最可靠的人機(jī)接口手機(jī):手機(jī)鍵盤冰箱:溫度調(diào)節(jié)鍵。。。。。。。。。。。。。。鍵盤的種類簡單按鍵:復(fù)位建、功能選擇鍵4x4標(biāo)準(zhǔn)鍵盤4x3標(biāo)準(zhǔn)鍵盤計(jì)算機(jī)標(biāo)準(zhǔn)鍵盤。。。。。。。。。。。。。。。有限狀態(tài)機(jī)

什么是有限狀態(tài)機(jī)?應(yīng)用場合?有限狀態(tài)機(jī):一種數(shù)學(xué)模型系統(tǒng)狀態(tài)集合:系統(tǒng)輸入信號(hào):系統(tǒng)狀態(tài)轉(zhuǎn)移函數(shù):系統(tǒng)的輸出信號(hào)集合:時(shí)間序列:有限狀態(tài)機(jī)中除了時(shí)間序列外,其他參數(shù)均為有限、可確認(rèn)的集合有限狀態(tài)機(jī)中,下一步的狀態(tài)只與當(dāng)前狀態(tài)和當(dāng)前輸入有關(guān)有限狀態(tài)機(jī)中,系統(tǒng)的輸出只與當(dāng)前狀態(tài)有關(guān)有限狀態(tài)機(jī)中,時(shí)間序列相當(dāng)于脈沖時(shí)序,其長度選擇必須不大于輸入信號(hào)變化的最快周期太大容易造成信號(hào)丟失太小提高了系統(tǒng)要求以上圖所示的單鍵操作按鍵的抖動(dòng)時(shí)間:5~20ms,正常時(shí)間:300~500ms則需要保證兩次讀鍵值的時(shí)間大于抖動(dòng)時(shí)間,小于最小正常時(shí)間的1/2取讀鍵值時(shí)間為100ms保證了在一次按鍵過程中至少可以檢測到2次按鍵閉合,任意兩次按鍵檢測不會(huì)落在1個(gè)抖動(dòng)區(qū)內(nèi)讀鍵值的軟件編寫復(fù)雜鍵盤接口設(shè)計(jì)對于復(fù)雜的鍵盤設(shè)計(jì)不可能使用IO口一一對應(yīng)鍵盤多,IO資源有限,造成浪費(fèi)涉及到IO口復(fù)用檢測鍵盤的值對鍵盤進(jìn)行編號(hào)取值矩陣鍵盤矩陣鍵盤硬件電路設(shè)計(jì)設(shè)置PA0~PA2為輸入,接上拉電阻設(shè)置PA3~PA6為輸出即:DDRA=x1111000

PORTA=x1111111鍵盤掃描讀寫方式依次將PA3~PA64條線置0,讀取PA2~PA0的值即可判斷是哪個(gè)鍵按下PA3=0時(shí):【PA2~PA0】=111,無鍵按下;

【PA2~PA0】=110,表示K1-1按下;

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論