單片機學習資料2_第1頁
單片機學習資料2_第2頁
單片機學習資料2_第3頁
單片機學習資料2_第4頁
單片機學習資料2_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——單片機學習資料2二Atmega8單片機結(jié)構(gòu)分析

通過第一章內(nèi)容的學習,我們已經(jīng)知道,單片機就是在一塊芯片上集成了一臺微型計算機所必需的幾個組成部分:CPU、存儲器、I/0接口。

單片機主要是針對各種控制而設(shè)計的,因此,單片機除了具有一般微型計算機的組成部分外,一般還集成了定時/計數(shù)器、看門狗電路和中斷系統(tǒng),有的單片機還集成了A/D轉(zhuǎn)換功能部件。

單片機的這些組成部件在結(jié)構(gòu)上有什么特點?又是怎樣工作的呢?這些都是本章要解決的問題。

§2.1Atmega8單片機結(jié)構(gòu)

為了提高運行效率,Atmega8單片機采用了哈佛(Harvar)結(jié)構(gòu),即程序存儲器和數(shù)據(jù)存儲器使用不同的存儲空間。Atmega8單片機系統(tǒng)結(jié)構(gòu)如圖2—1:

RESETPC0-PC6PB0-PB7B端口驅(qū)動8位數(shù)據(jù)總線ADCPORTB數(shù)字接口TWI定時/計數(shù)器內(nèi)部振蕩器看門狗定時器MCU控制器MCU控制器VCCC端口驅(qū)動PORTC數(shù)字接口模擬輸入選擇GNDAGNDAREF程序計數(shù)器程序Flash指令寄放器指令譯碼器控制線CPU編程規(guī)律+-模擬比較器堆棧指針SRAM通用寄放器ALU狀態(tài)寄放器SPI模擬比較器接口振蕩器振蕩器中斷單元E2PROMUSARTPORTD數(shù)字接口D端口驅(qū)動PD0-PD7圖2—1Atmega8結(jié)構(gòu)框圖

§2.2Atmega8引腳功能

Atmega8單片機有PDIP、TQFP和MLF三種不同形式的封裝,這里我們主要介紹它的PDIP封裝,見圖2—2所示。

(RESET)PC6(RXD)PD0(TXD)PD1(INT0)PD2(INT1)PD3(XCK/T0)PD4VCCGND(XTAL1/TOSC1)PB6(XTAL2/TOSC2)PB7(T1)PD5(AIN0)PD6(AIN1)PD7(ICP)PB01234567891011121314282726252423PC5(ADC5/SCL)PC4(ADC4/SDA)PC3(ADC3)PC2(ADC2)PC1(ADC1)PC0(ADC0)GNDAREFAVCCPB5(SCK)PB4(MISO)PB3(MOSI/OC2)PB2(SS/OC1B)PB1(OC1A)ATmega82221202318171615

圖2—2ATmega8引腳配置圖

由上圖可以看出,Atmega8單片機各引出腳的功能分括號外功能(第一功能)和括號內(nèi)功能(其次功能)。下面我們先介紹Atmega8單片機引腳的第一功能,引腳其次功能,我們將在以后相關(guān)章節(jié)中陳述。

1.VCC(7腳)——(數(shù)字)電源;2.GND(8、22腳)——地;

3.AVCC(20腳)——ADC轉(zhuǎn)換模塊電源供電端,即當PC0—PC3用于ADC時,AVCC引腳應通過低通濾波器連接到VCC上;當PC0—PC3不使用ADC時,該引腳應直接連接到VCC上。注意:PC4、PC5端口的電源是由VCC提供的;

4.AREF(21腳)——ADC轉(zhuǎn)換模塊參考電源輸入端;5.PB7(10腳)、PB6(9腳)、PB5(19腳)、PB4(18腳)、PB3(17腳)、PB2(16腳)、PB1(15腳)和PB0(14腳)——組成B端口的8個位。B端口是一個8位的雙向I/O口,每個引腳都有內(nèi)部上拉電阻,而且輸出緩沖器具有雙向(輸入和輸出)大電流的驅(qū)動能力,可以直接驅(qū)動發(fā)光二極管發(fā)光。

6.PC6(1腳)、PC5(28腳)、PC4(27腳)、PC3(26腳)、PC2(25腳)、PC1(24腳)和PC0(23腳)——組成C端口的7個位。C端口是一個7位的雙向I/O口,每個引腳都有內(nèi)部上拉電阻,而且輸出緩沖器具有雙向(輸入和輸出)大電流的驅(qū)動能力,可以直接驅(qū)動發(fā)光二極管發(fā)光。

注意:PC6的電氣特性與端口C其他引腳的電氣特性不同。當未對RSTDISBL熔絲編程時,PC6只作為復位輸入引腳,不能當作I/O端口使用。要想使PC6作為I/O端口,就必需對RSTDISBL熔絲進行編程。如何對RSTDISBL熔絲編程,我們將在后面相關(guān)內(nèi)容中介紹。

7.PD7(13腳)、PD6(12腳)、PD5(11腳)、PD4(6腳)、PD3(5腳)、PD2(4腳)、PD1(3腳)和PD0(2腳)——組成D端口的8個位。D端口是一個8位的雙向I/O口,每個引腳都有內(nèi)部上拉電阻,而且輸出緩沖器具有雙向(輸入和輸出)大電流的驅(qū)動能力,可以直接驅(qū)動發(fā)光二極管發(fā)光。

Atmega8的B、C、D端口都是雙向I/O口,如何定義它們是輸入還是輸出,或內(nèi)部上拉電阻是否有效,這些相關(guān)內(nèi)容我們將在下一節(jié)《ATmega8的I/O端口》中陳述。

§2.3ATmega8的I/O端口

由上節(jié)內(nèi)容我們知道:Atmega8的I/O端口具有第一和其次兩種功能,下面我們具體介紹這些內(nèi)容。

一、端口的第一功能——通用的數(shù)字I/O口

Atmega8的I/O端口用做通用數(shù)字I/O口時,具有真正的讀—修改—寫功能,意思是某端口引腳方向改變(輸入還是輸出),不會影響其他引腳方向的改變。同樣,某端口引腳輸出值的改變(輸出高電平還是輸出低電平)以及用做輸入時其上拉電阻的通、斷,也不會影響其他引腳。

Atmega8每個I/O引腳內(nèi)部都有獨立的上拉電阻,如圖2—3。

+5V開關(guān)K控制信號:為1時,K合上;為0時,K斷開.K上拉電阻I/O口引腳(如PB0)ATmega82—3I/O口引腳內(nèi)部上拉電阻

如何用C語言定義開啟某I/0(如PB0)口的上拉電阻呢?其格式如下:

DDRB=0B00000000;//先定義PB0為輸入口

PORTB=0B00000001;//再將要開啟上拉電阻的位置1。

上述定義中DDRB、PORTB是什么呢?其實在Atmega8中每個I/O端口都有3個寄放器,它們分別是:數(shù)據(jù)方向寄放器(DDRx)、數(shù)據(jù)寄放器(PORTx)和數(shù)據(jù)輸入引腳寄放器(PINx)(x:是B或C或D)。下面我們以B端口為例,介紹這三種寄放器及其應用。

1.B端口方向寄放器——DDRB

位7DDB7R/W復位值R/W065432DDB2R/W01DDB1R/W00DDB0R/W0DDRBDDB6DDB5R/W0R/W0DDB4DDB3R/W0R/W0

方向寄放器主要用來定義I/O口引腳是輸入還是輸出,當I/O口的某位置“1〞時,那么相應的引腳為輸出,否則,該引腳為輸入。例如:DDRB=0B00000010,即DDB=1,說明B口的PB1為輸出,其他引腳為輸入。

