第3章-RFID閱讀器開發(fā)基礎(chǔ)-課件_第1頁
第3章-RFID閱讀器開發(fā)基礎(chǔ)-課件_第2頁
第3章-RFID閱讀器開發(fā)基礎(chǔ)-課件_第3頁
第3章-RFID閱讀器開發(fā)基礎(chǔ)-課件_第4頁
第3章-RFID閱讀器開發(fā)基礎(chǔ)-課件_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 RFID閱讀器開發(fā)基礎(chǔ) 3.1 閱讀器電路組成 3.2 AVR單片機概述 3.3 AVR時鐘與熔絲位 3.4 AVR通用I/O口 3.5 AVR中斷 3.6 AVR定時器 3.7 AVR USART 3.8 AVR SPI 3.1 閱讀器電路組成從電路上來看,閱讀器是一個嵌入式系統(tǒng),一般由MCU控制器、射頻收發(fā)、通信接口、天線以及其他外圍電路組成,其組成如圖3-1所示。本章將首先講解閱讀器電路組成,然后講解作為閱讀器核心MCU的AVR單片機及其外圍電路。具體收發(fā)通道等會根據(jù)不同頻段RFID系統(tǒng)的需求將在后續(xù)章節(jié)進行分析和講解。 圖3-1 閱讀器組成 3.1.1 MCU及外圍電路MCU是

2、閱讀器的核心,配合外圍電路完成收發(fā)控制、向應(yīng)答器發(fā)送命令與寫數(shù)據(jù)、應(yīng)答器數(shù)據(jù)讀取與處理、與應(yīng)用系統(tǒng)的高層進行通信等任務(wù)。MCU及外圍電路的結(jié)構(gòu)如圖3-2所示。本書配套閱讀器的MCU為Atmel公司出品的AVR單片機,具體型號為Atmega16A。圖3-2 MPU及外圍電路的結(jié)構(gòu) 3.1.2 收發(fā)通道收發(fā)通道主要負責(zé)數(shù)據(jù)的鏈路和無線鏈路,由以下兩部分組成: 發(fā)送通道,包括編碼、調(diào)制和功率放大電路,用于向應(yīng)答器傳送命令和寫數(shù)據(jù)。 接收通道,包括解調(diào)、解碼電路,用于接收應(yīng)答器返回的應(yīng)答信息和數(shù)據(jù)。其收發(fā)通道電路的結(jié)構(gòu)如圖3-3所示。另外,需要注意的是在實際的電路設(shè)計中,根據(jù)應(yīng)答器的防碰撞能力的設(shè)置,

3、還應(yīng)考慮防碰撞電路的設(shè)計。圖3-3 收發(fā)通道電路的結(jié)構(gòu)3.1.3 天線閱讀器和應(yīng)答器都需要安裝天線,天線的應(yīng)用目標是取得最大的能量傳輸效果。選擇天線時,需要考慮天線類型、天線的阻抗、應(yīng)答器附著物的射頻特性、閱讀器與應(yīng)答器周圍金屬物體等因素。RFID系統(tǒng)所用的天線類型主要有偶極子天線、微帶貼片天線和線圈天線等。 偶極子天線輻射能力強,制造工藝簡單,成本低,具有全面方向性,常用于遠距離RFID系統(tǒng)。 微帶貼片天線的方向圖是定向的,工藝較復(fù)雜,成本較高。 線圈天線用于電感耦合方式的RFID系統(tǒng)中(閱讀器和應(yīng)答器之間的耦合電感線圈在這里也稱為天線)。線圈天線適用于近距離的RFID系統(tǒng),在超高頻頻段和工

4、作距離、方向不定的場合難以得到廣泛應(yīng)用。在應(yīng)答器中,天線和應(yīng)答器芯片是封裝在一起的,由于應(yīng)答器尺寸的限制,天線的小型化和微型化現(xiàn)已成為RFID系統(tǒng)性能的重要因素。近年來研制的嵌入式線圈天線、分型開槽天線、地坡面圓極化EBG(電磁帶隙)天線等新型天線為應(yīng)答器天線小型化提供了技術(shù)保證。3.2 AVR單片機概述1997年,Atmel公司挪威設(shè)計中心的A先生和V先生利用Atmel公司的Flash新技術(shù),共同研發(fā)出RISC精簡指令集高速8位單片機,簡稱AVR。AVR的單片機可以廣泛應(yīng)用于計算機外部設(shè)備、工業(yè)實時控制、儀器儀表、通信設(shè)備和家用電器等各個領(lǐng)域。3.2.1 AVR主要功能特性AVR單片機硬件結(jié)

5、構(gòu)采取8位機與16位機的折中策略,即采用局部寄存器存堆和單體高速輸入/輸出的方案,既提高了指令執(zhí)行速度,又克服了瓶頸現(xiàn)象,增強了功能。同時也減少了對外設(shè)管理的開銷,相對簡化了硬件結(jié)構(gòu),降低了成本。因而,AVR單片機在軟/硬件開銷、速度、性能和成本等諸多方面取得了優(yōu)化平衡。AVR單片機其他特點如下:哈佛結(jié)構(gòu),具備1MIPS/MHz的高速運行處理能力。超功能精簡指令集(RISC),具有32個通用工作寄存器??焖俚卮嫒〖拇嫫鹘M、單周期指令系統(tǒng),大大優(yōu)化了目標代碼的大小和執(zhí)行效率。部分型號Flash非常大,特別適用于使用高級語言進行開發(fā)。作輸出時可輸出40 mA(單一輸出);作輸入時可設(shè)置為三態(tài)高阻抗

