版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第6章通用I/O接口基本結構與輸出應用2ATmega16芯片有PORTA、PORTB、PORTC、PORTD(簡稱PA、PB、PC、PD)4組8位,共32路通用I/O接口,分別對應于芯片上32根I/O引腳。所有這些I/O口都是雙(有的為3)功能復用的。
其中第一功能均作為數(shù)字通用I/O接口使用,復用功能則分別用于中斷、時鐘/計數(shù)器、USRAT、I2C和SPI串行通信、模擬比較、捕捉等應用。引言
3I/O口的基本結構
每組I/O口配備三個8位寄存器,它們分別是方向控制寄存器DDRx,數(shù)據(jù)寄存器PORTx,和輸入引腳寄存器PINx(x=A\B\C\D)。I/O口的工作方式和表現(xiàn)特征由這3個I/O口寄存器控制。4方向控制寄存器DDRx用于控制I/O口的輸入輸出方向,即控制I/O口的工作方式為輸出方式還是輸入方式。當DDRx=1時,I/O口處于輸出工作方式。
當PORTx=1時,I/O引腳呈現(xiàn)高電平,同時可提供輸出20mA的電流;而當PORTx=0時,I/O引腳呈現(xiàn)低電平,同時可吸納20mA電流。5當DDRx=0時,I/O處于輸入工作方式
此時引腳寄存器PINx中的數(shù)據(jù)就是外部引腳的實際電平,通過讀I/O指令可將物理引腳的真實數(shù)據(jù)讀入MCU。此外,當I/O口定義為輸入時(DDRx=0),通過PORTx的控制,可使用或不使用內部的上拉電阻。6表6.1是AVR通用I/O端口的引腳配置情況
表中的PUD為寄存器SFIOR中的一位,它的作用相當AVR全部I/O口內部上拉電阻的總開關。當PUD=1時,AVR所有I/O內部上拉電阻都不起作用(全局內部上拉無效);而PUD=0時,各個I/O口內部上拉電阻取決于DDRXn的設置。7(1).使用AVR的I/O口,首先要正確設置其工作方式,確定其工作在輸出方式還是輸入方式。
(2)當I/O工作在輸入方式,要讀取外部引腳上的電平時,應讀取PINxn的值,而不是PORTxn的值。
(3)當I/O工作在輸入方式,要根據(jù)實際情況使用或不使用內部的上拉電阻。
(4)一旦將I/O口的工作方式由輸出設置成輸入方式后,必須等待一個時鐘周期后才能正確的讀到外部引腳PINxn的值。8I/O端口寄存器PA口寄存器—PORTA、DDRA、PINA各個位的具體定義9
正確使用AVR的I/O口要注意:(1)先正確設置DDRx方向寄存器,再進行I/O口的讀寫操作。(2)AVR的I/O口復位后的初始狀態(tài)全部為輸入工作方式,內部上拉電阻無效。所以,外部引腳呈現(xiàn)三態(tài)高阻輸入狀態(tài)。(3)用戶程序需要首先對要使用的I/O口進行初始化設置,根據(jù)實際需要設定使用I/O口的工作方式(輸出還是輸入),當設定為輸入方式時,還要考慮是否使用內部的上拉電阻。(4)在硬件電路設計時,如能利用AVR內部I/O口的上拉電阻,可以節(jié)省外部的上拉電阻。AVR通用I/O端口的主要特點雙向可獨立位控的I/O口ATmega16的PA、PB、PC、PD四個端口都是8位雙向I/O口,每一位引腳都可以單獨的進行定義,相互不受影響。如用戶可以在定義PA口第0、2、3、4、5、6位用于輸入的同時定義第1、7位用于輸出,互不影響10AVR通用I/O端口的主要特點Push-Pull大電流驅動每個I/O口輸出方式均采用推挽式緩沖器輸出,提供大電流的驅動,可以輸出(吸入)20mA的電流,因而能直接驅動LED顯示器??煽刂频囊_內部上拉電阻每一位引腳內部都有獨立的,可通過編程設置的,設定為上拉有效或無效的內部上拉電阻。當I/O口被用于輸入狀態(tài),且內部上拉電阻被激活(有效)時,如果外部引腳被拉低,則構成電流源輸出電流(uA量級)。11AVR通用I/O端口的主要特點DDRx可控的方向寄存器。AVR的I/O端口結構同其它類型單片機的明顯區(qū)別是,AVR采用3個寄存器來控制I/O端口。一般單片機的I/O僅有數(shù)據(jù)寄存器和控制寄存器,而AVR還多了一個方向控制器,用于控制I/O的輸入輸出方向。由于輸入寄存器PINx實際不是一個寄存器,而是一個可選通的三態(tài)緩沖器,外部引腳通過該三態(tài)緩沖器與MCU的內部總線連接,因此,讀PINx時是讀取外部引腳上的真實和實際邏輯值,實現(xiàn)了外部信號的同步輸入。這種結構的I/O端口,具備了真正的讀-修改-寫(Read-Modify-Write)特性。1213C語言中的位操作
a|b–-按位或
這個表達式指示中a被表達式中的b按位進行或運算這慣用于打開某些位尤其常用|=的形式例如
PORTA|=0x80;//打開位7(最高位)
a&b–-按位與
這個運算在檢查某些位是否置1時有用例如
If((PORTA&0x81)==0)//檢查位7和位0注意圓括號需要括在&運算符的周圍因為它和==相比運算優(yōu)先級較低這是C程序中很多錯誤的原因之一
a^b–-按位異或
這個運算對一個位取反有用例如在下面的例子中位7是被翻轉的
PORTA^=0x80;//翻轉位7
~a–-按位取反
在表達式中這個運算執(zhí)行一個取反當用按位與運算關閉某些位時與這個運算組合使用尤其有用如
PORTA&=~0x80;//關閉位7
14PORTC
|=(1<<BIT0)|(1<<BIT3);
1<<(BIT0)表示邏輯1左移到PORTC
的D0位,結果為0b00000001;1<<(BIT3)表示邏輯1左移PORTC
的D3位,結果為0b00001000。0b00000001在同0b00001000相或,結果為0b00001001。
PORTD^=BIT(PD7)PORTD口的第7位取反/,取反PD0引腳,TCCR0|=(1<<CS01)|(1<<CS00);TCCR0功能寄存器的CS01、CS00位置1。15通用數(shù)字I/O口的設置與編程1.通用I/O輸出設計要點
應用I/O口輸出時,在系統(tǒng)的軟硬件設計上應注意的問題有:
輸出電平的轉換和匹配。
輸出電流的驅動能力。
I/O口輸出為“1”時,可以提供20mA左右的驅動電流。輸出為“0”時,可以吸收20mA左右的灌電流(最大為40mA)。輸出電平轉換的延時。應用舉例:LED發(fā)光二極管的控制設計一個帶有一排8個發(fā)光二極管的簡易彩燈控制系統(tǒng)16硬件電路設計
當電壓U1大于U2約1V以上時,二極管導通發(fā)光。當導通電流大于5mA時,人的眼睛就可以明顯地觀察到二極管的發(fā)光,導通電流越大,亮度越高。
AVR的I/O口輸出“0”時,可以吸收最大40mA的電流,因此采用控制發(fā)光二極管負極的設計比較好。17#include<mega16.h>#include<delay.h>voidmain(void){unsignedcharposition=0; //position為控制位的位置PORTA=0xFF; //PA口輸出全1,LED全滅DDRA=0xFF; //PA口工作為輸出方式while(1){ PORTA=~(1<<position); if(++position>=8)position=0; delay_ms(1000);}}18應用舉例:繼電器控制控制恒溫箱的加熱的硬件電路設計
恒溫箱的加熱源采用500W電爐,電爐的工作電壓220v,電流2.3A。選用HG4200繼電器,開關負載能力為5A/AC220V,繼電器吸合線圈的工作電壓5v,功耗0.36W,計算得吸合電流為0.36/5=72mA。因此,要能使繼電器穩(wěn)定的吸合,驅動電流應該大于80mA。該電流已經(jīng)超出AVR本身I/O口的驅動能力,因此外部需要使用功率驅動元件。I/O引腳輸出“1”時,三極管導通,繼電器吸合,電爐開始加熱。I/O引腳輸出“0”時,三極管截止,繼電器釋放,加熱停止。19PORTC
|=(1<<
PORTC0)//PORTC位置1。繼電器吸合,電爐開始加熱。PORTC&
=~(1<<
PORTC0)PORTC&
=
~0x80//PORTC位置0。繼電器釋放,加熱停止。
20應用舉例:步進電機控制21硬件電路22程序#include<mega16.h>#include<delay.h>Flashunsignedcharstep[6]={0x04,0x06,0x02,0x03,0x01,0x05};voidmain(void){chari=0; intdelay=500;PORTA=0x00;DDRA=0x07; //PA口工作為輸出方式
while(1){ PORTA=step[i]; // if(++i>=6)i=0; delay_ms(delay);};}23AVRI/O端口應用實例-7段LED顯示器
在單片機系統(tǒng)中,常用的顯示器有:○發(fā)光二極管顯示器,簡稱LED(LightEmittingDiode);○液晶顯示器,簡稱LCD(LiquidCrystalDisplay);○熒光管顯示器,簡稱CRT。近年來也開始使用簡易的CRT接口,顯示一些漢字及圖形。24LED顯示器
◎前二種顯示器都有兩種顯示結構:段顯示(7段,“米”字型等)和點陣顯示(5×7,5×8,8×8點陣等)。而發(fā)光二極管顯示又分為固定段顯示和可以拼裝的大型字段顯示,此外還有共陽極和陰極之分等?!蛉N顯示器中,以熒光管顯示器亮度最高,發(fā)光二極管次之,而液晶顯示器最弱,為被動顯示器,必須有外光源。◎限于篇幅,我們介紹7段LED顯示器。25一、LED段顯示器結構與原理
LED顯示器是單片機應用系統(tǒng)中常用的價廉輸出設備。它是由若干個發(fā)光二極管組成的,當發(fā)光二極管導通時,相應的一個點或一個筆畫發(fā)亮。控制不同組合的二極管導通,就能顯示出各種字符。發(fā)光二極管的陽極連在一起的稱為共陽極顯示器,陰極連在一起的稱為共陰極顯示器。26一、LED段顯示器結構與原理
○對于共陰極LED,欲點亮的段在字節(jié)中所處的位為“1”,○對于共陽極LED,欲點亮的段在字節(jié)中所處的位為“0”,○例如:顯示字符5,共陰極字型碼為01101101B(6DH),共陽極字型碼為10010010B(92H)。
27LED共陰/共陽段選編碼表
顯示字符共陰極字型碼共陽極字型碼顯示字符共陰極字型碼共陽極字型碼0
3FH
C0H
c
39HC6H
1
06H
F9HD
5EHA1H
2
5BH
A4HE
79H86H
3
4FH
B0H
F
71H8EH
4
66H
99H
P
73H8CH
5
6DH
92HU
3EHC1H
6
7DH
82H
I
31HCEH
7
07H
F8H
Y
6EH91H
87FH
80HH
76H89H9
6FH
90H
L
38HC7H
A
77H
88H
“滅”
00HFFH
b
7CH
83H
28二、
LED顯示器顯示方式
LED顯示器有靜態(tài)顯示和動態(tài)顯示兩種顯示方式,分述如下:1.LED靜態(tài)顯示方式所謂靜態(tài)顯示,就是當顯示器顯示某一個字符時,相應的發(fā)光二極管恒定地導通或截止,例如七段顯示器的a,b,c,d,e,f導通,g截止,顯示0。這種顯示方式每一位都需要有一個8位輸出口控制。29
多位顯示器的接口邏輯。如圖所示
◎優(yōu)點:編程容易,管理簡單,亮度較高,◎缺點:占用口線資源較多。
1、LED靜態(tài)顯示方式302.LED動態(tài)顯示方式
※動態(tài)顯示—就是一位一位地輪流點亮顯示器各個位(掃描),對于顯示器的每一位來說,每隔一段時間點亮一次。○顯示器的亮度既與導通電流有關,也與點亮時間和間隔時間的比例有關。調整電流和時間參數(shù),可實現(xiàn)亮度較高較穩(wěn)定的顯示。
31
※多位7段LED動態(tài)顯示器電路在多位LED顯示時,為了簡化硬件電路,通常將所在位段選線相應地并聯(lián)在一起,由一個(7段LED)8位I/O口控制,形成段線的多路復用。而各位的共陽極或共陰極分別由相應的I/O口線控制,實現(xiàn)各位的分時選通。
2.LED動態(tài)顯示方式32
2.LED動態(tài)顯示方式
掃描顯示方式,即在某一時刻,只讓某一位的位選線處于選通狀態(tài),而其它各位的位選線處于關閉狀態(tài),同時,段選線上輸出相應位要顯示字符的字型碼,這樣同一時刻,6位LED中只有選通的那一位顯示出字符,而其它三位則是熄滅的。由于人眼有視覺暫留現(xiàn)象,只要每位顯示間隔足夠短,則可造成多位同時亮的假象,達到顯示的目的。33LED顯示器接口技術
※要使LED顯示器顯示出字符,必須提供段選碼和位選碼?!蚨芜x碼(即字碼)可以用硬件譯碼的方法獲得,也可以用軟件的方法獲得?!蛭贿x碼靜態(tài)顯示和動態(tài)顯示。下面介紹軟件譯碼顯示器接口方法。34一、靜態(tài)顯示接口35一、靜態(tài)顯示接口
1.靜態(tài)顯示器硬件電路是一個采用串行傳送數(shù)據(jù)的8位數(shù)碼管靜態(tài)顯示接口。設計中將8片八位串行輸入/并行輸出移位寄存器74HC164串接,數(shù)碼管為共陽極型。
MCU將8個要顯示字符的段碼字準備好,通過DataOut引腳,在ClkOut引腳產(chǎn)生的cp移位脈沖的作用下,一位一位地移入74HC164的QA-QH端(串行輸入)。QA-QH的輸出(并行輸出)直接作為數(shù)碼管的段位控制。由于左邊74HC164芯片的QH(最低位)和右邊74HC164芯片的數(shù)據(jù)串入端連接,經(jīng)過ClkOut時鐘線64個cp脈沖后,要顯示的8個字符將會在8個數(shù)碼管上顯示,最先發(fā)送的顯示字符段碼將顯示在最右邊。
36二、動態(tài)顯示接口37二、動態(tài)顯示接口在任何一個時刻,PC0-PC5中只能有一個I/O口輸出低電平,即只有一位數(shù)碼管亮。MCU必須循環(huán)輪流控制PC0-PC5中的一位輸出“0”,同時PA口要輸出該位相應的段碼值。即使顯示的內容沒有變化,MCU也要進行不停的循環(huán)掃描處理。38二、動態(tài)顯示接口軟件的設計應保證從在外表看數(shù)碼管顯示的效果要連續(xù)(即在人眼里各個數(shù)碼管全部亮),亮度均勻,同時沒有拖尾現(xiàn)象。為了保證各個數(shù)碼管的顯示的效果不產(chǎn)生閃爍情況,表象上全部點亮的話,則首先必須在1秒中內循環(huán)掃描6個數(shù)碼管的次數(shù)應大于25次,這里是利用了人眼的影像滯留效應。本例中我們選擇40次,既每隔1000/40=25ms將6個數(shù)碼管循環(huán)掃描一遍。第二要考慮的是,在25ms時間間隔中,要逐一輪流點亮6個數(shù)碼管,那么每個數(shù)碼管點亮的持續(xù)時間要相同,這樣亮度才能均勻。第三個要考慮的要點為每個數(shù)碼管點亮的持續(xù)時間,這個時間長一些的話,數(shù)碼管的亮度高一些,反之則暗一些。通常,每個數(shù)碼管點亮的持續(xù)時間為1-2ms。我們將每個數(shù)碼管的點亮持續(xù)時間定為2ms,那么6個數(shù)碼管掃描一遍的時間為12ms,因此MCU還有13ms的時間處理其它事件39二、動態(tài)顯示接口#include<mega16.h>#include<delay.h>charled_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};charposition[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//任何時刻只有一個管亮,即只有一個I/O口輸出為低voiddisplay(void)//掃描顯示函數(shù),執(zhí)行時間12ms{chari;for(i=0;i<=5;i++){PORTA=led_7[dis_buff[i]];PORTC=position[i];delay_ms(2);//(2)PORTC=0xff;//(3)}}40voidtime_to_disbuffer(void)//時間值送顯示緩沖區(qū)函數(shù){unsignedchari,j=0;for(i=0;i<=2;i++) { dis_buff[j++]=time[i]%10; dis_buff[j++]=time[i]/10; }}voidmain(void){PORTA=0x00; //PORTA初始化
DDRA=0xFF;PORTC=0x3F; //PORTC初始化
DDRC=0x3F;time[2]=23;time[1]=58;time[0]=55; //時間初值23:58:55time_to_disbuffer();41while(1){ display(); //顯示掃描,執(zhí)行時間12ms if(++time_counter>=40) { time_counter=0; //(4)
point_on=~point_on; //(5)
if(++time[0]>=60) { time[0]=0; if(++time[1]>=60) { time[1]=0; if(++time[2]>=24)time[2]=0; } } time_to_disbuffer(); }delay_ms(13); //延時13ms,可進行其它處理(6)
}}42點陣LED顯示器點陣LED在許多產(chǎn)品中也是經(jīng)常使用的一種外圍設備,如電梯中的運行指示,公交汽車里的站名廣告顯示,以及大型的電子廣告牌等。這種LED的優(yōu)點是可以通過點陣的形式顯示漢字、圖形等。實際上,PC的顯示屏、手機顯示屏等,在上面顯示漢字、圖形的原理都是點陣顯示的方法。43點陣LED顯示器8*8點陣LED一般是一個方型的器件,由8行*8列共64個LED發(fā)光二極管組成。44點陣LED顯示器8*8點陣LED的顯示控制方式與LED數(shù)碼管的顯示方式類似,也是使用動態(tài)掃描的工作方式。上箭頭“↑”的碼表45點陣LED顯示器Col+PA口輸出值1(PA7)2(PA6)3(PA5)4(PA4)5(PA3)6(PA2)7(PA1)8(PA0)Row(-)1(PC0)●0x102(PC1)●●●0x383(PC2)●●●●●0x7C4(PC3)●●●●●●●0xFE5(PC4)●●●0x386(PC5)●●●0x387(PC6)●●●0x388(PC7)●●●0x3846點陣LED顯示器flashcharchar_7[8]={0x10,0x38,0x7C,0xFE,0x38,0x38,0x38,0x38};voiddisplay(charrow){chari;for(i=0;i<=7;i++){if(row<=7)PORTA=char_7[row];elsePORTA=0;PORTC=~(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租車協(xié)議書16篇
- 2023房子轉讓買賣協(xié)議書七篇
- (可行性報告)紗窗可行性報告
- (2024)螢石礦采選技改工程項目可行性研究報告建議書(一)
- 三年級下冊英語一課一練-Module 7 unit2 it's warm today∣外研社(三起)(含解析)小學英語教學教材課件
- 2023年氫氣項目融資計劃書
- 啤酒行業(yè)消費研究報告
- 黑龍江省齊齊哈爾市甘南縣六校聯(lián)考2023-2024學年七年級上學期期末數(shù)學試卷(含解析)
- 養(yǎng)老院老人生活照料服務標準制度
- 養(yǎng)老院老人健康飲食營養(yǎng)師福利待遇制度
- 商業(yè)綜合體項目建設成本及經(jīng)營測算(自動計算)
- 基坑土釘墻及鋼管樁支護施工方案
- 中藥材及飲片性狀鑒別1總結課件
- 中醫(yī)內科學-噎膈(已完成)課件
- 玉米精品課件
- 干法超高分子量聚乙烯纖維開發(fā)現(xiàn)狀與發(fā)展趨勢儀征化纖楊勇
- 2022年秋季學期小學勞動教育實施方案六篇合集
- 德國工業(yè)戰(zhàn)略2030(德文)
- 客戶服務與管理教學ppt課件(完整版)
- GB 18582-2020 建筑用墻面涂料中有害物質限量
- 烏茲別克斯坦進口關稅
評論
0/150
提交評論