2.B端口數(shù)據(jù)寄放器——PORTB

位76543210PORTB7PORTB6PORTB5PORTB4PORTB3PORTB2PORTB1PORTB0PORTBR/W復位值R/W0R/W0R/W0R/W0R/W0R/W0R/W0R/W0

數(shù)據(jù)寄放器或用來定義引腳輸出電平的高低,或用來定義是否開啟引腳內(nèi)部的上拉電阻。定義了I/O口某個引腳為輸出后,當數(shù)據(jù)寄放器相應位置“1〞時,說明該引腳輸出高電平;置“0〞時,輸出低電平,如:

DDRB=0B00000110;//定義PB1、PB2為輸出。

PORTB=0B00000010;//PB1輸出高電平,PB2輸出低電平。

定義了I/O口某個引腳為輸入后,當數(shù)據(jù)寄放器相應位置“1〞時,說明開啟該引腳的內(nèi)部上拉電阻;置“0〞時,該引腳內(nèi)部的上拉電阻是關(guān)斷的,如:DDRB=0B00000000;//定義PB0—PB7為輸入。

PORTB=0B00000010;//開啟PB1內(nèi)部上拉電阻。3.B端口輸入引腳寄放器——PINB

位76543210PORTB7PORTB6PORTB5PORTB4PORTB3PORTB2PORTB1PORTB0PINBR/WRN/ARN/ARN/ARN/ARN/ARN/ARN/ARN/A

輸入引腳寄放器主要用來讀取I/O口引腳電平的高低。

注意:“0B00000010〞,這種書寫格式與B端口的PB0—PB7之間的對應關(guān)系如圖2—4所示。

PB7PB6PB5PB4PB3PB2PB1PB00B圖2—4

Atmega8C、D斷口的方向寄放器、數(shù)據(jù)寄放器、輸入引腳寄放器與B口相類似,這里不在表達。二、端口的其次功能

大家可能注意到了,有些單片機引腳的功能不止一個,是什么原因呢?由于

工藝及標準化等原因,單片機引腳數(shù)目總是有限的。Atmega8單片機引腳數(shù)目為28個,但單片機為實現(xiàn)功能所需要的信號數(shù)目卻遠遠超過這個數(shù)。如何解決這個供需矛盾呢?正如有的人為了增加收入,要做一些兼職工作。單片機也同樣如此,當引腳數(shù)量有限時,“兼職〞是唯一可行的方法,即給其中一些引腳賦以雙重功能。下面介紹Atmega8單片機引腳的其次功能。1.B端口引腳其次功能:見表2—1

表2—1B端口引腳其次功能引腳PB7PB6PB5PB4PB3PB2PB1PB0第二功能XTAL2(系統(tǒng)時鐘晶振引腳2)TOSC2(實時時鐘晶振引腳2)XTAL1(系統(tǒng)時鐘晶振引腳1或外部系統(tǒng)時鐘輸入口)TOSC1(實時時鐘晶振引腳1)SCK(SPI總線時鐘)MISO(SPI總線主輸入口/從輸出口)MOSI(SPI總線主輸出口/從輸入口)OC2(T/C2輸出比較匹配輸出口)SS(SPI總線主從選擇)OC1B(T/C1輸出比較B匹配輸出口)OC1A(T/C1輸出比較A匹配輸出口)ICP(T/C1輸入捕獲輸入口)①PB7——XTAL2/TOSC2XTAL2:系統(tǒng)時鐘晶振引腳2。當系統(tǒng)使用外部晶振時,該引腳連接晶振的一個腳,此時,該引腳不能作為I/O引腳使用。當系統(tǒng)使用內(nèi)部可校準的RC振蕩器或外部時鐘源時,該引腳可作為一般I/O口使用。

TOSC2:實時時鐘晶振引腳2。只有選中擇內(nèi)部可校準的RC振蕩器作為系統(tǒng)時鐘源時,而且設(shè)置寄放器ASSR中的AS2位,允許使用異步時鐘定時器時,PB7才可用作TOSC2。當ASSR寄放器的AS2位置“1〞,使能定時/計數(shù)器2的異步時鐘功能時,PB7與端口引腳脫離,作為振蕩放大器的反向輸出端。在這種模式下,時鐘晶體連接到該引腳,且不能作為I/O引腳。

假使PB7被用作晶振,寄放器DDB7、PORTB7和PINB7讀出都為“0〞。②PB6——XTAL1/TOSC1

XTAL1:系統(tǒng)時鐘晶振引腳1。當系統(tǒng)使用外部晶振時,該引腳連接晶振的一個腳,此時,該引腳不能作為I/O引腳使用。當系統(tǒng)使用內(nèi)部可校準的RC振蕩器或外部時鐘源時,該引腳可作為一般I/O口使用。

TOSC1:實時時鐘晶振引腳2。只有選中擇內(nèi)部可校準的RC振蕩器作為系統(tǒng)時鐘源時,而且設(shè)置寄放器ASSR中的AS2位,允許使用異步時鐘定時器時,PB6才可用作TOSC1。當ASSR寄放器的AS2位置“1〞,使能定時/計數(shù)器2的異步時鐘功能時,PB6與端口引腳脫離,作為振蕩放大器的反向輸入端。在這種模式下,時鐘晶體連接到該引腳,且不能作為I/O引腳。

假使PB6被用作晶振,寄放器DDB6、PORTB6和PINB6讀出都為“0〞。③PB5——SCK

SCK:SPI串行總線接口時鐘線。當系統(tǒng)作為主機時,SCK為SPI總線的時鐘輸出端;當系統(tǒng)作為從機時,SCK為SPI總線的時鐘輸入端。當使能SPI為從機模式時,無論DDB5是何設(shè)置,該引腳被強置為輸入。盡管SCK引腳被SPI

強置為輸入,且其內(nèi)部上拉電阻仍由PORTB5控制。當使能SPI為主機時,PB5的數(shù)據(jù)方向由DDB5來控制。

④PB4——MISO

MISO:SPI串行總線接口的主機數(shù)據(jù)輸入/從機數(shù)據(jù)輸出端。當使能SPI為主機模式時,無論DDB4,PB4都被設(shè)置為輸入,但其內(nèi)部上拉電阻仍由PORTB4控制。;當使能SPI為從機模式時,PB4的數(shù)據(jù)方向由DDB4來控制。

⑤PB3——MOSI/OC2

MOSI:SPI串行總線接口的主機數(shù)據(jù)輸出/從機數(shù)據(jù)輸入端。當使能SPI為從機模式時,無論DDB3,PB3都被設(shè)置為輸入,且其內(nèi)部上拉電阻仍由PORTB3控制。當使能SPI為主機模式時,PB3的數(shù)據(jù)方向由DDB3來控制。

OC2:比較匹配輸出端。PB3引腳還可以作為定時/計數(shù)器2比較匹配的外部輸出口,此時,PB3引腳必需設(shè)置為輸出(DDB3=1)。在PWM應用中,OC2引腳還可作為PWM定時器模塊的輸出引腳。

⑥PB2——SS/OC1B

SS:SPI總線從機選擇輸入。當使能SPI為從機模式時,無論DDB2,PB2都被設(shè)置為輸入,且其內(nèi)部上拉電阻仍由PORTB2控制。當使能SPI為主機模式時,PB2的數(shù)據(jù)方向由DDB2來控制。

OC1B:T/C1比較匹配B輸出端。PB2引腳還可以作為定時/計數(shù)器1比較匹配B的外部輸出口,此時,PB2引腳必需設(shè)置為輸出(DDB2=1)。在PWM應用中,OC1B引腳還可作為PWM定時器模塊的輸出引腳。