6、輸入或帶上拉電阻輸入,具備1020 mA灌電流的能力。片內(nèi)集成多種頻率的RC振蕩器、上電自動復(fù)位、看門狗、啟動延時等功能,外圍電路更加簡單,系統(tǒng)更加穩(wěn)定可靠。大部分AVR片上資源豐富:帶EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator和WDT等。大部分AVR除了有ISP功能外,還有IAP功能,方便升級或銷毀應(yīng)用程序。3.2.2 ATmega16AATmega16A是AVR系列單片機中的一個型號,因其功能豐富、性價比高而被廣泛應(yīng)用。ATmega16A常用的有兩種封裝,分別為40引腳PDIP封裝和44引腳TQFP封裝。其中,40引腳PDIP

7、封裝如圖3-4所示,44引腳TQFP封裝如圖3-5所示。本書配套讀寫器的ATmega16A采用44引腳TQFP封裝。ATmega16A引腳功能較多,其具體說明如表3-1所示。圖3-4 40引腳PDIP封裝圖3-5 44引腳TQFP封裝 表3-1 ATmega16A 引腳說明 3.3 AVR時鐘與熔絲位AVR單片機的運行,需要有時鐘的驅(qū)動,而時鐘源的選擇需要設(shè)置相關(guān)熔絲位。3.3.1 AVR系統(tǒng)時鐘AVR有一套時鐘系統(tǒng),也有多個時鐘源可作為系統(tǒng)時鐘,這些時鐘并不需要同時工作。為了降低功耗,可以通過使用不同的睡眠模式來禁止無需工作模塊的時鐘。具體時鐘分布如圖3-6所示。上圖中涉及的時鐘功能如表3-

8、2所示。圖3-6 AVR時鐘單元 表3-2 時鐘功能說明 AVR單片機的多種時鐘源通過一個時鐘多路選擇器來驅(qū)動系統(tǒng)時鐘或用作其他功能,時鐘源的選擇需要對熔絲位進行配置。被選擇的時鐘輸入到AVR時鐘發(fā)生器,再分配到相應(yīng)模塊。AVR有六個時鐘源,分別如下: 外部晶體/陶瓷振蕩器,常用作主時鐘源,這個振蕩器可以使用石英晶體也可以使用陶瓷諧振器。XTAL1和XTAL2分別用作片內(nèi)振蕩器的反相放大器的輸入和輸出。 外部低頻振蕩器,一般用來連接32.768 kHz晶振。需要對熔絲位編程,使能XTAL1和XTAL2的內(nèi)部電容,從而除去外部電容。內(nèi)部電容的標稱數(shù)為36 pF。 外部RC振蕩器。對于時間不敏感的

9、應(yīng)用可以使用外部RC振蕩器。頻率可以通過f=1/(3RC)進行粗略的估算。電容至少需要22 pF。 標定的內(nèi)部RC振蕩器。標定的片內(nèi)RC振蕩器提供了固定的1.0、2.0、4.0或8.0 MHz的時鐘。這個時鐘也可作為系統(tǒng)時鐘。選擇這個時鐘之后就無需外部器件了。 外部時鐘。XTAL1連接外部來的時鐘信號,作為系統(tǒng)時鐘驅(qū)動整個CPU運行。XTAL2可懸空。 定時器振蕩器。對于擁有定時器/振蕩器引腳(TOSC1和TOSC2)的AVR微處理器,晶體可以直接與這兩個引腳相連,無需外部電容。此振蕩器針對32.768kHz的中標晶體作了優(yōu)化。器件出廠時,缺省設(shè)置的時鐘源是1 MHz的內(nèi)部RC振蕩器,啟動時間

10、為最長。這種設(shè)置保證用戶可以通過ISP或并行編程器得到所需的時鐘源。3.3.2 AVR熔絲位在AVR內(nèi)部有多組與器件配置和運行環(huán)境相關(guān)的熔絲位,這些熔絲位非常重要,用戶可以通過設(shè)定和配置熔絲位,使AVR具備不同的特性,以更加適合實際的應(yīng)用。ATmega16A有兩個熔絲位字節(jié),分別為熔絲位高字節(jié)和熔絲位低字節(jié)。如果熔絲位被編程則讀返回值為“0”。其中,熔絲位高字節(jié)每個Bit的定義如表3-3所示;熔絲位低字節(jié)每個Bit的定義如表3-4所示。在熔絲位中,與系統(tǒng)時鐘有關(guān)的有CKOPT和CKSEL3:0,主要用來選擇振蕩器種類和工作頻率,具體配置如表3-5所示。表3-3 熔絲位高字節(jié)定義表3-4 熔絲位

11、低字節(jié)定義 表3-5 CKOPT與CKSEL3:0的配置 CKOPT的數(shù)值決定了振蕩器輸出幅度的大小,不同振幅決定了其適應(yīng)場合的不同,具體含義如下: 在CKOPT=0時,振蕩器的輸出振幅較大,容易起振,適合在干擾大的場合以及使用晶體振蕩器超過8 MHz的情況下。 當CKOPT=1時,振蕩器的輸出振幅較小,這樣可以減少對電源的消耗,對外的電磁輻射也較小。3.4 AVR通用I/O口ATmega16A有四組通用I/O端口,分別為PORTA、PORTB、PORTC和PORTD,簡稱PA、PB、PC和PD。每組I/O端口有8個I/O管腳。這些管腳都是相互獨立的,具有真正的讀、改、寫功能。AVR通用I/O

