版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 RFID閱讀器開發(fā)基礎(chǔ) 3.1 閱讀器電路組成 3.2 AVR單片機(jī)概述 3.3 AVR時(shí)鐘與熔絲位 3.4 AVR通用I/O口 3.5 AVR中斷 3.6 AVR定時(shí)器 3.7 AVR USART 3.8 AVR SPI 3.1 閱讀器電路組成從電路上來(lái)看,閱讀器是一個(gè)嵌入式系統(tǒng),一般由MCU控制器、射頻收發(fā)、通信接口、天線以及其他外圍電路組成,其組成如圖3-1所示。本章將首先講解閱讀器電路組成,然后講解作為閱讀器核心MCU的AVR單片機(jī)及其外圍電路。具體收發(fā)通道等會(huì)根據(jù)不同頻段RFID系統(tǒng)的需求將在后續(xù)章節(jié)進(jìn)行分析和講解。 圖3-1 閱讀器組成 3.1.1 MCU及外圍電路MCU是
2、閱讀器的核心,配合外圍電路完成收發(fā)控制、向應(yīng)答器發(fā)送命令與寫數(shù)據(jù)、應(yīng)答器數(shù)據(jù)讀取與處理、與應(yīng)用系統(tǒng)的高層進(jìn)行通信等任務(wù)。MCU及外圍電路的結(jié)構(gòu)如圖3-2所示。本書配套閱讀器的MCU為Atmel公司出品的AVR單片機(jī),具體型號(hào)為Atmega16A。圖3-2 MPU及外圍電路的結(jié)構(gòu) 3.1.2 收發(fā)通道收發(fā)通道主要負(fù)責(zé)數(shù)據(jù)的鏈路和無(wú)線鏈路,由以下兩部分組成: 發(fā)送通道,包括編碼、調(diào)制和功率放大電路,用于向應(yīng)答器傳送命令和寫數(shù)據(jù)。 接收通道,包括解調(diào)、解碼電路,用于接收應(yīng)答器返回的應(yīng)答信息和數(shù)據(jù)。其收發(fā)通道電路的結(jié)構(gòu)如圖3-3所示。另外,需要注意的是在實(shí)際的電路設(shè)計(jì)中,根據(jù)應(yīng)答器的防碰撞能力的設(shè)置,
3、還應(yīng)考慮防碰撞電路的設(shè)計(jì)。圖3-3 收發(fā)通道電路的結(jié)構(gòu)3.1.3 天線閱讀器和應(yīng)答器都需要安裝天線,天線的應(yīng)用目標(biāo)是取得最大的能量傳輸效果。選擇天線時(shí),需要考慮天線類型、天線的阻抗、應(yīng)答器附著物的射頻特性、閱讀器與應(yīng)答器周圍金屬物體等因素。RFID系統(tǒng)所用的天線類型主要有偶極子天線、微帶貼片天線和線圈天線等。 偶極子天線輻射能力強(qiáng),制造工藝簡(jiǎn)單,成本低,具有全面方向性,常用于遠(yuǎn)距離RFID系統(tǒng)。 微帶貼片天線的方向圖是定向的,工藝較復(fù)雜,成本較高。 線圈天線用于電感耦合方式的RFID系統(tǒng)中(閱讀器和應(yīng)答器之間的耦合電感線圈在這里也稱為天線)。線圈天線適用于近距離的RFID系統(tǒng),在超高頻頻段和工
4、作距離、方向不定的場(chǎng)合難以得到廣泛應(yīng)用。在應(yīng)答器中,天線和應(yīng)答器芯片是封裝在一起的,由于應(yīng)答器尺寸的限制,天線的小型化和微型化現(xiàn)已成為RFID系統(tǒng)性能的重要因素。近年來(lái)研制的嵌入式線圈天線、分型開槽天線、地坡面圓極化EBG(電磁帶隙)天線等新型天線為應(yīng)答器天線小型化提供了技術(shù)保證。3.2 AVR單片機(jī)概述1997年,Atmel公司挪威設(shè)計(jì)中心的A先生和V先生利用Atmel公司的Flash新技術(shù),共同研發(fā)出RISC精簡(jiǎn)指令集高速8位單片機(jī),簡(jiǎn)稱AVR。AVR的單片機(jī)可以廣泛應(yīng)用于計(jì)算機(jī)外部設(shè)備、工業(yè)實(shí)時(shí)控制、儀器儀表、通信設(shè)備和家用電器等各個(gè)領(lǐng)域。3.2.1 AVR主要功能特性AVR單片機(jī)硬件結(jié)
5、構(gòu)采取8位機(jī)與16位機(jī)的折中策略,即采用局部寄存器存堆和單體高速輸入/輸出的方案,既提高了指令執(zhí)行速度,又克服了瓶頸現(xiàn)象,增強(qiáng)了功能。同時(shí)也減少了對(duì)外設(shè)管理的開銷,相對(duì)簡(jiǎn)化了硬件結(jié)構(gòu),降低了成本。因而,AVR單片機(jī)在軟/硬件開銷、速度、性能和成本等諸多方面取得了優(yōu)化平衡。AVR單片機(jī)其他特點(diǎn)如下:哈佛結(jié)構(gòu),具備1MIPS/MHz的高速運(yùn)行處理能力。超功能精簡(jiǎn)指令集(RISC),具有32個(gè)通用工作寄存器??焖俚卮嫒〖拇嫫鹘M、單周期指令系統(tǒng),大大優(yōu)化了目標(biāo)代碼的大小和執(zhí)行效率。部分型號(hào)Flash非常大,特別適用于使用高級(jí)語(yǔ)言進(jìn)行開發(fā)。作輸出時(shí)可輸出40 mA(單一輸出);作輸入時(shí)可設(shè)置為三態(tài)高阻抗
6、輸入或帶上拉電阻輸入,具備1020 mA灌電流的能力。片內(nèi)集成多種頻率的RC振蕩器、上電自動(dòng)復(fù)位、看門狗、啟動(dòng)延時(shí)等功能,外圍電路更加簡(jiǎn)單,系統(tǒng)更加穩(wěn)定可靠。大部分AVR片上資源豐富:帶EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator和WDT等。大部分AVR除了有ISP功能外,還有IAP功能,方便升級(jí)或銷毀應(yīng)用程序。3.2.2 ATmega16AATmega16A是AVR系列單片機(jī)中的一個(gè)型號(hào),因其功能豐富、性價(jià)比高而被廣泛應(yīng)用。ATmega16A常用的有兩種封裝,分別為40引腳PDIP封裝和44引腳TQFP封裝。其中,40引腳PDIP
7、封裝如圖3-4所示,44引腳TQFP封裝如圖3-5所示。本書配套讀寫器的ATmega16A采用44引腳TQFP封裝。ATmega16A引腳功能較多,其具體說(shuō)明如表3-1所示。圖3-4 40引腳PDIP封裝圖3-5 44引腳TQFP封裝 表3-1 ATmega16A 引腳說(shuō)明 3.3 AVR時(shí)鐘與熔絲位AVR單片機(jī)的運(yùn)行,需要有時(shí)鐘的驅(qū)動(dòng),而時(shí)鐘源的選擇需要設(shè)置相關(guān)熔絲位。3.3.1 AVR系統(tǒng)時(shí)鐘AVR有一套時(shí)鐘系統(tǒng),也有多個(gè)時(shí)鐘源可作為系統(tǒng)時(shí)鐘,這些時(shí)鐘并不需要同時(shí)工作。為了降低功耗,可以通過(guò)使用不同的睡眠模式來(lái)禁止無(wú)需工作模塊的時(shí)鐘。具體時(shí)鐘分布如圖3-6所示。上圖中涉及的時(shí)鐘功能如表3-
8、2所示。圖3-6 AVR時(shí)鐘單元 表3-2 時(shí)鐘功能說(shuō)明 AVR單片機(jī)的多種時(shí)鐘源通過(guò)一個(gè)時(shí)鐘多路選擇器來(lái)驅(qū)動(dòng)系統(tǒng)時(shí)鐘或用作其他功能,時(shí)鐘源的選擇需要對(duì)熔絲位進(jìn)行配置。被選擇的時(shí)鐘輸入到AVR時(shí)鐘發(fā)生器,再分配到相應(yīng)模塊。AVR有六個(gè)時(shí)鐘源,分別如下: 外部晶體/陶瓷振蕩器,常用作主時(shí)鐘源,這個(gè)振蕩器可以使用石英晶體也可以使用陶瓷諧振器。XTAL1和XTAL2分別用作片內(nèi)振蕩器的反相放大器的輸入和輸出。 外部低頻振蕩器,一般用來(lái)連接32.768 kHz晶振。需要對(duì)熔絲位編程,使能XTAL1和XTAL2的內(nèi)部電容,從而除去外部電容。內(nèi)部電容的標(biāo)稱數(shù)為36 pF。 外部RC振蕩器。對(duì)于時(shí)間不敏感的
9、應(yīng)用可以使用外部RC振蕩器。頻率可以通過(guò)f=1/(3RC)進(jìn)行粗略的估算。電容至少需要22 pF。 標(biāo)定的內(nèi)部RC振蕩器。標(biāo)定的片內(nèi)RC振蕩器提供了固定的1.0、2.0、4.0或8.0 MHz的時(shí)鐘。這個(gè)時(shí)鐘也可作為系統(tǒng)時(shí)鐘。選擇這個(gè)時(shí)鐘之后就無(wú)需外部器件了。 外部時(shí)鐘。XTAL1連接外部來(lái)的時(shí)鐘信號(hào),作為系統(tǒng)時(shí)鐘驅(qū)動(dòng)整個(gè)CPU運(yùn)行。XTAL2可懸空。 定時(shí)器振蕩器。對(duì)于擁有定時(shí)器/振蕩器引腳(TOSC1和TOSC2)的AVR微處理器,晶體可以直接與這兩個(gè)引腳相連,無(wú)需外部電容。此振蕩器針對(duì)32.768kHz的中標(biāo)晶體作了優(yōu)化。器件出廠時(shí),缺省設(shè)置的時(shí)鐘源是1 MHz的內(nèi)部RC振蕩器,啟動(dòng)時(shí)間
10、為最長(zhǎng)。這種設(shè)置保證用戶可以通過(guò)ISP或并行編程器得到所需的時(shí)鐘源。3.3.2 AVR熔絲位在AVR內(nèi)部有多組與器件配置和運(yùn)行環(huán)境相關(guān)的熔絲位,這些熔絲位非常重要,用戶可以通過(guò)設(shè)定和配置熔絲位,使AVR具備不同的特性,以更加適合實(shí)際的應(yīng)用。ATmega16A有兩個(gè)熔絲位字節(jié),分別為熔絲位高字節(jié)和熔絲位低字節(jié)。如果熔絲位被編程則讀返回值為“0”。其中,熔絲位高字節(jié)每個(gè)Bit的定義如表3-3所示;熔絲位低字節(jié)每個(gè)Bit的定義如表3-4所示。在熔絲位中,與系統(tǒng)時(shí)鐘有關(guān)的有CKOPT和CKSEL3:0,主要用來(lái)選擇振蕩器種類和工作頻率,具體配置如表3-5所示。表3-3 熔絲位高字節(jié)定義表3-4 熔絲位
11、低字節(jié)定義 表3-5 CKOPT與CKSEL3:0的配置 CKOPT的數(shù)值決定了振蕩器輸出幅度的大小,不同振幅決定了其適應(yīng)場(chǎng)合的不同,具體含義如下: 在CKOPT=0時(shí),振蕩器的輸出振幅較大,容易起振,適合在干擾大的場(chǎng)合以及使用晶體振蕩器超過(guò)8 MHz的情況下。 當(dāng)CKOPT=1時(shí),振蕩器的輸出振幅較小,這樣可以減少對(duì)電源的消耗,對(duì)外的電磁輻射也較小。3.4 AVR通用I/O口ATmega16A有四組通用I/O端口,分別為PORTA、PORTB、PORTC和PORTD,簡(jiǎn)稱PA、PB、PC和PD。每組I/O端口有8個(gè)I/O管腳。這些管腳都是相互獨(dú)立的,具有真正的讀、改、寫功能。AVR通用I/O
12、口的主要特點(diǎn)如下: 雙向獨(dú)立位控的I/O口。每一位都可以單獨(dú)進(jìn)行配置,互不影響。 大電流驅(qū)動(dòng),每個(gè)I/O口輸出采用推挽方式,最大20 mA灌電流,可直接驅(qū)動(dòng)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)部配備三個(gè)8位寄存器,對(duì)應(yīng)著該組的8個(gè)引腳,分別為: 方向控制寄存器DDRx(x=A,B,C,D)。 數(shù)據(jù)寄存器PORTx(x=A,B,C,D)。 輸入引腳寄存器PINx(x=A,B,C,D)。此外,每個(gè)I/O口內(nèi)部還有一個(gè)上拉電阻。方向控制寄存器DDRx用于控制I/O口的輸
13、入輸出方向,即控制I/O口的工作方式為輸入方式還是輸出方式。圖3-7 通用I/O口結(jié)構(gòu) 當(dāng)DDRx=1時(shí),I/O口處于輸出工作方式,此時(shí)數(shù)據(jù)寄存器PORTx中的數(shù)據(jù)通過(guò)一個(gè)推挽電路輸出到外部引腳,當(dāng)PORTx=1時(shí),I/O引腳呈現(xiàn)高電平,同時(shí)可以提供輸出20 mA的電流;而當(dāng)PORTx=0時(shí),I/O引腳呈現(xiàn)低電平,同時(shí)可以吸納20 mA電流。因此,AVR的I/O口在輸出方式下提供了比較大的驅(qū)動(dòng)能力,可以直接驅(qū)動(dòng)LED燈小功率外圍器件。 當(dāng)DDRx=0時(shí),I/O口處于輸入方式。此時(shí)引腳寄存器PINx中的數(shù)據(jù)就是外部引腳的實(shí)際電平,通過(guò)讀PINx寄存器可以獲得外部引腳上的真實(shí)電平。在輸入方式下,P
14、ORTx可以控制使用或者不使用內(nèi)部的上拉電阻。此外,在寄存器SFIOR中,有一位稱做PUD,它是AVR全部I/O口內(nèi)部上拉電阻的總開關(guān)。當(dāng)PUD=1時(shí),AVR所有I/O內(nèi)部上拉電阻都不起作用。當(dāng)PUD=0時(shí),各個(gè)I/O口內(nèi)部的上拉電阻取決于PORTx的設(shè)置。3.4.2 通用I/O寄存器ATmega16A的四個(gè)端口都有各自對(duì)應(yīng)的三個(gè)I/O口寄存器,分別為數(shù)據(jù)寄存器PORT、數(shù)據(jù)方向寄存器DDR和輸入引腳PIN。它們占用了I/O空間的12個(gè)地址。以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è)計(jì)通用I/O口常用于MCU對(duì)外數(shù)據(jù)輸出和輸入,LED驅(qū)動(dòng)和按鍵檢測(cè)等。下述內(nèi)容用于實(shí)現(xiàn)描述3.D.1,即使用PC7管腳交替點(diǎn)亮和熄滅一只LED。1. LED初始化基于模塊化和移植的考慮,可將I/O口設(shè)置子程序單獨(dú)封裝成一個(gè)子函數(shù)。例如,LED相關(guān)管腳的配置可封裝成子函數(shù)LED_Config(),具體源碼如下:【描述3.D.1】LED_Config()/* LED初始化函數(shù) */void LED_Config(void)/PC7引腳連接一個(gè)LED,低電平點(diǎn)亮/設(shè)置PC7為輸出DDRC
16、 |= (1PC7);/設(shè)置PC7為高電平PORTC |= (1PC7);2. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還需要定義一些必需的宏定義和頭文件等,詳細(xì)代碼清單如下:【描述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)/點(diǎn)亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);單步執(zhí)行如下語(yǔ)句時(shí),會(huì)看到LED亮滅轉(zhuǎn)換。while(1) /點(diǎn)亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);3.4.4 I/O端口第二功能AVR的I/O端口除了通用I/O功能外,大多數(shù)端口引腳都具有第二功能,使能某些引腳的第二功能,不會(huì)影響到同一端口其他引腳作為通用I/O口的功能。ATmega16A的I/O端口第二功能如表3-9所示。表3-9 I/O端口第二功能 3.5 AVR中斷AVR單片機(jī)的中斷源種類多、門類全,便于設(shè)計(jì)實(shí)時(shí)、
18、多功能、高效率的嵌入式應(yīng)用系統(tǒng)。但同時(shí)由于其功能更為強(qiáng)大,因此比一般8位單片機(jī)的中斷使用和控制相對(duì)復(fù)雜些。3.5.1 中斷向量AVR單片機(jī)一般擁有數(shù)十個(gè)中斷源,每個(gè)中斷源都有獨(dú)立的中斷向量。默認(rèn)情況下,程序存儲(chǔ)器的最低端,即從Flash地址的0 x0000開始用于放置中斷向量,稱做中斷向量區(qū)。ATmega16A共有21個(gè)中斷源。默認(rèn)狀態(tài)下,ATmega16A的中斷向量如表3-10所示。表3-10 ATmega16A中斷向量表 在這21個(gè)中斷中,包含1個(gè)非屏蔽中斷(RESET)、3個(gè)外部中斷(INT0、INT1、INT2)和17個(gè)內(nèi)部中斷。本節(jié)只簡(jiǎn)要介紹RESET和外部中斷。 系統(tǒng)復(fù)位中斷RES
19、ET,也稱為系統(tǒng)復(fù)位源。RESET是一個(gè)特殊的中斷源,是AVR中唯一不可屏蔽的中斷。當(dāng)ATmega16A由于各種原因被復(fù)位后,程序?qū)⑻綇?fù)位向量(默認(rèn)為0 x0000)處,在該地址處通常放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到主程序繼續(xù)執(zhí)行。 INT0、INT1和INT2是三個(gè)外部中斷源,它們分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)觸發(fā)。通過(guò)對(duì)控制寄存器MCUCR和控制與狀態(tài)寄存器MCUCSR的配置定義觸發(fā)方式。3.5.2 中斷控制AVR單片機(jī)的中斷,有優(yōu)先級(jí)和屏蔽等功能和控制手段,也支持中斷的嵌套,并可以靈活地進(jìn)行配置和使用。1. 中斷優(yōu)先級(jí)在AVR單片機(jī)中,一個(gè)中斷在中斷向量區(qū)的位置決定
20、了它的優(yōu)先級(jí),即位于低地址的中斷優(yōu)先級(jí)高于位于高地址的中斷優(yōu)先級(jí)。因此,對(duì)于ATmega16A來(lái)說(shuō),復(fù)位中斷RESET具有最高優(yōu)先級(jí),外部中斷INT0次之,而SPM_RDY的中斷優(yōu)先級(jí)最低。AVR單片機(jī)采用固定的硬件優(yōu)先級(jí)方式,不支持通過(guò)軟件對(duì)中斷優(yōu)先級(jí)的重新設(shè)定。因此,中斷優(yōu)先級(jí)的作用僅體現(xiàn)在同一時(shí)刻有兩個(gè)及兩個(gè)以上中斷源向MCU申請(qǐng)中斷的情況中。在這種情況下,MCU根據(jù)優(yōu)先級(jí)的不同,首先響應(yīng)其中最高優(yōu)先級(jí)的中斷,待該中斷服務(wù)程序執(zhí)行完返回后,再依次響應(yīng)優(yōu)先級(jí)較低的中斷。2. 中斷標(biāo)志AVR有兩種不同機(jī)制的中斷:帶有中斷標(biāo)志的中斷和不帶中斷標(biāo)志的中斷。中斷標(biāo)志是指每個(gè)中斷源在其I/O空間寄存
21、器中具有自己的一個(gè)中斷標(biāo)志位。在AVR中,大多數(shù)的中斷都屬于帶中斷標(biāo)志的中斷。中斷標(biāo)志位一般在MCU響應(yīng)該中斷時(shí)由硬件自動(dòng)清除,或在中斷服務(wù)程序中通過(guò)讀寫專門數(shù)據(jù)寄存器的方式自動(dòng)清除。關(guān)于中斷標(biāo)志,還有下述規(guī)則和情況:當(dāng)中斷被禁止或MCU不能馬上響應(yīng)中斷時(shí),則該中斷標(biāo)志將會(huì)一直保持,直到中斷允許并得到響應(yīng)為止。已建立的中斷標(biāo)志,實(shí)際就是一個(gè)中斷的請(qǐng)求信號(hào),如果暫時(shí)不能被響應(yīng),則該中斷標(biāo)志會(huì)一直保留(除非被用戶軟件清除),此時(shí)該中斷被“掛起”。如果有多個(gè)中斷被掛起,一旦中斷允許后,各個(gè)被掛起的中斷將按優(yōu)先級(jí)依次得到中斷響應(yīng)服務(wù)。在AVR中,還有個(gè)別的中斷不帶中斷標(biāo)志,如配置為低電平觸發(fā)的外部中斷
22、。這類中斷只要條件滿足,就會(huì)一直向MCU發(fā)出中斷請(qǐng)求。如果由于等待時(shí)間過(guò)長(zhǎng)而得不到響應(yīng),則可能因中斷條件結(jié)束而失去一次中斷服務(wù)的機(jī)會(huì)。如果這個(gè)低電平維持時(shí)間過(guò)長(zhǎng),則會(huì)使中斷服務(wù)完成返回后再次響應(yīng),即MCU重復(fù)響應(yīng)同一中斷的請(qǐng)求,進(jìn)行重復(fù)服務(wù)。3. 中斷屏蔽與管理為了能夠靈活地管理中斷,AVR對(duì)中斷采用兩級(jí)控制方式。所謂兩級(jí)控制,是指AVR有一個(gè)中斷允許的總控制位I(即AVR狀態(tài)寄存器SREG中的I標(biāo)志位),通常稱為全局中斷允許控制位。狀態(tài)寄存器SREG的定義如表3-11所示。其中,I位置位時(shí),使能全局中斷,清零時(shí)則不論單獨(dú)中斷標(biāo)志置位與否,都不會(huì)產(chǎn)生中斷。任一中斷發(fā)生后I清零,而執(zhí)行RETI(
23、中斷返回)指令后,I位恢復(fù)置位以使能中斷。同時(shí),AVR為每一個(gè)中斷源都設(shè)置了獨(dú)立的中斷允許位,這些中斷允許位分散在每個(gè)中斷源所屬模塊的控制寄存器中。表3-11 狀態(tài)寄存器SREG 4. 中斷嵌套由于AVR在響應(yīng)一個(gè)中斷的過(guò)程中通過(guò)硬件將I標(biāo)志位自動(dòng)清0,這樣就阻止了MCU響應(yīng)其他中斷,因此通常情況下,AVR是不能自動(dòng)實(shí)現(xiàn)中斷嵌套的。如果要實(shí)現(xiàn)中斷嵌套的應(yīng)用,用戶可在中斷服務(wù)程序中使用指令使能全局中斷允許位I,通過(guò)間接的方式實(shí)現(xiàn)中斷的嵌套處理。3.5.3 外部中斷ATmega16A有INT0、INT1和INT2三個(gè)外部中斷源,分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態(tài)作為中斷觸發(fā)
24、信號(hào)。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中的全局中斷允許標(biāo)志位I以外,與外部中斷有關(guān)的寄存器有4個(gè),共有11個(gè)標(biāo)志位,其作用分別是這三個(gè)外部中斷的中斷標(biāo)志位、中斷允許控制位及定義外部中斷的觸發(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所示。通用中斷標(biāo)志寄存器GIFR的高3位為INT0、INT1和INT2的中斷標(biāo)志位。GIFR各位定義如表3-18所示。表3-15 MCUCSR定義 表3
26、-16 INT2中斷觸發(fā)方式 表3-17 GICR定義 表3-18 GIFR定義 當(dāng)INT0、INT1和INT2引腳上的有效事件滿足中斷觸發(fā)條件后,INTF0、INTF1和INTF2位會(huì)變成1。如果此時(shí)SREG寄存器中的I位為1,而且GICR寄存器中的INTn置1,則MCU將響應(yīng)中斷請(qǐng)求,跳至相應(yīng)的中斷向量處開始執(zhí)行中斷服務(wù)程序,同時(shí)硬件自動(dòng)將INTFn標(biāo)志清0。3.5.4 中斷程序設(shè)計(jì)外部中斷常用作檢測(cè)外部事件,如檢測(cè)按鍵的狀態(tài)。下述內(nèi)容用于實(shí)現(xiàn)描述3.D.2,即在PD2管腳連接一個(gè)按鍵,使用外部中斷檢測(cè)該按鍵并翻轉(zhuǎn)LED狀態(tài)。1. 按鍵配置出于模塊化的設(shè)計(jì)要求,可將按鍵相關(guān)管腳的配置封裝成
27、子函數(shù)SW_Config(),具體源碼如下:【描述3.D.2】 SW_Config()/* 按鍵初始化函數(shù) */void SW_Config(void)/PD2為外部中斷INT0引腳/PD2引腳連接一個(gè)按鍵,按下為低電平/設(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)外,還需要定義一些必需的宏定義和頭文件等,詳細(xì)代碼清單如下:【
28、描述3.D.2】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請(qǐng)參考描述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)進(jìn)行翻轉(zhuǎn),詳細(xì)代碼清單如下:【描述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);運(yùn)行上述程序后,觀察開發(fā)板,每次按下相關(guān)按鍵都會(huì)看到LED的亮滅狀態(tài)隨之翻轉(zhuǎn)。3.6 AVR定時(shí)器相對(duì)于一般的8位單片機(jī)而言,AVR不僅配備了更多的定時(shí)/計(jì)數(shù)器(簡(jiǎn)稱定時(shí)器
30、)接口,而且還是增強(qiáng)型的。例如,通過(guò)定時(shí)器與比較匹配寄存器互相配合,生成占空比可變的方波信號(hào),即脈沖寬度調(diào)制輸出PWM信號(hào),用于D/A轉(zhuǎn)換、電機(jī)無(wú)級(jí)調(diào)速和變頻控制等。3.6.1 定時(shí)器概述ATmega16A配置了兩個(gè)8位和一個(gè)16位共三個(gè)定時(shí)器。它們是8位的定時(shí)器T/C0及T/C2和16位的T/C1。它們之間的功能比較如表3-19所示。定時(shí)器原理圖如圖3-8所示。表3-19 定時(shí)器功能比較 圖3-8 定時(shí)器原理圖 1. 時(shí)鐘源與預(yù)分頻器對(duì)于定時(shí)器來(lái)說(shuō),首先需要明確的是時(shí)鐘源,不同的時(shí)鐘源決定了其定時(shí)和計(jì)數(shù)的時(shí)間間隔以及穩(wěn)定性。1) 內(nèi)部時(shí)鐘源T/C可以由內(nèi)部同步時(shí)鐘或外部異步時(shí)鐘驅(qū)動(dòng)。時(shí)鐘源是
31、由時(shí)鐘選擇邏輯決定的,而時(shí)鐘選擇邏輯是由位于T/C控制寄存器TCCR0的時(shí)鐘選擇位CS02:0控制的。T/C1與T/C0雖共用一個(gè)預(yù)分頻模塊,但可以有不同的分頻設(shè)置。當(dāng)CSn2:0=1時(shí),系統(tǒng)內(nèi)部時(shí)鐘直接作為T/C的時(shí)鐘源,這也是T/C最高頻率的時(shí)鐘源fCLK_I/O,與系統(tǒng)時(shí)鐘頻率相同。預(yù)分頻器可以輸出4個(gè)不同的時(shí)鐘信號(hào)fCLK_I/O/8、fCLK_I/O/64、fCLK_I/O/256或fCLK_I/O/1024。2) 外部時(shí)鐘源由T1/T0引腳提供的外部時(shí)鐘源可以用作T/C時(shí)鐘clkT1/clkT0。引腳同步邏輯在每個(gè)系統(tǒng)時(shí)鐘周期對(duì)引腳T1/T0進(jìn)行采樣。然后將同步(采樣)信號(hào)送到邊沿
32、檢測(cè)器。寄存器由內(nèi)部系統(tǒng)時(shí)鐘clkI/O的上跳沿驅(qū)動(dòng)。當(dāng)內(nèi)部時(shí)鐘為高時(shí),鎖存器可以看做是透明的。2. 計(jì)數(shù)單元8位T/C0的主要功能部件為可編程的雙向計(jì)數(shù)單元。計(jì)數(shù)器單元原理圖如圖3-9所示。根據(jù)不同的工作模式,計(jì)數(shù)器針對(duì)每一個(gè)clkT0實(shí)現(xiàn)清零、加一或減一操作。其時(shí)鐘和操作有如下特點(diǎn):clkT0可以由內(nèi)部時(shí)鐘源或外部時(shí)鐘源產(chǎn)生,具體由時(shí)鐘選擇位CS02:0確定。沒(méi)有選擇時(shí)鐘源時(shí)(CS02:0 = 0)定時(shí)器即停止。不管有沒(méi)有clkT0,CPU都可以訪問(wèn)TCNT0。CPU寫操作比計(jì)數(shù)器其他操作(如清零、加減操作)的優(yōu)先級(jí)高。計(jì)數(shù)序列由T/C控制寄存器(TCCR0)的WGM01和WGM00決定。
33、計(jì)數(shù)器計(jì)數(shù)行為與輸出比較OC0的波形有緊密的關(guān)系。T/C的溢出中斷標(biāo)志TOV0根據(jù)WGM01:0設(shè)定的工作模式來(lái)設(shè)置。TOV0可以用于產(chǎn)生CPU中斷。圖3-9 計(jì)數(shù)器單元原理圖 3. 輸出比較單元當(dāng)定時(shí)器作輸出比較時(shí),8位比較器持續(xù)對(duì)TCNT0和輸出比較寄存器OCR0進(jìn)行比較。輸出比較單元結(jié)構(gòu)圖如圖3-10所示。一旦TCNT0等于OCR0,比較器就給出匹配信號(hào),在匹配發(fā)生的下一個(gè)定時(shí)器時(shí)鐘周期輸出比較標(biāo)志OCF0置位。若此時(shí)OCIE0=1且SREG的全局中斷標(biāo)志I置位,CPU將產(chǎn)生輸出比較中斷。執(zhí)行中斷服務(wù)程序時(shí),OCF0自動(dòng)清零,或者通過(guò)軟件寫“1”的方式來(lái)清零。另外,根據(jù)WGM21:0和C
34、OM01:0設(shè)定的不同的工作模式,波形發(fā)生器利用匹配信號(hào)產(chǎn)生不同的波形。同時(shí),波形發(fā)生器還利用max和bottom信號(hào)來(lái)處理極值條件下的特殊情況。圖3-10 輸出比較單元結(jié)構(gòu)圖 3.6.2 定時(shí)器工作模式AVR的定時(shí)器工作模式比較多,具體有如下幾種:普通模式。CTC(比較匹配時(shí)清零定時(shí)器)模式。快速PWM模式。相位修正PWM模式。相位與頻率修正PWM模式。在這幾種工作模式中,普通模式為最常用的工作模式。限于篇幅,本節(jié)只介紹普通模式,其他工作模式可參考相關(guān)資料。以定時(shí)器0為例,在普通模式下計(jì)數(shù)器不停地累加,直至:計(jì)到最大值(TOP = 0 xFF),數(shù)值溢出,計(jì)數(shù)器簡(jiǎn)單地返回到最小值0 x00并
35、重新開始。在TCNT0為零的同一個(gè)定時(shí)器時(shí)鐘里,T/C溢出標(biāo)志TOV0置位。TOV0有點(diǎn)像第17位,只能置位,不會(huì)清零。由于定時(shí)器中斷服務(wù)程序能夠自動(dòng)清零TOV0,因此可通過(guò)軟件提高定時(shí)器的分辨率。在普通模式下用戶可以隨時(shí)寫入新的計(jì)數(shù)器數(shù)值。如果定時(shí)時(shí)間太長(zhǎng),必須使用定時(shí)器溢出中斷或預(yù)分頻器來(lái)擴(kuò)展定時(shí)范圍。3.6.3 定時(shí)器寄存器定時(shí)器寄存器是與定時(shí)器有關(guān)的寄存器。以定時(shí)器0為例,計(jì)數(shù)寄存器TCNT0的各位定義如表3-20所示。輸出比較寄存器OCR0的各位定義如表3-21所示。8位寄存器OCR0中的數(shù)據(jù)用于與寄存器TCNT0中的計(jì)數(shù)值進(jìn)行匹配比較。在T/C0運(yùn)行期間,比較匹配單元一直將寄存器T
36、CNT0的計(jì)數(shù)值與寄存器OCR0的內(nèi)容進(jìn)行比較,一旦TCNT0的計(jì)數(shù)值與OCR0的數(shù)值匹配相等,將產(chǎn)生一個(gè)中斷申請(qǐng)或改變OCR0的輸出電平。定時(shí)/計(jì)數(shù)器中斷屏蔽寄存器TIMSK的各位定義如表3-22所示。表3-20 寄存器TCNT0定義 表3-21 寄存器OCR0定義 表3-22 寄存器TIMSK定義 涉及定時(shí)器的相關(guān)位定義如表3-23所示。定時(shí)器中斷標(biāo)志寄存器TIFR的各位定義如表3-24所示。表3-23 相關(guān)位定義表3-24 寄存器TIFR定義 涉及定時(shí)器的相關(guān)位定義如表3-25所示。定時(shí)器控制寄存器TCCR0的各位定義如表3-26所示。表3-25 相關(guān)位定義表3-26 寄存器TCCR0定
37、義涉及定時(shí)器的相關(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位功能定義定時(shí)器0的時(shí)鐘源選擇如表3-32所示。表3-32 時(shí)鐘源選擇 3.6.4 定時(shí)器程序設(shè)計(jì)定時(shí)器常用作周期性事務(wù)的處理和操作,下述內(nèi)容用于實(shí)現(xiàn)描述3.
38、D.3,即使用定時(shí)器1的溢出中斷實(shí)現(xiàn)1秒定時(shí)驅(qū)動(dòng)LED閃爍。1. 選擇定時(shí)器當(dāng)AVR單片機(jī)晶振為8MHz(十進(jìn)制),計(jì)數(shù)器的時(shí)鐘源為內(nèi)部時(shí)鐘時(shí),需要計(jì)數(shù)8 000 000個(gè)時(shí)鐘周期才能達(dá)到定時(shí)1秒一次溢出的功能,顯然大大超過(guò)了計(jì)數(shù)器的計(jì)數(shù)范圍。實(shí)踐中采用預(yù)分頻器進(jìn)行分頻,以256分頻為例,則需要的時(shí)鐘周期為8000000/256=31250若16位的計(jì)數(shù)器1的計(jì)數(shù)范圍為065 535(0 xffff),則可以達(dá)到要求。本例中可選定時(shí)器1。2. 計(jì)算計(jì)數(shù)值由于普通模式下定時(shí)器計(jì)數(shù)到0 xffff即產(chǎn)生中斷,并翻轉(zhuǎn)到0 x0000開始計(jì)數(shù),則需要每次溢出后改變定時(shí)器的計(jì)數(shù)初值,以便使其每次計(jì)數(shù)31
39、250后產(chǎn)生溢出中斷。更改定時(shí)器1的計(jì)數(shù)初值可使用如下語(yǔ)句:TCNT1 =0 xffff-31250;使用計(jì)算的形式可以提高程序的可讀性及避免計(jì)算錯(cuò)誤,修改起來(lái)也方便。3. 定時(shí)器初始化出于模塊化的設(shè)計(jì)要求,定時(shí)器相關(guān)的配置可封裝成子函數(shù)TIM_Config(),具體源碼如下:【描述3.D.3】TIM_Config()/* 定時(shí)器初始化函數(shù) */void TIM_Config(void) /配置時(shí)鐘為clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置計(jì)數(shù)初值TCNT1 =0 xffff-31250;/開啟定時(shí)器1溢出中斷TIMSK |
40、=(1TOIE1);4. 主函數(shù)編寫主函數(shù)main()存放在main.c文件中,除了相關(guān)初始化函數(shù)和主循環(huán)外,還要定義一些必需的宏定義和頭文件等,詳細(xì)代碼清單如下:【描述3.D.3】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請(qǐng)參考描述3.D.1void LED_Config(void);/定時(shí)器初始化函數(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)進(jìn)行翻轉(zhuǎn),詳細(xì)代碼清單如下:【描述3.D.3】 TIMER1_ov()/* 中斷服務(wù)函數(shù) */定時(shí)器1溢出中斷服務(wù)函數(shù)#pragma vector = TIMER1_OVF_vect_interrupt void TIMER1_ov(void) /重置計(jì)數(shù)初值TCNT1 =0 xffff-31250;/每次進(jìn)中斷,LED狀態(tài)翻轉(zhuǎn)一次if(PORTC&(1
42、PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);運(yùn)行上述程序后,觀察開發(fā)板,將看到LED以1秒鐘改變一次亮滅的狀態(tài)進(jìn)行閃爍。3.7 AVR USARTAVR中集成了一個(gè)增強(qiáng)型的串行接口,簡(jiǎn)稱USART(Universal Synchronous and Asynchronous serial Receiver and Transimitter,通用同步異步串行收發(fā)器)。該接口在嵌入式系統(tǒng)中一直是重要的應(yīng)用接口,它不僅可以應(yīng)用于板級(jí)芯片之間的通信,而且更多地應(yīng)用在實(shí)現(xiàn)系統(tǒng)之間的通信和系統(tǒng)調(diào)試中。3.7.1 USART結(jié)構(gòu)ATmega16A中集成了一個(gè)全雙工通用同步
43、/異步串行收發(fā)模塊USART,其原理圖如圖3-11所示。USART收發(fā)模塊分為三大部分:時(shí)鐘發(fā)生器、數(shù)據(jù)發(fā)送器和數(shù)據(jù)接收器。其各自功能如下: 時(shí)鐘發(fā)生器主要為發(fā)送器和接收器提供基本的時(shí)鐘。USART支持四種時(shí)鐘工作模式:普通異步模式、雙倍速異步模式、主機(jī)同步模式和從機(jī)同步模式。 數(shù)據(jù)發(fā)送器將MCU內(nèi)部的并行數(shù)據(jù)根據(jù)串口波特率串行逐位送出。圖3-11 USART原理圖 數(shù)據(jù)接收器將外部收到的串行數(shù)據(jù)根據(jù)波特率逐位送入MCU并存儲(chǔ)。整個(gè)USART模塊受UCSRA、UCSRB和UCSRC三個(gè)寄存器的控制。3.7.2 USART寄存器USART數(shù)據(jù)寄存器UDR的各位定義如表3-33所示。UDR寄存器實(shí)
44、際上由兩個(gè)物理上分離的寄存器RXB、TXB構(gòu)成,它們使用相同的I/O地址: 寫UDR的操作,是將發(fā)送的數(shù)據(jù)寫入到寄存器TXB中。 讀UDR的操作,讀取的是接收寄存器RXB的內(nèi)容。當(dāng)設(shè)定使用5、6或7位的數(shù)字幀時(shí),高位未用到的位在發(fā)送時(shí)被忽略,在接收時(shí)由硬件自動(dòng)清零。表3-33 寄存器UDR定義 只有在UCSRA寄存器中的UDRE為1時(shí)(數(shù)據(jù)寄存器空),UDR才能被寫入,否則寫入的數(shù)據(jù)將被USART忽略。在發(fā)送使能情況下,寫入U(xiǎn)DR的數(shù)據(jù)將進(jìn)入發(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位。波特率的改變將造成正在進(jìn)行的數(shù)據(jù)傳輸受到破壞。寫UBRRL將立即更新波特率分頻器。對(duì)標(biāo)準(zhǔn)晶振及諧振器頻率來(lái)說(shuō),異步模式下最常用的波特率可通過(guò)寄存器UBRR的設(shè)置來(lái)產(chǎn)生。波特率與目標(biāo)波特率的偏差不應(yīng)超過(guò)0.5%,更高的誤差雖然也可以接受,但發(fā)送器的抗噪性會(huì)降低,特別是需要傳輸大量數(shù)據(jù)時(shí)。以常用的8MHz晶振和7.3728MHz晶振為例,其波特率和誤差表如表3-43所示。表3-43 波特率和誤差表 3.7.3 USART程序設(shè)計(jì)USART
47、接口經(jīng)過(guò)電平轉(zhuǎn)換后,常用作與PC的通信。下述內(nèi)容用于實(shí)現(xiàn)描述3.D.4,即配置USART波特率為115 200,使用中斷法對(duì)PC發(fā)來(lái)的數(shù)據(jù)進(jìn)行回顯,并驅(qū)動(dòng)LED狀態(tài)翻轉(zhuǎn)。1. USART配置出于模塊化的設(shè)計(jì)要求,USART相關(guān)的配置可封裝成子函數(shù)USART_Config(),具體源碼如下:【描述3.D.4】USART_Config()/* USART初始化函數(shù) */void USART_Config(void) /USART倍速發(fā)送UCSRA |=(1U2X);/選擇UCSRC寄存器,字符長(zhǎng)度8位UCSRC |=(1URSEL)|(1UCSZ1)|(1UCSZ0);/異步模式,無(wú)檢驗(yàn),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)外,還要定義一些必需的宏定義和頭文件等,詳細(xì)代碼清單如下:【描述3.D.4】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BI
49、T_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關(guān)寄存器名稱#include /* 子函數(shù) */LED初始化函數(shù),代碼請(qǐng)參考描述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ù)原樣返回,進(jìn)行回
50、顯,并驅(qū)動(dòng)LED的顯示狀態(tài)進(jìn)行翻轉(zhuǎn),詳細(xì)代碼清單如下:【描述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ā)送,進(jìn)行回顯UDR =cn;/每次進(jìn)中斷,LED狀態(tài)翻轉(zhuǎn)一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);連接好串口線后運(yùn)行程序,AVR的串口將收到的字符送回到超級(jí)串口上,如果發(fā)送的字符為“12345
51、67”,則回顯字符如圖3-12所示。同時(shí),LED會(huì)根據(jù)收到的字符數(shù)目進(jìn)行閃爍。圖3-12 串口回顯數(shù)據(jù) 3.8 AVR SPI串行外設(shè)接口(Serial Perpheral Interface,SPI)是摩托羅拉公司開發(fā)的全雙工同步串行總線。該總線主要用于近距離低速的同步串行數(shù)據(jù)傳輸,如EEPROM、FLASH、晶屏和SD卡等器件。AVR的SPI是采用硬件方式實(shí)現(xiàn)面向字節(jié)的全雙工三線同步通信接口,它支持主機(jī)、從機(jī)模式及四種不同傳輸模式的SPI時(shí)序,通信速率有7種選擇。同時(shí),AVR內(nèi)部的SPI接口也被用作對(duì)芯片內(nèi)部的程序存儲(chǔ)器和數(shù)據(jù)EEPROM的編程下載口。3.8.1 SPI結(jié)構(gòu)ATmega16A的同步串行SPI接口允許在芯片與外設(shè)或幾個(gè)AVR之間,采用與標(biāo)準(zhǔn)SPI接口協(xié)議兼容的方式進(jìn)行高速的同步數(shù)據(jù)傳輸,其主要特征如下:全雙工、三線同步數(shù)據(jù)傳輸??蛇x擇的主/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【大學(xué)課件】單片機(jī)原理與應(yīng)用設(shè)計(jì) 子程序結(jié)構(gòu)
- DB14T-日光溫室草莓固碳生產(chǎn)技術(shù)規(guī)程編制說(shuō)明
- 《PCT在細(xì)菌感染診》課件
- 《母嬰護(hù)理員》課件
- 《電子郵件課件》課件
- 單位管理制度展示選集【職員管理】十篇
- 醫(yī)藥高新區(qū)排水防澇設(shè)施項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 單位管理制度收錄大合集人員管理篇十篇
- 《頭暈的健康教育》課件
- 2025房屋裝修合同范本版
- 辦理落戶新生兒委托書模板
- 施工現(xiàn)場(chǎng)環(huán)境因素識(shí)別、評(píng)價(jià)及環(huán)境因素清單、控制措施
- 【9道期末】安徽省宣城市2023-2024學(xué)年九年級(jí)上學(xué)期期末道德與法治試題(含解析)
- 2024年醫(yī)藥行業(yè)年終總結(jié).政策篇 易聯(lián)招采2024
- 《工程造價(jià)專業(yè)應(yīng)用型本科畢業(yè)設(shè)計(jì)指導(dǎo)標(biāo)準(zhǔn)》
- 倉(cāng)庫(kù)主管2025年終總結(jié)及2025工作計(jì)劃
- 兒科護(hù)士述職報(bào)告2024
- 2024年01月11396藥事管理與法規(guī)(本)期末試題答案
- 股權(quán)投資協(xié)議的風(fēng)險(xiǎn)控制
- 酒店微笑服務(wù)培訓(xùn)
- 浙江省嘉興市2023-2024學(xué)年七年級(jí)上學(xué)期語(yǔ)文期末試卷(含答案)
評(píng)論
0/150
提交評(píng)論