⑦PB1——OC1A

OC1A:T/C1比較匹配A輸出端。PB1引腳還可以作為定時/計數(shù)器1比較匹配A的外部輸出口,此時,PB1引腳必需設(shè)置為輸出(DDB1=1)。在PWM應用中,OC1A引腳還可作為PWM定時器模塊的輸出引腳。

⑧PB0——ICPICP:輸入捕獲的輸入引腳。PB0引腳能作為T/C1輸入捕獲功能的輸入引腳。2.C端口引腳其次功能:見表2—2

表2—2C端口引腳其次功能

引腳PC6PC5PC4PC3PC2PC1PC0第二功能RESET(系統(tǒng)復位引腳)ADC5(ADC輸入通道5)SCL(2線串行總線接口時鐘線)ADC4(ADC輸入通道4)SDA(2線串行總線接口數(shù)據(jù)輸入/輸出線)ADC3(ADC輸入通道3)ADC2(ADC輸入通道2)ADC1(ADC輸入通道1)ADC0(ADC輸入通道0)①PC6——RESETRESET:系統(tǒng)復位引腳。當RSTDISBL熔絲位被置位時,PC6作為一般I/O引腳應用,此時,芯片內(nèi)部的上電復位(POWER—UP)和掉電檢測復位(BROWN—OUT)作為系統(tǒng)的復位源。當RSTDISBL熔絲位沒有被置位時,內(nèi)部復位電路將連接到PC6引腳,此時PC6不作為I/O口使用,當被外部拉成低電平日,產(chǎn)生復位動作,使系統(tǒng)復位。

②PC5——SCL/ADC5/

SCL:2線串行總線時鐘線。當TWCR寄放器中的TWEN位被置“1〞時,使能TWI接口,,PC5將與I/O端口脫離,成為TWI總線接口的串行時鐘線。PC5工作在TWI模式下時,有一個尖峰濾波器連接到該引腳,能夠抑制輸入信號中小于50ns的毛刺,同時引腳將由具有緩沖率限制的開漏驅(qū)動器驅(qū)動。

ADC5:PC5也可以作為ADC輸入的通道5。注意:ADC輸入通道5由數(shù)字電源端Vcc供電。

③PC4——SDA/ADC4

SDA:2線串行總線時鐘線。當TWCR寄放器中的TWEN位被置“1〞時,使能TWI接口,,PC4將與I/O端口脫離,成為TWI總線接口的串行時鐘線。PC4工作在TWI模式下時,有一個尖峰濾波器連接到該引腳,能夠抑制輸入信號中小于50ns的毛刺,同時引腳將由具有緩沖率限制的開漏驅(qū)動器驅(qū)動。

ADC4:PC4也可以作為ADC輸入的通道4。注意:ADC輸入通道4由數(shù)字電源端Vcc供電。

④PC3——ADC3

ADC3:PC3也可以作為ADC輸入的通道3。注意:ADC輸入通道3由模擬電源端AVcc供電

⑤PC2——ADC2

ADC2:PC2也可以作為ADC輸入的通道2。注意:ADC輸入通道2由模擬電源端AVcc供電。

⑥PC1——ADC1

ADC1:PC1也可以作為ADC輸入的通道1。注意:ADC輸入通道1由模擬電源端AVcc供電。

⑦PC0——ADC0

ADC0:PC0也可以作為ADC輸入的通道0。注意:ADC輸入通道0由模擬電源端AVcc供電。

⑧PD0——RXD

RXD:USART總線的數(shù)據(jù)輸入口。當使用USART的數(shù)據(jù)接收功能時,無論DDD0為如何設(shè)置,PD0均為輸入,此時PD0內(nèi)部上拉電阻依舊由PORTD0控制。

3.D端口引腳其次功能:見表2—3

表2—3D端口引腳其次功能引腳PD7PD6PD5PD4PD3PD2PD1PD0第二功能AIN1(模擬比較器負輸入)AIN0(模擬比較器正輸入)T1(T/C1外部計數(shù)脈沖輸入口)XCK(USART外部時鐘輸入/輸出口)T0(T/C0外部計數(shù)脈沖輸入口)INT1(外部中斷1輸入)INT0(外部中斷0輸入)TXD(USART輸出口)RXD(USART輸入口)①PD7——AIN1AIN1:模擬比較器反相輸入。在使用模擬比較器功能時,應將PD7設(shè)置為

輸入,且關(guān)斷內(nèi)部上拉電阻,防止數(shù)字口功能影響模擬比較器的性能。

②PD6——AIN0

AIN0:模擬比較器正相輸入。在使用模擬比較器功能時,應將PD6設(shè)置為輸入,且關(guān)斷內(nèi)部上拉電阻,防止數(shù)字口功能影響模擬比較器的性能。

③PD5——T1

T1:T/C1外部計數(shù)脈沖輸入口④PD4——XCK/T0

XCK:USART串行總線外部時鐘輸入/輸出口T0:T/C0外部計數(shù)脈沖輸入口⑤PD3——INT1

INT1:外部中斷源1。PD3可作為一個外部中斷源的輸入口⑥PD2——INT0

INT0:外部中斷源0。PD2可作為一個外部中斷源的輸入口⑦PD1——TXD

TXD:USART總線的數(shù)據(jù)輸出口。當使用USART的數(shù)據(jù)輸出功能時,無論DDD1如何設(shè)置,PD1均為輸出。

⑧PD0——RXD

RXD:USART總線的數(shù)據(jù)輸入口。當使用USART的數(shù)據(jù)接收功能時,無論DDD0為如何設(shè)置,PD0均為輸入,此時PD0內(nèi)部上拉電阻依舊由PORTD0控制。

以上是Atmega8單片機各端口引腳的其次功能,有的引腳的其次功能比它的第一功能還有用,有時可以不利用它的第一功能,但是不能沒有它的其次功能。缺少了它的其次功能,單片機甚至不能工作。盡管單片機引腳的地二功能如此有用,但初學者對它們的用法感到迷惑不解,總以為其次功能和第一功能之間要有一個切換過程,或者說要用某條指令來完成第一功能和其次功能的切換。實際上,單片機各引腳的其次功能完全是自動的,不需要用指令來切換。

§2.4Atmega8存儲器

單片機開始處理問題之前,必需事先把編寫好的各種程序和所需的一些常數(shù)送到單片機中存放起來。我們把能夠存放程序或數(shù)據(jù)的器件稱為存儲器。下面我們看看單片機的存儲器畢竟是什么樣子的。

一、程序存儲器

程序指的是控制單片機動作的一系列命令。單片機只認識由“0〞和“1〞代碼構(gòu)成的機器指令,因此必需將我們用C語言編寫的程序轉(zhuǎn)換成它能認識的指令碼。也就是說在單片機處理問題之前必需將將編好的程序、常數(shù)等編譯成機器代碼后存入單片機的存儲器中,這種用與存放程序指令、常數(shù)的存儲器稱為程序存儲器。

程序存儲器具有“非易失〞和“只讀〞屬性。所謂“非易失性〞指的是在掉電狀況下,儲存在程序存儲器中的程序代碼不會丟失?!爸蛔x性〞指的是單片機在正常工作時,不能往程序存儲器中寫入數(shù)據(jù),而只能從程序存儲器中將數(shù)據(jù)讀出,所以這種存儲器又稱為ROM(ReadOnlyMemory)。要想往程序存儲器中寫入數(shù)據(jù),必需在特別條件下、用特定的設(shè)備進行寫操作。