12、口的主要特點如下: 雙向獨立位控的I/O口。每一位都可以單獨進行配置,互不影響。 大電流驅(qū)動,每個I/O口輸出采用推挽方式,最大20 mA灌電流,可直接驅(qū)動LED。 I/O端口可以復(fù)用,作為USART、SPI等外設(shè)接口。3.4.1 通用I/O口結(jié)構(gòu)AVR的通用I/O口的結(jié)構(gòu)并不復(fù)雜,其結(jié)構(gòu)如圖3-7所示。每一組I/O端口內(nèi)部配備三個8位寄存器,對應(yīng)著該組的8個引腳,分別為: 方向控制寄存器DDRx(x=A,B,C,D)。 數(shù)據(jù)寄存器PORTx(x=A,B,C,D)。 輸入引腳寄存器PINx(x=A,B,C,D)。此外,每個I/O口內(nèi)部還有一個上拉電阻。方向控制寄存器DDRx用于控制I/O口的輸

13、入輸出方向,即控制I/O口的工作方式為輸入方式還是輸出方式。圖3-7 通用I/O口結(jié)構(gòu) 當DDRx=1時,I/O口處于輸出工作方式,此時數(shù)據(jù)寄存器PORTx中的數(shù)據(jù)通過一個推挽電路輸出到外部引腳,當PORTx=1時,I/O引腳呈現(xiàn)高電平,同時可以提供輸出20 mA的電流;而當PORTx=0時,I/O引腳呈現(xiàn)低電平,同時可以吸納20 mA電流。因此,AVR的I/O口在輸出方式下提供了比較大的驅(qū)動能力,可以直接驅(qū)動LED燈小功率外圍器件。 當DDRx=0時,I/O口處于輸入方式。此時引腳寄存器PINx中的數(shù)據(jù)就是外部引腳的實際電平,通過讀PINx寄存器可以獲得外部引腳上的真實電平。在輸入方式下,P

14、ORTx可以控制使用或者不使用內(nèi)部的上拉電阻。此外,在寄存器SFIOR中,有一位稱做PUD,它是AVR全部I/O口內(nèi)部上拉電阻的總開關(guān)。當PUD=1時,AVR所有I/O內(nèi)部上拉電阻都不起作用。當PUD=0時,各個I/O口內(nèi)部的上拉電阻取決于PORTx的設(shè)置。3.4.2 通用I/O寄存器ATmega16A的四個端口都有各自對應(yīng)的三個I/O口寄存器,分別為數(shù)據(jù)寄存器PORT、數(shù)據(jù)方向寄存器DDR和輸入引腳PIN。它們占用了I/O空間的12個地址。以PA口寄存器為例,數(shù)據(jù)寄存器PORTA的具體定義如表3-6所示;數(shù)據(jù)方向寄存器DDRA的具體定義如表3-7所示;輸入引腳寄存器PINA的具體定義如表3-

15、8所示。表3-6 PORTA寄存器 表3-7 DDRA寄存器表3-8 PINA寄存器 3.4.3 通用I/O程序設(shè)計通用I/O口常用于MCU對外數(shù)據(jù)輸出和輸入,LED驅(qū)動和按鍵檢測等。下述內(nèi)容用于實現(xiàn)描述3.D.1,即使用PC7管腳交替點亮和熄滅一只LED。1. LED初始化基于模塊化和移植的考慮,可將I/O口設(shè)置子程序單獨封裝成一個子函數(shù)。例如,LED相關(guān)管腳的配置可封裝成子函數(shù)LED_Config(),具體源碼如下:【描述3.D.1】LED_Config()/* LED初始化函數(shù) */void LED_Config(void)/PC7引腳連接一個LED,低電平點亮/設(shè)置PC7為輸出DDRC

16、 |= (1PC7);/設(shè)置PC7為高電平PORTC |= (1PC7);2. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還需要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【描述3.D.1】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù)void LED_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED

17、_Config(); while(1)/點亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);單步執(zhí)行如下語句時,會看到LED亮滅轉(zhuǎn)換。while(1) /點亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);3.4.4 I/O端口第二功能AVR的I/O端口除了通用I/O功能外,大多數(shù)端口引腳都具有第二功能,使能某些引腳的第二功能,不會影響到同一端口其他引腳作為通用I/O口的功能。ATmega16A的I/O端口第二功能如表3-9所示。表3-9 I/O端口第二功能 3.5 AVR中斷AVR單片機的中斷源種類多、門類全,便于設(shè)計實時、

18、多功能、高效率的嵌入式應(yīng)用系統(tǒng)。但同時由于其功能更為強大,因此比一般8位單片機的中斷使用和控制相對復(fù)雜些。3.5.1 中斷向量AVR單片機一般擁有數(shù)十個中斷源,每個中斷源都有獨立的中斷向量。默認情況下,程序存儲器的最低端,即從Flash地址的0 x0000開始用于放置中斷向量,稱做中斷向量區(qū)。ATmega16A共有21個中斷源。默認狀態(tài)下,ATmega16A的中斷向量如表3-10所示。表3-10 ATmega16A中斷向量表 在這21個中斷中,包含1個非屏蔽中斷(RESET)、3個外部中斷(INT0、INT1、INT2)和17個內(nèi)部中斷。本節(jié)只簡要介紹RESET和外部中斷。 系統(tǒng)復(fù)位中斷RES

19、ET,也稱為系統(tǒng)復(fù)位源。RESET是一個特殊的中斷源,是AVR中唯一不可屏蔽的中斷。當ATmega16A由于各種原因被復(fù)位后,程序?qū)⑻綇?fù)位向量(默認為0 x0000)處,在該地址處通常放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到主程序繼續(xù)執(zhí)行。 INT0、INT1和INT2是三個外部中斷源,它們分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)觸發(fā)。通過對控制寄存器MCUCR和控制與狀態(tài)寄存器MCUCSR的配置定義觸發(fā)方式。3.5.2 中斷控制AVR單片機的中斷,有優(yōu)先級和屏蔽等功能和控制手段,也支持中斷的嵌套,并可以靈活地進行配置和使用。1. 中斷優(yōu)先級在AVR單片機中,一個中斷在中斷向量區(qū)的位置決定

20、了它的優(yōu)先級,即位于低地址的中斷優(yōu)先級高于位于高地址的中斷優(yōu)先級。因此,對于ATmega16A來說,復(fù)位中斷RESET具有最高優(yōu)先級,外部中斷INT0次之,而SPM_RDY的中斷優(yōu)先級最低。AVR單片機采用固定的硬件優(yōu)先級方式,不支持通過軟件對中斷優(yōu)先級的重新設(shè)定。因此,中斷優(yōu)先級的作用僅體現(xiàn)在同一時刻有兩個及兩個以上中斷源向MCU申請中斷的情況中。在這種情況下,MCU根據(jù)優(yōu)先級的不同,首先響應(yīng)其中最高優(yōu)先級的中斷,待該中斷服務(wù)程序執(zhí)行完返回后,再依次響應(yīng)優(yōu)先級較低的中斷。2. 中斷標志AVR有兩種不同機制的中斷:帶有中斷標志的中斷和不帶中斷標志的中斷。中斷標志是指每個中斷源在其I/O空間寄存

21、器中具有自己的一個中斷標志位。在AVR中,大多數(shù)的中斷都屬于帶中斷標志的中斷。中斷標志位一般在MCU響應(yīng)該中斷時由硬件自動清除,或在中斷服務(wù)程序中通過讀寫專門數(shù)據(jù)寄存器的方式自動清除。關(guān)于中斷標志,還有下述規(guī)則和情況:當中斷被禁止或MCU不能馬上響應(yīng)中斷時,則該中斷標志將會一直保持,直到中斷允許并得到響應(yīng)為止。已建立的中斷標志,實際就是一個中斷的請求信號,如果暫時不能被響應(yīng),則該中斷標志會一直保留(除非被用戶軟件清除),此時該中斷被“掛起”。如果有多個中斷被掛起,一旦中斷允許后,各個被掛起的中斷將按優(yōu)先級依次得到中斷響應(yīng)服務(wù)。在AVR中,還有個別的中斷不帶中斷標志,如配置為低電平觸發(fā)的外部中斷

22、。這類中斷只要條件滿足,就會一直向MCU發(fā)出中斷請求。如果由于等待時間過長而得不到響應(yīng),則可能因中斷條件結(jié)束而失去一次中斷服務(wù)的機會。如果這個低電平維持時間過長,則會使中斷服務(wù)完成返回后再次響應(yīng),即MCU重復(fù)響應(yīng)同一中斷的請求,進行重復(fù)服務(wù)。3. 中斷屏蔽與管理為了能夠靈活地管理中斷,AVR對中斷采用兩級控制方式。所謂兩級控制,是指AVR有一個中斷允許的總控制位I(即AVR狀態(tài)寄存器SREG中的I標志位),通常稱為全局中斷允許控制位。狀態(tài)寄存器SREG的定義如表3-11所示。其中,I位置位時,使能全局中斷,清零時則不論單獨中斷標志置位與否,都不會產(chǎn)生中斷。任一中斷發(fā)生后I清零,而執(zhí)行RETI(

23、中斷返回)指令后,I位恢復(fù)置位以使能中斷。同時,AVR為每一個中斷源都設(shè)置了獨立的中斷允許位,這些中斷允許位分散在每個中斷源所屬模塊的控制寄存器中。表3-11 狀態(tài)寄存器SREG 4. 中斷嵌套由于AVR在響應(yīng)一個中斷的過程中通過硬件將I標志位自動清0,這樣就阻止了MCU響應(yīng)其他中斷,因此通常情況下,AVR是不能自動實現(xiàn)中斷嵌套的。如果要實現(xiàn)中斷嵌套的應(yīng)用,用戶可在中斷服務(wù)程序中使用指令使能全局中斷允許位I,通過間接的方式實現(xiàn)中斷的嵌套處理。3.5.3 外部中斷ATmega16A有INT0、INT1和INT2三個外部中斷源,分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)作為中斷觸發(fā)