Atmega8單片機所采用的程序存儲器就是一種可電擦除的只讀存儲器,稱為FlashROM。由于所有的AVR指令都是16位或32位,因此Atmega8單片機Flash程序存儲器具有4K×16位的結(jié)構(gòu)。圖2—5為Atmega8單片機Flash程序存儲器的結(jié)構(gòu)圖。另外,為了提高程序的安全性性,設(shè)計時已將Atmega8單片機的Flash程序存儲器分為引導程序區(qū)(BootProgramSection)和應用程序區(qū)(ApplicationProgramSection)兩部分。我們可以通過對相應熔絲位的編程設(shè)定,選擇是否需要使用引導程序區(qū)以及該區(qū)空間的大小。

16Bits$000應用程序區(qū)引導程序區(qū)$FFF

圖2—5Flash程序存儲器結(jié)構(gòu)

二、數(shù)據(jù)存儲器

單片機中僅有程序存儲器是不夠的,由于它在作各種運算時與人工計算類似,為了得到最終結(jié)果,往往要經(jīng)過大量步的中間過程,得到大量中間結(jié)果。這些中間結(jié)果在運算過程中也要有個地方存放才行。程序終止了,這些中間結(jié)果可能就不需要了。把它們放哪呢?當然放在存儲器中。放在前面提到的程序存儲器中可以嗎?顯然不行,由于這些中間結(jié)果是隨時可能變化的,單片機要將它們寫進程序存儲器中,而在正常工作時程序存儲器又是不可以寫的。所以,在單片機中還必需有一個存放中間結(jié)果的區(qū)域,稱為數(shù)據(jù)存儲器。

數(shù)據(jù)存儲器具有隨機可讀、可寫的性能,稱為RAM(RandomAccessMemory)。

Atmega8單片機數(shù)據(jù)存儲器包括SRAM數(shù)據(jù)存儲器和512B的E2PROM數(shù)據(jù)存儲器。SRAM數(shù)據(jù)存儲器的空間組織結(jié)構(gòu)如圖2—6。

通用工作寄放器組R0R1R2?R29R30R31I/O存儲器空間$00$01$02?$3D$3E$3F64個32個數(shù)據(jù)存儲器空間$0000$0001$0002?$001D$001E$001F$0020$0021$0022?$005D$005E$005F內(nèi)部SRAM$0060$00611024個?$045E

圖2—6SRAM數(shù)據(jù)存儲器的空間結(jié)構(gòu)

$045F可能有同學問:在一般的計算機中,并沒有程序存儲器和數(shù)據(jù)存儲器的說法。其實,這正是單片機和一般計算機的不同之處之一。單片機在存儲空間上將程序存儲器與數(shù)據(jù)存儲器分開,這種結(jié)構(gòu)稱為哈佛(Harvard)結(jié)構(gòu)。而一般計算機中程序和數(shù)據(jù)共用一個存儲空間。

單片機的存儲器為什么要采用這種哈佛(Harvard)結(jié)構(gòu)呢?這是由單片機的應用特點所決定的。單片機往往是針對某個特定的對象和任務設(shè)計的,其程序設(shè)計成功后,一般不會再變化。因此程序(包括程序中的一些常數(shù))可以而且也應當一次性的永久地存放到單片機中,這樣不僅省去了每次開機時重新裝載程序,還可以有效地防止由于掉電和其他干擾而引起的程序丟失和錯誤。三、I/O寄放器

Atmega8所有的I/O口及外圍設(shè)備的控制寄放器、數(shù)據(jù)寄放器都被設(shè)置在I/O寄放器空間中。表2—4列出了Atmega8單片機的I/O寄放器的地址空間分派、名稱和功能。

表2—4Atmega8單片機I/O寄放器地址空間分派表十六進制地址$00($0020)$01($0021)$02($0022)$03($0023)$04($0024)$05($0025)$06($0026)$07($0027)$08($0028)$09($0029)$0A($002A)$0B($002B)$0C($002C)$0D($002D)$0E($002E)$0F($002F)名稱TWBRTWSRTWARTWDRADCLADCHADCSRADMUXACSRUBRRLUCSRBUCSRAUDRSPCRSPSRSPDR功能I2C波特率寄放器I2C狀態(tài)寄放器I2C從機寄放器I2C數(shù)據(jù)寄放器ADC數(shù)據(jù)寄放器低字節(jié)ADC數(shù)據(jù)寄放器高字節(jié)ADC控制和狀態(tài)寄放器ADC多路選擇器模擬比較控制和狀態(tài)寄放器USART波特率寄放器低8位USART控制狀態(tài)寄放器BUSART控制狀態(tài)寄放器AUSARTI/O數(shù)據(jù)寄放器SPI控制寄放器SPI狀態(tài)寄放器SPII/O數(shù)據(jù)寄放器

$10($0030)$11($0031)$12($0032)$13($0033)$14($0034)$15($0035)$16($0036)$17($0037)$18($0038)$19($0039)$1A($003A)$1B($003B)$1C($003C)$1D($003D)$1E($003E)$1F($003F)$20($0040)$21($0041)$22($0042)$23($0043)$24($0044)$25($0045)$26($0046)$27($0047)$28($0048)$29($0049)$2A($004A)$2B($004B)$2C($004C)$2D($004D)$2E($004E)$2F($004F)$30($0050)$31($0051)$32($0052)$33($0053)$34($0054)$35($0055)$36($0056)$37($0057)$38($0058)$39($0059)PINDDDRDPORTDPINCDDRCPORTCPINBDDRBPORTB(Reserved)(Reserved)(Reserved)EECREEDREEARLEEARHUCSRCUBRRHWDTCRASSROCR2TCNT2TCCR2ICR1LICR1HOCR1BLOCR1BHOCR1ALOCR1AHTCNT1LTCNT1HTCCR1BTCCR1ASFIOROSCCALTCNT0TCCR0MCUCSRMCUCRTWCRSPMCRTIFRTIMSKD端口輸入腳D端口數(shù)據(jù)方向寄放器D端口數(shù)據(jù)寄放器C端口輸入腳C端口數(shù)據(jù)方向寄放器C端口數(shù)據(jù)寄放器B端口輸入腳B端口數(shù)據(jù)方向寄放器B端口數(shù)據(jù)寄放器保存保存保存E2PROM控制寄放器E2PROM數(shù)據(jù)寄放器E2PROM地址寄放器低8位E2PROM地址寄放器高8位USART控制狀態(tài)寄放器CUSART波特率寄放器高4位看門狗定時器控制寄放器異步模式狀態(tài)寄放器T/C2輸出比較寄放器T/C2計數(shù)器T/C2控制寄放器T/C1輸入捕獲寄放器低8位T/C1輸入捕獲寄放器高8位T/C1輸出比較寄放器B低8位T/C1輸出比較寄放器B高8位T/C1輸出比較寄放器A低8位T/C1輸出比較寄放器A高8位T/C1計數(shù)器低8位T/C1計數(shù)器高8位T/C1控制寄放器BT/C1控制寄放器A特別功能I/O寄放器內(nèi)部RC振蕩器校準值寄放器T/C0計數(shù)器T/C0控制寄放器MCU控制和狀態(tài)寄放器MCU控制寄放器I2C總線控制寄放器寫程序存儲器控制寄放器T/C中斷標志寄放器T/C中斷屏蔽寄放器$3A($005A)$3B($005B)$3C($005C)$3D($005D)$3E($005E)$3F($005F)GIFRGICR(Reserved)SPLSPHSREG通用中斷控制寄放器通用中斷控制寄放器保存堆棧指針寄放器低8位堆棧指針寄放器高8位狀態(tài)寄放器§2.5時鐘電路和復位電路

一、時鐘源