24、信號。1. 外部中斷觸發(fā)方式INT0、INT1和INT2的中斷觸發(fā)方式取決于用戶程序?qū)CU控制寄存器MCUCR和MCU控制與狀態(tài)寄存器MCUCSR的設(shè)定。其中,INT0和INT1支持4種中斷觸發(fā)方式,INT2支持2種,觸發(fā)方式如表3-12所示。表3-12 外部中斷觸發(fā)方式 2. 外部中斷寄存器在ATmega16A中,除了寄存器SREG中的全局中斷允許標志位I以外,與外部中斷有關(guān)的寄存器有4個,共有11個標志位,其作用分別是這三個外部中斷的中斷標志位、中斷允許控制位及定義外部中斷的觸發(fā)類型。MCU控制寄存器MCUCR的低4位為INT0(ISC01、ISC00)和INT1(ISC11、ISC10

25、)中斷觸發(fā)類型控制位。MCUCR定義如表3-13所示。INT0和INT1的中斷觸發(fā)方式定義如表3-14所示。表3-13 MCUCR定義表3-14 INT0與INT1中斷觸發(fā)方式定義 MCU控制與狀態(tài)寄存器MCUCSR中的第6位(ISC2)為INT2的中斷觸發(fā)類型控制位。MCUCSR定義如表3-15所示。INT2的中斷觸發(fā)方式如表3-16所示。通用中斷控制寄存器GICR的高3位為INT0、INT1和INT2的中斷允許控制位,其各位定義如表3-17所示。通用中斷標志寄存器GIFR的高3位為INT0、INT1和INT2的中斷標志位。GIFR各位定義如表3-18所示。表3-15 MCUCSR定義 表3

26、-16 INT2中斷觸發(fā)方式 表3-17 GICR定義 表3-18 GIFR定義 當INT0、INT1和INT2引腳上的有效事件滿足中斷觸發(fā)條件后,INTF0、INTF1和INTF2位會變成1。如果此時SREG寄存器中的I位為1,而且GICR寄存器中的INTn置1,則MCU將響應(yīng)中斷請求,跳至相應(yīng)的中斷向量處開始執(zhí)行中斷服務(wù)程序,同時硬件自動將INTFn標志清0。3.5.4 中斷程序設(shè)計外部中斷常用作檢測外部事件,如檢測按鍵的狀態(tài)。下述內(nèi)容用于實現(xiàn)描述3.D.2,即在PD2管腳連接一個按鍵,使用外部中斷檢測該按鍵并翻轉(zhuǎn)LED狀態(tài)。1. 按鍵配置出于模塊化的設(shè)計要求,可將按鍵相關(guān)管腳的配置封裝成

27、子函數(shù)SW_Config(),具體源碼如下:【描述3.D.2】 SW_Config()/* 按鍵初始化函數(shù) */void SW_Config(void)/PD2為外部中斷INT0引腳/PD2引腳連接一個按鍵,按下為低電平/設(shè)置PD2為輸入DDRD &= (1PD2);/啟用PD2的上拉電阻PORTD |= (1PD2);/設(shè)置INT0為低電平觸發(fā)中斷MCUCR &=(1ISC01) | (1ISC00);/使能INT0GICR |=(1INT0);2. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還需要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【

28、描述3.D.2】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請參考描述3.D.1void LED_Config(void);/按鍵初始化函數(shù)void SW_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED_Config();/SW初始化函數(shù)SW_Config();/開總中斷SREG |= (1 7); while(1)/等待中斷3. 中斷服

29、務(wù)函數(shù)中斷服務(wù)程序用于處理外部中斷的相關(guān)事務(wù),本例中需要將LED的顯示狀態(tài)進行翻轉(zhuǎn),詳細代碼清單如下:【描述3.D.2】 INT0_S()/* 中斷服務(wù)函數(shù) */INT0中斷服務(wù)函數(shù)#pragma vector = INT0_vect_interrupt void INT0_S(void) /每次按下按鍵,LED狀態(tài)翻轉(zhuǎn)一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);運行上述程序后,觀察開發(fā)板,每次按下相關(guān)按鍵都會看到LED的亮滅狀態(tài)隨之翻轉(zhuǎn)。3.6 AVR定時器相對于一般的8位單片機而言,AVR不僅配備了更多的定時/計數(shù)器(簡稱定時器

30、)接口,而且還是增強型的。例如,通過定時器與比較匹配寄存器互相配合,生成占空比可變的方波信號,即脈沖寬度調(diào)制輸出PWM信號,用于D/A轉(zhuǎn)換、電機無級調(diào)速和變頻控制等。3.6.1 定時器概述ATmega16A配置了兩個8位和一個16位共三個定時器。它們是8位的定時器T/C0及T/C2和16位的T/C1。它們之間的功能比較如表3-19所示。定時器原理圖如圖3-8所示。表3-19 定時器功能比較 圖3-8 定時器原理圖 1. 時鐘源與預(yù)分頻器對于定時器來說,首先需要明確的是時鐘源,不同的時鐘源決定了其定時和計數(shù)的時間間隔以及穩(wěn)定性。1) 內(nèi)部時鐘源T/C可以由內(nèi)部同步時鐘或外部異步時鐘驅(qū)動。時鐘源是

31、由時鐘選擇邏輯決定的,而時鐘選擇邏輯是由位于T/C控制寄存器TCCR0的時鐘選擇位CS02:0控制的。T/C1與T/C0雖共用一個預(yù)分頻模塊,但可以有不同的分頻設(shè)置。當CSn2:0=1時,系統(tǒng)內(nèi)部時鐘直接作為T/C的時鐘源,這也是T/C最高頻率的時鐘源fCLK_I/O,與系統(tǒng)時鐘頻率相同。預(yù)分頻器可以輸出4個不同的時鐘信號fCLK_I/O/8、fCLK_I/O/64、fCLK_I/O/256或fCLK_I/O/1024。2) 外部時鐘源由T1/T0引腳提供的外部時鐘源可以用作T/C時鐘clkT1/clkT0。引腳同步邏輯在每個系統(tǒng)時鐘周期對引腳T1/T0進行采樣。然后將同步(采樣)信號送到邊沿

32、檢測器。寄存器由內(nèi)部系統(tǒng)時鐘clkI/O的上跳沿驅(qū)動。當內(nèi)部時鐘為高時,鎖存器可以看做是透明的。2. 計數(shù)單元8位T/C0的主要功能部件為可編程的雙向計數(shù)單元。計數(shù)器單元原理圖如圖3-9所示。根據(jù)不同的工作模式,計數(shù)器針對每一個clkT0實現(xiàn)清零、加一或減一操作。其時鐘和操作有如下特點:clkT0可以由內(nèi)部時鐘源或外部時鐘源產(chǎn)生,具體由時鐘選擇位CS02:0確定。沒有選擇時鐘源時(CS02:0 = 0)定時器即停止。不管有沒有clkT0,CPU都可以訪問TCNT0。CPU寫操作比計數(shù)器其他操作(如清零、加減操作)的優(yōu)先級高。計數(shù)序列由T/C控制寄存器(TCCR0)的WGM01和WGM00決定。

33、計數(shù)器計數(shù)行為與輸出比較OC0的波形有緊密的關(guān)系。T/C的溢出中斷標志TOV0根據(jù)WGM01:0設(shè)定的工作模式來設(shè)置。TOV0可以用于產(chǎn)生CPU中斷。圖3-9 計數(shù)器單元原理圖 3. 輸出比較單元當定時器作輸出比較時,8位比較器持續(xù)對TCNT0和輸出比較寄存器OCR0進行比較。輸出比較單元結(jié)構(gòu)圖如圖3-10所示。一旦TCNT0等于OCR0,比較器就給出匹配信號,在匹配發(fā)生的下一個定時器時鐘周期輸出比較標志OCF0置位。若此時OCIE0=1且SREG的全局中斷標志I置位,CPU將產(chǎn)生輸出比較中斷。執(zhí)行中斷服務(wù)程序時,OCF0自動清零,或者通過軟件寫“1”的方式來清零。另外,根據(jù)WGM21:0和C

34、OM01:0設(shè)定的不同的工作模式,波形發(fā)生器利用匹配信號產(chǎn)生不同的波形。同時,波形發(fā)生器還利用max和bottom信號來處理極值條件下的特殊情況。圖3-10 輸出比較單元結(jié)構(gòu)圖 3.6.2 定時器工作模式AVR的定時器工作模式比較多,具體有如下幾種:普通模式。CTC(比較匹配時清零定時器)模式??焖貾WM模式。相位修正PWM模式。相位與頻率修正PWM模式。在這幾種工作模式中,普通模式為最常用的工作模式。限于篇幅,本節(jié)只介紹普通模式,其他工作模式可參考相關(guān)資料。以定時器0為例,在普通模式下計數(shù)器不停地累加,直至:計到最大值(TOP = 0 xFF),數(shù)值溢出,計數(shù)器簡單地返回到最小值0 x00并

35、重新開始。在TCNT0為零的同一個定時器時鐘里,T/C溢出標志TOV0置位。TOV0有點像第17位,只能置位,不會清零。由于定時器中斷服務(wù)程序能夠自動清零TOV0,因此可通過軟件提高定時器的分辨率。在普通模式下用戶可以隨時寫入新的計數(shù)器數(shù)值。如果定時時間太長,必須使用定時器溢出中斷或預(yù)分頻器來擴展定時范圍。3.6.3 定時器寄存器定時器寄存器是與定時器有關(guān)的寄存器。以定時器0為例,計數(shù)寄存器TCNT0的各位定義如表3-20所示。輸出比較寄存器OCR0的各位定義如表3-21所示。8位寄存器OCR0中的數(shù)據(jù)用于與寄存器TCNT0中的計數(shù)值進行匹配比較。在T/C0運行期間,比較匹配單元一直將寄存器T

36、CNT0的計數(shù)值與寄存器OCR0的內(nèi)容進行比較,一旦TCNT0的計數(shù)值與OCR0的數(shù)值匹配相等,將產(chǎn)生一個中斷申請或改變OCR0的輸出電平。定時/計數(shù)器中斷屏蔽寄存器TIMSK的各位定義如表3-22所示。表3-20 寄存器TCNT0定義 表3-21 寄存器OCR0定義 表3-22 寄存器TIMSK定義 涉及定時器的相關(guān)位定義如表3-23所示。定時器中斷標志寄存器TIFR的各位定義如表3-24所示。表3-23 相關(guān)位定義表3-24 寄存器TIFR定義 涉及定時器的相關(guān)位定義如表3-25所示。定時器控制寄存器TCCR0的各位定義如表3-26所示。表3-25 相關(guān)位定義表3-26 寄存器TCCR0定

37、義涉及定時器的相關(guān)位定義如表3-27所示。波形產(chǎn)生模式的相關(guān)定義如表3-28所示。表3-27 相關(guān)位定義 表3-28 波形產(chǎn)生模式定義 普通模式和非PWM模式(WGM=0,2)下的COM0位功能定義如表3-29所示。 快速PWM模式(WGM0=3)下的COM0位功能定義如表3-30所示。表3-29 COM0位功能定義 表3-30 COM0位功能定義相位可調(diào)PWM模式(WGM=1)下的COM0位功能定義如表3-31所示。表3-31 COM0位功能定義定時器0的時鐘源選擇如表3-32所示。表3-32 時鐘源選擇 3.6.4 定時器程序設(shè)計定時器常用作周期性事務(wù)的處理和操作,下述內(nèi)容用于實現(xiàn)描述3.