單片機在執(zhí)行指令時,尋常將一條指令分解為若干基本的微操作,這些微操作對應的脈沖信號在時間上的先后次序,稱為單片機的時序。

為了保證同步工作,單片機內(nèi)部電路應在唯一的時鐘信號控制下,嚴格地依照時序進行工作。

Atmega8共有5種源,如圖2—7所示。

外部晶振CPU時鐘clkCPU外部RC振蕩器外部低頻晶振外部時鐘內(nèi)部RC晶振時鐘源選擇器I/O時鐘clkI/O主時鐘時鐘控制器Flash時鐘clkFLASHADC時鐘clkADC異步定時器時鐘clkASY

圖2—7Atmega8時鐘系統(tǒng)

具體的Atmega8應用系統(tǒng)采用哪種時鐘源,可以通過利用廣州雙龍MCU下載程序V1.3.4對Atmega8內(nèi)部的熔絲位CKSEL進行編程設(shè)置,如表2—6。

表2—5Atmega8時鐘源選擇可選擇的時鐘源外部晶振外部RC振蕩器外部低頻晶振外部時鐘內(nèi)部RC振蕩熔絲位CKSEL3,2,1,01111—10101000—0101100100000100—0001例如:采用8.000MHz內(nèi)部RC振蕩器,我們可以利用V1.3.4進行如圖2—8所示設(shè)置。

圖2—8

注意:在圖2—8中,打“√〞表示相應的CKSEL被編程,且為“0〞。1.外部晶振

Atmega8的XTAL1和XTAL2分別為片內(nèi)振蕩器的反向放大器的輸入、輸出端,可在外部連接石英晶體(對頻率要求不高時可接陶瓷晶體),構(gòu)成穩(wěn)定的自激振蕩器,產(chǎn)生一個與石英晶體固有頻率相等的時鐘信號,如圖2—9。

C2XTAL2C1XTAL1GNDATmega8

圖2—9外部晶振連接圖

圖中晶振頻率可以在0.4—16MHz之間選擇。C1、C2尋常選則容量為12~22pF的NPO電容,且使兩者的容量相等。另外,為了保證振蕩器的穩(wěn)定性,在設(shè)計電路板時,晶體、電容盡可能靠近芯片,以減少分布電容的影響。

使用外部晶振,可以通過熔絲位CKOPT選擇兩種不同的工作方式:當熔絲位CKOPT被編程時,外部晶振振蕩器輸出一個滿幅的振蕩信號,使系統(tǒng)適合在高噪聲環(huán)境下工作,或需要把從XTAL2的時鐘信號作為時鐘信號輸出;當熔絲位CKOPT未4被編程時,外部晶振振蕩器輸出一個小擺幅的振蕩信號,此時相應減少了功率消耗。但此方式的工作頻率范圍受限,而且振蕩器的輸出不能作為外部時鐘驅(qū)動使用。

外部晶振振蕩器的每種工作方式又有不同的三種模式,可以通過熔絲位

CKSEL(3、2、1)不同的編程組合來選擇,具體狀況參見表2—6。

表2—6外部晶振振蕩器不同工作模式工作方式1熔絲位工作頻率范C1、C2(使用石圍(MHz)英晶體,pF)CKOPTCKSEL(3、2、1)僅使用于陶瓷振蕩器11010.4~0.911100.9~3.012~2211113.0~8.012~2200101、110、111≤1.012~222.外部時鐘源在由多個單片機組成的系統(tǒng)中,為了保證各單片機之間時鐘信號的同步,應當引入唯一的公用外部脈沖作為各單片機的時鐘脈沖。

Atmega8采用外部時鐘源時,連接方法如圖2—10,而且要將熔絲位CKSEL編程為“0000〞。另外,通過對熔絲位CKOPT編程,可以使芯片內(nèi)部XTAL1與地之間的36pF有效。

NCXTAL2外部時鐘信號XTAL1GNDATmega8

圖2—10外部時鐘源接法

3.可校準的內(nèi)部RC振蕩器

Atmega8中集成了可校準的內(nèi)部RC振蕩電路,它可以提供固定的1.0、2.0、4.0或8.0MHz時鐘信號,對頻率要求不高時,可以作為系統(tǒng)時鐘源,從而使得系統(tǒng)硬件配置變得簡單。我們可以通過對熔絲位CKSEL編程來選用內(nèi)部RC振蕩器作為系統(tǒng)時鐘(熔絲位CKOPT應處于未編程狀態(tài)),見表2—7。

表2—7使用內(nèi)部RC振蕩器的不同工作模式熔絲位CKSEL(3、2、1、0)0001001000110100工作頻率(MHz)1.02.04.08.0注意:Atmega8芯片出廠時設(shè)置為0001由Atmega8構(gòu)成的單片機系統(tǒng)除了可以選擇以上三種時鐘源外,還可以采用外部RC振蕩器或外部低頻晶振作為系統(tǒng)時鐘源,具體使用方法參照相關(guān)的技術(shù)文件。

二、單片機的復位電路

復位功能類似預備鈴的作用,預備鈴一響,大家就自動進入教室,在這段時間里,老師還沒有開始上課。對于單片機來說,復位的時候,CPU也沒有開始執(zhí)行程序,只是做準備工作。

Atmega8單片機有4個復位源:上電復位、外部復位、看門狗復位和電源電壓檢測BOD復位。下面我們詳細介紹Atmega8的上電復位功能。

上電復位脈沖(POR)由Atmega8芯片內(nèi)部的電源檢測電路產(chǎn)生,檢測電平門限見表2—8。當系統(tǒng)電源電壓VCC低于上電復位門限電平VPOT,產(chǎn)生內(nèi)部復位脈沖,使MCU復位。

表2—8Atmega8復位特性

符號參數(shù)上電復位門限電壓(上升沿)條件最小值典型值最大值單位VPOT1.42.3V上電復位門限電壓(下降沿)1.32.3VVRST復位引腳門限電壓0.10.9V復位引腳需要的最小脈寬tRST50nsBODLEVEL=1VBOT掉電復位門限電壓2.52.73.2VBODLEVEL=03.74.04.5VTBOD掉電檢測的低電壓最小寬度BODLEVEL=12usBODLEVEL=02usVHYST掉電檢測遲滯電壓130mV當系統(tǒng)上電電壓達到上電復位門限電平VPOT時,啟動Atmega8芯片內(nèi)部一個延時計數(shù)器,由它決定Atmega8上電后保持復位狀態(tài)的時間,如圖2—11。

VPOT系統(tǒng)電源電壓VccVRST復位引腳電平t延時延遲時間內(nèi)部復位脈沖

圖2—11MCU上電復位(復位引腳接到系統(tǒng)電源VCC)

由上面的介紹可知,由于Atmega8特有的上電復位功能,在它構(gòu)成的單片機系統(tǒng)中,我們可以不用外設(shè)復位電路,只要將其復位引腳直接接到電源端即可,從而簡化了硬件電路,這也是單片機發(fā)展的方向。

Atmega8其它三種復位源,請大家參考相關(guān)的技術(shù)資料。

§2.6中斷系統(tǒng)

中斷系統(tǒng)是單片機的重要組成部分,實時控制、數(shù)據(jù)傳送、故障自動處理等往往都采用中斷系統(tǒng)。中斷系統(tǒng)的應用使單片機的功能更強、效率更高、使用更加靈活便利。本章主要介紹中斷的概念以及Atmega8單片機的中斷系統(tǒng)。一、中斷的概念:

㈠什么是中斷

所謂中斷指的是由于某中原因,使當前正在進行的工作暫時中止,改為去執(zhí)行另一項工作,待這項工作處理完后,回到原來的地方繼續(xù)以前的工作。