38、D.3,即使用定時器1的溢出中斷實現(xiàn)1秒定時驅(qū)動LED閃爍。1. 選擇定時器當AVR單片機晶振為8MHz(十進制),計數(shù)器的時鐘源為內(nèi)部時鐘時,需要計數(shù)8 000 000個時鐘周期才能達到定時1秒一次溢出的功能,顯然大大超過了計數(shù)器的計數(shù)范圍。實踐中采用預(yù)分頻器進行分頻,以256分頻為例,則需要的時鐘周期為8000000/256=31250若16位的計數(shù)器1的計數(shù)范圍為065 535(0 xffff),則可以達到要求。本例中可選定時器1。2. 計算計數(shù)值由于普通模式下定時器計數(shù)到0 xffff即產(chǎn)生中斷,并翻轉(zhuǎn)到0 x0000開始計數(shù),則需要每次溢出后改變定時器的計數(shù)初值,以便使其每次計數(shù)31

39、250后產(chǎn)生溢出中斷。更改定時器1的計數(shù)初值可使用如下語句:TCNT1 =0 xffff-31250;使用計算的形式可以提高程序的可讀性及避免計算錯誤,修改起來也方便。3. 定時器初始化出于模塊化的設(shè)計要求,定時器相關(guān)的配置可封裝成子函數(shù)TIM_Config(),具體源碼如下:【描述3.D.3】TIM_Config()/* 定時器初始化函數(shù) */void TIM_Config(void) /配置時鐘為clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置計數(shù)初值TCNT1 =0 xffff-31250;/開啟定時器1溢出中斷TIMSK |

40、=(1TOIE1);4. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【描述3.D.3】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請參考描述3.D.1void LED_Config(void);/定時器初始化函數(shù)void TIM_Config(void);/* 主函數(shù) */void main(v

41、oid)/LED初始化函數(shù)LED_Config();/TIM初始化函數(shù)TIM_Config();/開總中斷SREG |= (17);while(1)/等待中斷5. 中斷服務(wù)函數(shù)中斷服務(wù)程序用于處理外部中斷的相關(guān)事務(wù),本例中需要將LED的顯示狀態(tài)進行翻轉(zhuǎn),詳細代碼清單如下:【描述3.D.3】 TIMER1_ov()/* 中斷服務(wù)函數(shù) */定時器1溢出中斷服務(wù)函數(shù)#pragma vector = TIMER1_OVF_vect_interrupt void TIMER1_ov(void) /重置計數(shù)初值TCNT1 =0 xffff-31250;/每次進中斷,LED狀態(tài)翻轉(zhuǎn)一次if(PORTC&(1

42、PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);運行上述程序后,觀察開發(fā)板,將看到LED以1秒鐘改變一次亮滅的狀態(tài)進行閃爍。3.7 AVR USARTAVR中集成了一個增強型的串行接口,簡稱USART(Universal Synchronous and Asynchronous serial Receiver and Transimitter,通用同步異步串行收發(fā)器)。該接口在嵌入式系統(tǒng)中一直是重要的應(yīng)用接口,它不僅可以應(yīng)用于板級芯片之間的通信,而且更多地應(yīng)用在實現(xiàn)系統(tǒng)之間的通信和系統(tǒng)調(diào)試中。3.7.1 USART結(jié)構(gòu)ATmega16A中集成了一個全雙工通用同步

43、/異步串行收發(fā)模塊USART,其原理圖如圖3-11所示。USART收發(fā)模塊分為三大部分:時鐘發(fā)生器、數(shù)據(jù)發(fā)送器和數(shù)據(jù)接收器。其各自功能如下: 時鐘發(fā)生器主要為發(fā)送器和接收器提供基本的時鐘。USART支持四種時鐘工作模式:普通異步模式、雙倍速異步模式、主機同步模式和從機同步模式。 數(shù)據(jù)發(fā)送器將MCU內(nèi)部的并行數(shù)據(jù)根據(jù)串口波特率串行逐位送出。圖3-11 USART原理圖 數(shù)據(jù)接收器將外部收到的串行數(shù)據(jù)根據(jù)波特率逐位送入MCU并存儲。整個USART模塊受UCSRA、UCSRB和UCSRC三個寄存器的控制。3.7.2 USART寄存器USART數(shù)據(jù)寄存器UDR的各位定義如表3-33所示。UDR寄存器實

44、際上由兩個物理上分離的寄存器RXB、TXB構(gòu)成,它們使用相同的I/O地址: 寫UDR的操作,是將發(fā)送的數(shù)據(jù)寫入到寄存器TXB中。 讀UDR的操作,讀取的是接收寄存器RXB的內(nèi)容。當設(shè)定使用5、6或7位的數(shù)字幀時,高位未用到的位在發(fā)送時被忽略,在接收時由硬件自動清零。表3-33 寄存器UDR定義 只有在UCSRA寄存器中的UDRE為1時(數(shù)據(jù)寄存器空),UDR才能被寫入,否則寫入的數(shù)據(jù)將被USART忽略。在發(fā)送使能情況下,寫入UDR的數(shù)據(jù)將進入發(fā)送器的移位寄存器,由引腳TXD串行移出。USART控制和狀態(tài)寄存器UCSRA的各位定義如表3-34所示,其中每一位的具體含義如表3-35所示。USART