其實,在我們?nèi)粘I钪幸步?jīng)常發(fā)生中斷現(xiàn)象。例如:小王正在家中看書,突然響起急促的電話鈴。小王放下手中的所看的書,去聽電話。電話是他同學打來的,因兩人很久沒有聯(lián)系,自然少不了一番問候。之后,小王掛斷電話,又繼續(xù)看書。

㈡、中斷的基本術(shù)語1.主程序

主程序就是單片機中斷前所執(zhí)行的程序。上例中小王看書的過程可以理解為主程序。

2.中斷源

中斷源即引起中斷的原因或事件。上例中小王的同學是引起小王中斷看書的根本原因,因此,小王的同學是產(chǎn)生這次中斷的中斷源。

3.中斷請求信號

中斷請求信號指的是中斷源通過什么方式請求中斷。上例中小王的同學是通過電話鈴聲請求中斷的,因此,電話鈴聲是產(chǎn)生這次中斷的中斷請求信號。

4.中斷服務程序

中斷服務程序即發(fā)生中斷后所執(zhí)行的程序。上例中小王暫停看書后所做的事是接他同學的電話,因此,小王接聽電話是中斷服務程序。

5.斷點

斷點就是主程序被斷開的位置。在上例中,假設(shè)小王剛好看到第98頁時,電話鈴聲響了,小王暫??磿ソ勇犽娫挘敲吹?8頁就是斷點。

6.中斷的優(yōu)先級在同一時刻,使單片機暫停當前正在執(zhí)行程序的中斷源有可能不止一個,而每個中斷源都有自己的“份量〞,有的請求比較迫切,單片機必需盡快響應,而有的則可以等會后才響應,這就是中斷的優(yōu)先級。二、Atmega8單片機的中斷系統(tǒng)

不同型號的單片機,其硬件結(jié)構(gòu)和軟件指令有所不同,中斷系統(tǒng)也有所不同。下面我們就來看看Atmega8單片機的的中斷系統(tǒng)。

㈠中斷源

Atmega8單片機提供了18個中斷源和一個復位向量。每個中斷源在程序空間都有一個獨立的中斷向量號(地址),如表2—9所示。

表2—9Atmega8中斷源和中斷向量中斷向量號12345678910111213141516171819中斷源RESETINT0INT1TIMER2COMPTIMER2OVFTIMER1CAPTTIMER1COMPATIMER1COMPBTIMER1OVFTIMER0OVFSPI,STCUSART,RCXUSART,UDREUSART,TXCADCEE_RDYANA_COMPTWISPM_RDY中斷定義上電、外部、BOD、看門狗復位外部中斷0外部中斷1定時/計數(shù)器2比較匹配定時/計數(shù)器2溢出中斷定時/計數(shù)器1捕獲事件定時/計數(shù)器1比較匹配A定時/計數(shù)器1比較匹配B定時/計數(shù)器1溢出中斷定時/計數(shù)器0溢出中斷SPI串行傳輸完成USART,Rx完成USART,寄放器空USART,Tx完成ADC轉(zhuǎn)換完成E2PROM準備好模擬比較器兩線串行接口(I2C)寫程序存儲器準備好在這19個中斷向量中,中斷向量號越小的,其中斷優(yōu)先級別越高。

㈡與外部中斷有關(guān)寄放器

在Atmega8單片機18個中斷源中,每個中斷源都有獨立的中斷使能位,在這里我們先介紹與外部中斷有關(guān)使能位,其它(如定時/計數(shù)器溢出中斷)在相應章節(jié)中介紹。Atmega8與外部中斷有關(guān)的寄放器有MCUCR、GICR、GIFR。這三個寄放器是如何為外部中斷系統(tǒng)服務呢?具體地說,Atmega8兩個外部中斷源的中斷方式鎖存在MCUCR中。這兩個外部中斷源的中斷請求,能否得到響應,還受通用中斷控制寄放器GICR中各位的控制和狀態(tài)寄放器I位控制(I位置1,允許全局中斷,在C語言中定義為SEI())。響應中斷后的中斷標志寄放在通用中斷標志寄放器GIFR中。

1.MCU控制積存器——MCUCR

MCUCR寄放器中包含外部中斷方式控制位和一般的MCU功能控制位,每一位定義如下。

位7SER/W復位值R/W06SM2R/W05SM1R/W043210MCUCRSM0ISC11ISC10ISC01ISC00R/W0R/W0R/W0R/W0R/W0

⑴位3、2:外部中斷1的中斷方式控制位

假使狀態(tài)寄放器中的I位和中斷控制寄放器GICR中相應的中斷屏蔽位被置“1〞,外部中斷1會由引腳INT1(PD3)上電平的變化而觸發(fā)。外部中斷1的中斷方式定義如表2—10。

表2—10INT1中斷方式

位30011位20101中斷方式INT1的低電平產(chǎn)生一個中斷請求INT1的下降沿和上升沿都產(chǎn)生一個中斷請求INT1的下降沿產(chǎn)生一個中斷請求INT1的上升沿產(chǎn)生一個中斷請求我們用C語言編寫了這樣一條語句:MCUCR=0x08;其意思是外部中斷1采用INT1引腳上脈沖下降沿觸發(fā)。

⑵位1、0:外部中斷0的中斷方式控制位

假使狀態(tài)寄放器中的I位和中斷控制寄放器GICR中相應的中斷屏蔽位被置“1〞,外部中斷0會由引腳INT0(PD2)上電平的變化而觸發(fā)。外部中斷0的中斷方式定義如表2—11。

表2—11INT0中斷方式位1位0中斷方式00INT0的低電平產(chǎn)生一個中斷請求01INT0的下降沿和上升沿都產(chǎn)生一個中斷請求10INT0的下降沿產(chǎn)生一個中斷請求11INT0的上升沿產(chǎn)生一個中斷請求我們用C語言編寫了這樣一條語句:MCUCR=0x02;其意思是外部中斷0采用INT0引腳上脈沖下降沿觸發(fā)。

2.通用中斷控制寄放器—GICR

我們用GICR寄放器的控制位定義相應外部中斷使能,每一控制位的定義如下。

位7INT1R/W復位值R/W06INT0R/W05-R04-R03-R02-R010GICRIVSELIVCER/W0R/W0

⑴位7:外部中斷1使能當位7置“1〞,同時狀態(tài)寄放器SREG的I位被置“1〞時(即開啟全局中斷),外部中斷1被使能(開放)。即使INT1引腳(即PD3)被定義為輸出方式,其上的有效電平變化仍會觸發(fā)中斷。

⑵位6:外部中斷0使能當位6置“1〞,同時狀態(tài)寄放器SREG的I位被置“1〞時(即開啟全局中斷),外部中斷0被使能(開放)。即使INT0引腳(即PD2)被定義為輸出方式,其上的有效電平變化仍會觸發(fā)中斷。

3.通用中斷標志寄放器—GIFR

位765-R04-R03-R02-R01-R00-R0GIFRINTF1INTF0R/W復位值R/W0R/W0

⑴當INT1引腳(即PD3)上的有效電平觸發(fā)一個中斷請求后,GIFR寄放

器的位7會變成“1〞。假使SREG寄放器中的I位和GICR的位7被置“1〞,MCU將跳至相應的中斷處開始執(zhí)行中斷服務程序,同時硬件自動將GIFR的位7清零。假使將規(guī)律“1〞寫到GIFR的位7,該位將被清零。

⑵當INT0引腳(即PD2)上的有效電平觸發(fā)一個中斷請求后,GIFR寄放器的位6會變成“1〞。假使SREG寄放器中的I位和GICR的位6被置“1〞,MCU將跳至相應的中斷處開始執(zhí)行中斷服務程序,同時硬件自動將GIFR的位6清零。假使將規(guī)律“1〞寫到GIFR的位6,該位將被清零。三、單片機中斷處理過程

㈠中斷響應的條件單片機在運行時,將對所有中斷源按優(yōu)先級順序檢測,單片機響應中斷的條件是:

1.中斷源有中斷請求;

2.MCU開放全局中斷,即狀態(tài)寄放器SREG的I位置“1〞(用C語言編程時定義為“SEI();〞);

3.通用中斷控制寄放器GICR的相應位置“1〞。滿足以上條件,MCU一般會響應中斷。㈡中斷處理過程

中斷處理過程可以分為中斷響應、中斷處理和中斷返回3個階段。1.中斷響應

中斷響應包括保護斷點和將程序轉(zhuǎn)向中斷服務程序的向量入口。當有中斷源申請中斷時,先將這些中斷的標志位置“1〞,以便MCU采樣每一個中斷標志。MCU根據(jù)具體狀況決定是否響應中斷。假使MCU沒有更急、更重要的任務,則在執(zhí)行完當前指令后響應中斷申請。

2.中斷處理

中斷處理就是執(zhí)行中斷服務程序。3.中斷返回

中斷返回就是完成中斷服務程序后,程序返回到斷點的位置,繼續(xù)執(zhí)行原來的程序。

四、C語言編制中斷源程序

對中斷實現(xiàn)控制,實質(zhì)上就是對上面所講的幾個與中斷有關(guān)的寄放器進行管理和控制。只要將這些寄放器的相應位依照我們的要求進行狀態(tài)預置,MCU就會依照我們的意圖對中斷源進行管理和控制。

C語言編制中斷程序的要點如下:

1.程序中必需有“#include〞調(diào)用中斷頭文件的偽指令。2.MCU要開放全局中斷,即程序中要么對狀態(tài)寄放器SREG的I位置“1〞,要么在中斷程序中包含有“SEI();〞語句。一般編程時采用其次種方式。

3.相應中斷控制寄放器(如GICR)相應位置“1〞。

4.對于外部中斷源,還必需用MCUCR寄放器定義中斷方式,是低電平觸發(fā)中斷,還是下降沿,或上升沿觸發(fā)中斷。

5.聲明中斷源入口的中斷向量,書寫格式為:

#pragmainterrupt_handler中斷服務程序名_isr:中斷向量6.編制中斷服務程序,書寫格式如下:

#pragmainterrupt_handler中斷服務程序名_isr:中斷向量void中斷服務程序名_isr:中斷向量{

中斷服務程序內(nèi)容}

假使多個中斷源使用同一個中斷服務程序,可以用不同的中斷向量聲明屢屢,如INT0和INT1使用同一個中斷服務程序:#pragmainterrupt_handlerint0_isr:2#pragmainterrupt_handlerint0_isr:3voidint0_isr(void){

中斷服務程序內(nèi)容}

§2.7定時/計數(shù)器

在自動控制中,往往需要實時時鐘來實現(xiàn)定時或延時,也往往要對外部事件進行計數(shù)。下面分析定時/計數(shù)器的工作原理和Atmega8單片機的定時/計數(shù)器。一、定時/計數(shù)器的工作原理

1.定時/計數(shù)器的工作原理圖:圖2—12

振蕩器分頻器K1K2加1計數(shù)器溢出標記寄放器溢出中斷請求信號T0或T1圖2—12

定時/計數(shù)器的工作原理

2.振蕩器

振蕩器由單片機內(nèi)部元件或內(nèi)部元件與相應引腳所接的外部元件構(gòu)成,產(chǎn)生一定頻率(如8MHz)的系統(tǒng)時鐘信號clkI/O。

3.分頻器

Atmega8中由一個10位預定比例分頻器構(gòu)成,它將振蕩器所產(chǎn)生的系統(tǒng)時鐘信號按一定比例(如8或64)進行分頻,形成符合計數(shù)器使用的計數(shù)時鐘clkT。

4.T0或T1

T0或T1是來自單片機外部引腳T0或T1的時鐘信號。5.K1、K2

K1、K2是兩個由定時/計數(shù)器控制寄放器TCCR控制的模擬開關(guān)。其中,K1控制加1計數(shù)器是對內(nèi)部計數(shù)時鐘計數(shù)(或計時)還是對外部時鐘計數(shù)(或計時);K2控制加1計數(shù)器是否開始計數(shù)(或計時)。

6.加1計數(shù)器

加1計數(shù)器是定時/計數(shù)器的核心,它的基本功能就是對輸入給它的脈沖進行計數(shù)。下面談談與加1計數(shù)器的有關(guān)的幾個基本概念。

⑴計數(shù)器的容量

無論是計數(shù)還是定時,都不能無限地進行,應當有一個計數(shù)次數(shù)、定時時間長短的限制,否則單片機怎么知道計數(shù)已滿、定時時間已到呢?那么單片機中的計數(shù)器有多大容量?對于8位計數(shù)器,它的最大計數(shù)容量是28=256;對于16位計數(shù)器,它的最大計數(shù)容量是216=65536。

⑵初值

計數(shù)器存在一個最大的計數(shù)范圍、最長的定時時間。但在實際應用場合,往往不需要計數(shù)這么屢屢或定時這么長的時間。這里就涉及到計數(shù)器初值的問題。

譬如一個空杯最多能裝1000滴水,對了就溢出。但假使我想讓它滴800滴水就溢出,怎么辦呢?“烏鴉喝水〞給我們很好的啟示,只要在開始滴水之前就先往杯里放入200滴水。

對于計數(shù)器,其實也如此。譬如說一個8位的計數(shù)器,最多能計256個脈沖。假使我想讓它計156個脈沖就溢出,只要在計數(shù)開始之前在計數(shù)器中放入100個脈沖數(shù)就達到目的了。這個100就是計數(shù)器的初值。

⑶溢出

既然計數(shù)器和我們?nèi)粘J褂玫乃粯樱幸粋€最大容量的問題。因此,當計數(shù)器計數(shù)已滿時,假使還繼續(xù)往里面輸入計數(shù)脈沖,那么它就會象一個水杯裝滿水后,假使繼續(xù)往里面滴水,多余的水就會從水杯中流到地,這就是定時器的溢出。

日常生活中水杯的溢出和單片機中計數(shù)器的溢出,有一致的地方,也有不同之處。兩者不同之處表現(xiàn)在:當水杯發(fā)生溢出現(xiàn)象時,只是使多余的水流到杯外,整個杯中裝滿了水,而計數(shù)器發(fā)生溢出時,不僅把多余的脈沖“流〞到計數(shù)器外,而且會將計數(shù)器原來所計有的脈沖數(shù)全部清空;另外,水杯發(fā)生溢出后,不會自動再往杯中滴水,而計數(shù)器產(chǎn)生溢出后,它會自動從0開始計數(shù)。假使不想讓它從0開始,那么可以對它重新賦初值,從所賦的初值開始計數(shù)。二、Atmega8單片機定時/計數(shù)器

Atmega8單片機有3個定時/計數(shù)器:8位的定時/計數(shù)器0(T/C0)、16位的定時/計數(shù)器1(T/C1)、8位的定時/計數(shù)器2(T/C2)。這些定時/計數(shù)器除了能夠?qū)崿F(xiàn)尋常的定時和計數(shù)功能外,還具有捕獲、比較、脈寬調(diào)制輸出和實時時鐘計數(shù)等功能。這里我們主要介紹它們的定時/計數(shù)功能。