45、控制和狀態(tài)寄存器UCSRB的各位定義如表3-36所示,其中每一位的具體含義如表3-37所示。表3-34 寄存器UCSRA定義 表3-35 位 含 義 表3-36 寄存器UCSRB定義 表3-37 位 含 義 USART控制和狀態(tài)寄存器UCSRC的各位定義如表3-38所示,其中每一位的具體含義如表3-39所示。UPM設(shè)置涉及兩位,具體定義如表3-40所示。UCSZ設(shè)置涉及三位,具體定義如表3-41所示。 USART 波特率寄存器UBRRL和UBRRH的設(shè)置如表3-42所示。表3-38 寄存器UCSRC定義 表3-39 位 含 義 表3-40 UPM設(shè)置 表3-41 UCSZ設(shè)置 表3-42 寄存

46、器UBRRL和UBRRH設(shè)置 12位的USART波特率寄存器包含了USART的波特率信息。其中,UBRRH包含了USART波特率的高4位,UBRRL包含了低8位。波特率的改變將造成正在進行的數(shù)據(jù)傳輸受到破壞。寫UBRRL將立即更新波特率分頻器。對標準晶振及諧振器頻率來說,異步模式下最常用的波特率可通過寄存器UBRR的設(shè)置來產(chǎn)生。波特率與目標波特率的偏差不應(yīng)超過0.5%,更高的誤差雖然也可以接受,但發(fā)送器的抗噪性會降低,特別是需要傳輸大量數(shù)據(jù)時。以常用的8MHz晶振和7.3728MHz晶振為例,其波特率和誤差表如表3-43所示。表3-43 波特率和誤差表 3.7.3 USART程序設(shè)計USART

47、接口經(jīng)過電平轉(zhuǎn)換后,常用作與PC的通信。下述內(nèi)容用于實現(xiàn)描述3.D.4,即配置USART波特率為115 200,使用中斷法對PC發(fā)來的數(shù)據(jù)進行回顯,并驅(qū)動LED狀態(tài)翻轉(zhuǎn)。1. USART配置出于模塊化的設(shè)計要求,USART相關(guān)的配置可封裝成子函數(shù)USART_Config(),具體源碼如下:【描述3.D.4】USART_Config()/* USART初始化函數(shù) */void USART_Config(void) /USART倍速發(fā)送UCSRA |=(1U2X);/選擇UCSRC寄存器,字符長度8位UCSRC |=(1URSEL)|(1UCSZ1)|(1UCSZ0);/異步模式,無檢驗,1位停止

48、位UCSRC &= (1UMSEL)|(1UPM1)|(1UPM0)|(1USBS);/選擇UBRRH寄存器UBRRH &=(1URSEL);/晶振7.3728,波特率115200UBRRH =0;UBRRL =7;/接收中斷使能UCSRB |=(1RXCIE);/USART接收和發(fā)送使能UCSRB |=(1RXEN)|(1TXEN);2. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【描述3.D.4】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BI

49、T_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請參考描述3.D.1void LED_Config(void);/USART初始化函數(shù)void USART_Config(void);/* 主函數(shù) */void main(void)/LED初始化函數(shù)LED_Config();/USART初始化函數(shù)USART_Config();/開總中斷SREG |= (1 7);while(1)/等待中斷3. 中斷服務(wù)函數(shù)中斷服務(wù)程序用于處理外部中斷的相關(guān)事務(wù),本例中需要將USART收到的數(shù)據(jù)原樣返回,進行回

50、顯,并驅(qū)動LED的顯示狀態(tài)進行翻轉(zhuǎn),詳細代碼清單如下:【描述3.D.4】USART_RX()/* 中斷服務(wù)函數(shù) */USART接收中斷服務(wù)函數(shù)#pragma vector = USART_RXC_vect _interrupt void USART_RX(void) char cn;/緩存USART接收到的數(shù)據(jù)cn =UDR;/將緩存的數(shù)據(jù)發(fā)送,進行回顯UDR =cn;/每次進中斷,LED狀態(tài)翻轉(zhuǎn)一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);連接好串口線后運行程序,AVR的串口將收到的字符送回到超級串口上,如果發(fā)送的字符為“12345

51、67”,則回顯字符如圖3-12所示。同時,LED會根據(jù)收到的字符數(shù)目進行閃爍。圖3-12 串口回顯數(shù)據(jù) 3.8 AVR SPI串行外設(shè)接口(Serial Perpheral Interface,SPI)是摩托羅拉公司開發(fā)的全雙工同步串行總線。該總線主要用于近距離低速的同步串行數(shù)據(jù)傳輸,如EEPROM、FLASH、晶屏和SD卡等器件。AVR的SPI是采用硬件方式實現(xiàn)面向字節(jié)的全雙工三線同步通信接口,它支持主機、從機模式及四種不同傳輸模式的SPI時序,通信速率有7種選擇。同時,AVR內(nèi)部的SPI接口也被用作對芯片內(nèi)部的程序存儲器和數(shù)據(jù)EEPROM的編程下載口。3.8.1 SPI結(jié)構(gòu)ATmega16A的同步串行SPI接口允許在芯片與外設(shè)或幾個AVR之間,采用與標準SPI接口協(xié)議兼容的方式進行高速的同步數(shù)據(jù)傳輸,其主要特征如下:全雙工、三線同步數(shù)據(jù)傳輸??蛇x擇的主/

溫馨提示

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

評論

0/150

提交評論