㈠8位定時/計數(shù)器0——T/C0

定時/計數(shù)器0是一個單通道計數(shù)器,可以實現(xiàn)定時和對外部事件計數(shù),它帶有一個10位的預定比例分頻器。下面我們看看與定時和計數(shù)有關(guān)的寄放器。

1.T/C0控制寄放器——TCCR0

位765432CS02R/W01CS01R/W00CS00R/W0TCCR0_R/WR復位值0_R0_R0_R0_R0

TCCR0主要通過不同的控制位來實現(xiàn):①計數(shù)器的開始或中止;②對內(nèi)部時鐘計數(shù)(或定時),還是對外部時鐘計數(shù)(或定時);③假使是對內(nèi)部時鐘計數(shù)(或定時),那么采用的預定分頻比例是多少。具體定義如表2—12。

表2—12T/C0時鐘源選擇位2位1位0說明000無計數(shù)時鐘源(定時/計數(shù)器中止)001采用系統(tǒng)時鐘作為計數(shù)時鐘源010采用系統(tǒng)時鐘的8分頻作為計數(shù)時鐘源011采用系統(tǒng)時鐘的64分頻作為計數(shù)時鐘源100采用系統(tǒng)時鐘的256分頻作為計數(shù)時鐘源101采用系統(tǒng)時鐘的1024分頻作為計數(shù)時鐘源110采用T0引腳輸入的外部時鐘(下降沿驅(qū)動)111采用T0引腳輸入的外部時鐘(上升沿驅(qū)動)2.T/C0中斷屏蔽寄放器——TIMSK位76543210TOIE0TIMSKR/W0OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1R/WR/WR/W0R/W0R/W0R/W0R/W0復位值0_R/W0

TIMSK主要功能之一就是控制T/C0溢出中斷是開放還是屏蔽。當該寄放器的位0置“1〞,且狀態(tài)寄放器(SREG)的I位置“1〞時,開放T/C0的溢出中斷,否則,屏蔽T/C0的溢出中斷。用C語言定義T/C0開放溢出中斷的語句如下:

TIMSK=0X01;//T/C0溢出中斷使能SEI();//全局中斷使能

3.T/C0溢出標志寄放器——TIFR

位7OCF26TOV2R/W05ICF1R/W04OCF1AR/W03OCF1BR/W02TOV1R/W010TOV0R/W0TIFR_R/W0R/WR/W復位值0

當T/C0產(chǎn)生溢出時,TIFR的位0變?yōu)椤?〞,向MCU提出溢出中斷請求,

這是假使TIMSK的位0也置“1〞(T/C0溢出中斷使能),SREG的I位置“1〞(全局中斷使能),那么MCU轉(zhuǎn)入T/C0溢出中斷向量,執(zhí)行中斷服務程序,同時TIFR的位0自動清0,為下一次產(chǎn)生溢出中斷作準備。寫入一個規(guī)律“1〞到TIFR的位0(如:TIFR=0X01),也可以將該位清0。

4.T/C0計數(shù)寄放器——TCNT0

TCNT0是一個8位寄放器,主要用于鎖存T/C0計數(shù)器所記錄的脈沖數(shù)。在用C編程時,主要利用TCNT0給計數(shù)器賦初值,如:TCNT0=0XB1;//給TCNT0賦初值B1。

㈡16位定時/計數(shù)器1——T/C1

定時/計數(shù)器1是一個真正的16位計數(shù)器,可以實現(xiàn)定時和對外部事件計數(shù)及捕獲、比較、脈寬調(diào)制輸出的功能,它帶有一個與T/C0一致的預定比例分頻器。下面我們介紹它與定時和計數(shù)有關(guān)的寄放器。

1.T/C1控制寄放器A——TCCR1A

TCCRA是一個8位寄放器,其相應的位主要用于控制Atmega8比較輸出引腳PB1、PB2的輸出行為及波形發(fā)生器的工作模式等,有關(guān)這些內(nèi)容我們在其它章節(jié)中介紹。

2.T/C1控制寄放器B——TCCR1B

位7654321CS11R/W00CS10TCCR1BR/W0ICNC1ICES1R/WR/WR/W0復位值0_R0WGM13WGM12CS12R/W0R/W0R/W0

TCCR0的位2、位1、位0的不同組合主要用來控制:①計數(shù)器的開始或中止;②對內(nèi)部時鐘計數(shù)(或定時),還是對外部時鐘計數(shù)(或定時);③假使是對內(nèi)部時鐘計數(shù)(或定時),那么采用的預定分頻比例是多少。具體定義如表2—13。

表2—13T/C1時鐘源選擇

位2位1位0說明000無計數(shù)時鐘源(定時/計數(shù)器中止)001采用系統(tǒng)時鐘作為計數(shù)時鐘源010采用系統(tǒng)時鐘的8分頻作為計數(shù)時鐘源011采用系統(tǒng)時鐘的64分頻作為計數(shù)時鐘源100采用系統(tǒng)時鐘的256分頻作為計數(shù)時鐘源101采用系統(tǒng)時鐘的1024分頻作為計數(shù)時鐘源110采用T1引腳輸入的外部時鐘(下降沿驅(qū)動)111采用T1引腳輸入的外部時鐘(上升沿驅(qū)動)2.T/C1中斷屏蔽寄放器——TIMSK位76543210TOIE0TIMSKR/W0OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1R/WR/WR/W0R/W0R/W0R/W0R/W0復位值0_R/W0

TIMSK主要功能之一就是控制T/C1溢出中斷是開放還是屏蔽。當該寄放器的位0置“1〞,且狀態(tài)寄放器(SREG)的I位置“1〞時,開放T/C1的溢出中斷,否則,屏蔽T/C1的溢出中斷。用C語言定義T/C1開放溢出中斷的語句如下:

TIMSK=0X01;//T/C1溢出中斷使能SEI();//全局中斷使能

3.T/C1溢出標志寄放器——TIFR

位7OCF2R/WR/W復位值06TOV2R/W05ICF1R/W04OCF1AR/W03OCF1BR/W02TOV1R/W010TOV0R/W0TIFR_R/W0

當T/C1產(chǎn)生溢出時,TIFR的位0變?yōu)椤?〞,向MCU提出溢出中斷請求,

這是假使TIMSK的位0也置“1〞(T/C1溢出中斷使能),SREG的I位置“1〞(全局中斷使能),那么MCU轉(zhuǎn)入T/C1溢出中斷向量,執(zhí)行中斷服務程序,同時TIFR的位0自動清0,為下一次產(chǎn)生溢出中斷作準備。寫入一個規(guī)律“1〞到TIFR的位0(如:TIFR=0X01),也可以將該位清0。

4.T/C1計數(shù)寄放器——TCNT1H和TCNT1L

TCNT0是一個16位寄放器,分為高8位計數(shù)寄放器TCNT1H和低8位計數(shù)寄放器TCNT1L,主要用于鎖存T/C1計數(shù)器所記錄的脈沖數(shù)。在用C編程時,主要利用它來給計數(shù)器賦初值,其中高8位賦給TCNT1H,低8位賦給TCNT1L如:

TCNT1H=0XFF;//給TCNT1H賦初值FFTCNT1L=0X62;//給TCNT1L賦初值62㈢8位定時/計數(shù)器2——T/C2

定時/計數(shù)器2是一個單通道計數(shù)器,可以實現(xiàn)對內(nèi)部時鐘定時和計數(shù),而不能對外部事件進行計數(shù),它帶有一個與T/C0和T/C1不同的預定比例分頻器。下面我們介紹與定時和計數(shù)有關(guān)的寄放器。

1.T/C2控制寄放器——TCCR2

位7F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論