第3章-RFID阅读器开发基础-课件.ppt

上传人(卖家):三亚风情 文档编号:2430683 上传时间:2022-04-17 格式:PPT 页数:148 大小:2.65MB
下载 相关 举报
第3章-RFID阅读器开发基础-课件.ppt_第1页
第1页 / 共148页
第3章-RFID阅读器开发基础-课件.ppt_第2页
第2页 / 共148页
第3章-RFID阅读器开发基础-课件.ppt_第3页
第3页 / 共148页
第3章-RFID阅读器开发基础-课件.ppt_第4页
第4页 / 共148页
第3章-RFID阅读器开发基础-课件.ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

1、第3章 RFID阅读器开发基础 1 1第3章 RFID阅读器开发基础 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章 RFID阅读器开发基础 2 23.1 阅读器电路组成阅读器电路组成从电路上来看,阅读器是一个嵌入式系统,一般由MCU控制器、射频收发、通信接口、天线以及其他外围电路组成,其组成如图3-1所示。本章将首先讲解阅读器电路组成,然后讲解作为阅读器核心MCU的AVR单片机及其外

2、围电路。具体收发通道等会根据不同频段RFID系统的需求将在后续章节进行分析和讲解。 第3章 RFID阅读器开发基础 3 3图3-1 阅读器组成 第3章 RFID阅读器开发基础 4 43.1.1 MCU及外围电路及外围电路MCU是阅读器的核心,配合外围电路完成收发控制、向应答器发送命令与写数据、应答器数据读取与处理、与应用系统的高层进行通信等任务。MCU及外围电路的结构如图3-2所示。本书配套阅读器的MCU为Atmel公司出品的AVR单片机,具体型号为Atmega16A。第3章 RFID阅读器开发基础 5 5图3-2 MPU及外围电路的结构 第3章 RFID阅读器开发基础 6 63.1.2 收发

3、通道收发通道收发通道主要负责数据的链路和无线链路,由以下两部分组成: 发送通道,包括编码、调制和功率放大电路,用于向应答器传送命令和写数据。 接收通道,包括解调、解码电路,用于接收应答器返回的应答信息和数据。其收发通道电路的结构如图3-3所示。另外,需要注意的是在实际的电路设计中,根据应答器的防碰撞能力的设置,还应考虑防碰撞电路的设计。第3章 RFID阅读器开发基础 7 7图3-3 收发通道电路的结构第3章 RFID阅读器开发基础 8 83.1.3 天线天线阅读器和应答器都需要安装天线,天线的应用目标是取得最大的能量传输效果。选择天线时,需要考虑天线类型、天线的阻抗、应答器附着物的射频特性、阅

4、读器与应答器周围金属物体等因素。RFID系统所用的天线类型主要有偶极子天线、微带贴片天线和线圈天线等。 偶极子天线辐射能力强,制造工艺简单,成本低,具有全面方向性,常用于远距离RFID系统。 微带贴片天线的方向图是定向的,工艺较复杂,成本较高。第3章 RFID阅读器开发基础 9 9 线圈天线用于电感耦合方式的RFID系统中(阅读器和应答器之间的耦合电感线圈在这里也称为天线)。线圈天线适用于近距离的RFID系统,在超高频频段和工作距离、方向不定的场合难以得到广泛应用。在应答器中,天线和应答器芯片是封装在一起的,由于应答器尺寸的限制,天线的小型化和微型化现已成为RFID系统性能的重要因素。近年来研

5、制的嵌入式线圈天线、分型开槽天线、地坡面圆极化EBG(电磁带隙)天线等新型天线为应答器天线小型化提供了技术保证。第3章 RFID阅读器开发基础 10 103.2 AVR单片机概述单片机概述1997年,Atmel公司挪威设计中心的A先生和V先生利用Atmel公司的Flash新技术,共同研发出RISC精简指令集高速8位单片机,简称AVR。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通信设备和家用电器等各个领域。第3章 RFID阅读器开发基础 11 113.2.1 AVR主要功能特性主要功能特性AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆和单体高速

6、输入/输出的方案,既提高了指令执行速度,又克服了瓶颈现象,增强了功能。同时也减少了对外设管理的开销,相对简化了硬件结构,降低了成本。因而,AVR单片机在软/硬件开销、速度、性能和成本等诸多方面取得了优化平衡。第3章 RFID阅读器开发基础 12 12AVR单片机其他特点如下:哈佛结构,具备1MIPS/MHz的高速运行处理能力。超功能精简指令集(RISC),具有32个通用工作寄存器。快速地存取寄存器组、单周期指令系统,大大优化了目标代码的大小和执行效率。部分型号Flash非常大,特别适用于使用高级语言进行开发。作输出时可输出40 mA(单一输出);作输入时可设置为三态高阻抗输入或带上拉电阻输入,

7、具备1020 mA灌电流的能力。第3章 RFID阅读器开发基础 13 13片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠。大部分AVR片上资源丰富:带EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator和WDT等。大部分AVR除了有ISP功能外,还有IAP功能,方便升级或销毁应用程序。第3章 RFID阅读器开发基础 14 143.2.2 ATmega16AATmega16A是AVR系列单片机中的一个型号,因其功能丰富、性价比高而被广泛应用。ATmega16A常用的有两种封装,分别为40

8、引脚PDIP封装和44引脚TQFP封装。其中,40引脚PDIP封装如图3-4所示,44引脚TQFP封装如图3-5所示。本书配套读写器的ATmega16A采用44引脚TQFP封装。ATmega16A引脚功能较多,其具体说明如表3-1所示。第3章 RFID阅读器开发基础 15 15图3-4 40引脚PDIP封装第3章 RFID阅读器开发基础 16 16图3-5 44引脚TQFP封装 第3章 RFID阅读器开发基础 17 17表表3-1 ATmega16A 引脚说明引脚说明 第3章 RFID阅读器开发基础 18 183.3 AVR时钟与熔丝位时钟与熔丝位AVR单片机的运行,需要有时钟的驱动,而时钟源

9、的选择需要设置相关熔丝位。3.3.1 AVR系统时钟系统时钟AVR有一套时钟系统,也有多个时钟源可作为系统时钟,这些时钟并不需要同时工作。为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作模块的时钟。具体时钟分布如图3-6所示。上图中涉及的时钟功能如表3-2所示。第3章 RFID阅读器开发基础 19 19图3-6 AVR时钟单元 第3章 RFID阅读器开发基础 2020表表3-2 时钟功能说明时钟功能说明 第3章 RFID阅读器开发基础 21 21AVR单片机的多种时钟源通过一个时钟多路选择器来驱动系统时钟或用作其他功能,时钟源的选择需要对熔丝位进行配置。被选择的时钟输入到AVR时钟发生器

10、,再分配到相应模块。AVR有六个时钟源,分别如下: 外部晶体/陶瓷振荡器,常用作主时钟源,这个振荡器可以使用石英晶体也可以使用陶瓷谐振器。XTAL1和XTAL2分别用作片内振荡器的反相放大器的输入和输出。 外部低频振荡器,一般用来连接32.768 kHz晶振。需要对熔丝位编程,使能XTAL1和XTAL2的内部电容,从而除去外部电容。内部电容的标称数为36 pF。第3章 RFID阅读器开发基础 2222 外部RC振荡器。对于时间不敏感的应用可以使用外部RC振荡器。频率可以通过f=1/(3RC)进行粗略的估算。电容至少需要22 pF。 标定的内部RC振荡器。标定的片内RC振荡器提供了固定的1.0、

11、2.0、4.0或8.0 MHz的时钟。这个时钟也可作为系统时钟。选择这个时钟之后就无需外部器件了。 外部时钟。XTAL1连接外部来的时钟信号,作为系统时钟驱动整个CPU运行。XTAL2可悬空。第3章 RFID阅读器开发基础 2323 定时器振荡器。对于拥有定时器/振荡器引脚(TOSC1和TOSC2)的AVR微处理器,晶体可以直接与这两个引脚相连,无需外部电容。此振荡器针对32.768kHz的中标晶体作了优化。器件出厂时,缺省设置的时钟源是1 MHz的内部RC振荡器,启动时间为最长。这种设置保证用户可以通过ISP或并行编程器得到所需的时钟源。第3章 RFID阅读器开发基础 24243.3.2 A

12、VR熔丝位熔丝位在AVR内部有多组与器件配置和运行环境相关的熔丝位,这些熔丝位非常重要,用户可以通过设定和配置熔丝位,使AVR具备不同的特性,以更加适合实际的应用。ATmega16A有两个熔丝位字节,分别为熔丝位高字节和熔丝位低字节。如果熔丝位被编程则读返回值为“0”。其中,熔丝位高字节每个Bit的定义如表3-3所示;熔丝位低字节每个Bit的定义如表3-4所示。在熔丝位中,与系统时钟有关的有CKOPT和CKSEL3:0,主要用来选择振荡器种类和工作频率,具体配置如表3-5所示。第3章 RFID阅读器开发基础 2525表表3-3 熔丝位高字节定义熔丝位高字节定义第3章 RFID阅读器开发基础 2

13、626表表3-4 熔丝位低字节定义熔丝位低字节定义 第3章 RFID阅读器开发基础 2727表表3-5 CKOPT与与CKSEL3:0的配置的配置 第3章 RFID阅读器开发基础 2828CKOPT的数值决定了振荡器输出幅度的大小,不同振幅决定了其适应场合的不同,具体含义如下: 在CKOPT=0时,振荡器的输出振幅较大,容易起振,适合在干扰大的场合以及使用晶体振荡器超过8 MHz的情况下。 当CKOPT=1时,振荡器的输出振幅较小,这样可以减少对电源的消耗,对外的电磁辐射也较小。第3章 RFID阅读器开发基础 29293.4 AVR通用通用I/O口口ATmega16A有四组通用I/O端口,分别

14、为PORTA、PORTB、PORTC和PORTD,简称PA、PB、PC和PD。每组I/O端口有8个I/O管脚。这些管脚都是相互独立的,具有真正的读、改、写功能。AVR通用I/O口的主要特点如下: 双向独立位控的I/O口。每一位都可以单独进行配置,互不影响。 大电流驱动,每个I/O口输出采用推挽方式,最大20 mA灌电流,可直接驱动LED。 I/O端口可以复用,作为USART、SPI等外设接口。第3章 RFID阅读器开发基础 30303.4.1 通用通用I/O口结构口结构AVR的通用I/O口的结构并不复杂,其结构如图3-7所示。每一组I/O端口内部配备三个8位寄存器,对应着该组的8个引脚,分别为

15、: 方向控制寄存器DDRx(x=A,B,C,D)。 数据寄存器PORTx(x=A,B,C,D)。 输入引脚寄存器PINx(x=A,B,C,D)。此外,每个I/O口内部还有一个上拉电阻。方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输入方式还是输出方式。第3章 RFID阅读器开发基础 31 31图3-7 通用I/O口结构 第3章 RFID阅读器开发基础 3232 当DDRx=1时,I/O口处于输出工作方式,此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚,当PORTx=1时,I/O引脚呈现高电平,同时可以提供输出20 mA的电流;而当PORTx=0

16、时,I/O引脚呈现低电平,同时可以吸纳20 mA电流。因此,AVR的I/O口在输出方式下提供了比较大的驱动能力,可以直接驱动LED灯小功率外围器件。 当DDRx=0时,I/O口处于输入方式。此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读PINx寄存器可以获得外部引脚上的真实电平。在输入方式下,PORTx可以控制使用或者不使用内部的上拉电阻。第3章 RFID阅读器开发基础 3333此外,在寄存器SFIOR中,有一位称做PUD,它是AVR全部I/O口内部上拉电阻的总开关。当PUD=1时,AVR所有I/O内部上拉电阻都不起作用。当PUD=0时,各个I/O口内部的上拉电阻取决于PORTx

17、的设置。第3章 RFID阅读器开发基础 34343.4.2 通用通用I/O寄存器寄存器ATmega16A的四个端口都有各自对应的三个I/O口寄存器,分别为数据寄存器PORT、数据方向寄存器DDR和输入引脚PIN。它们占用了I/O空间的12个地址。以PA口寄存器为例,数据寄存器PORTA的具体定义如表3-6所示;数据方向寄存器DDRA的具体定义如表3-7所示;输入引脚寄存器PINA的具体定义如表3-8所示。第3章 RFID阅读器开发基础 3535表表3-6 PORTA寄存器寄存器 表表3-7 DDRA寄存器寄存器第3章 RFID阅读器开发基础 3636表表3-8 PINA寄存器寄存器 第3章 R

18、FID阅读器开发基础 37373.4.3 通用通用I/O程序设计程序设计通用I/O口常用于MCU对外数据输出和输入,LED驱动和按键检测等。下述内容用于实现描述3.D.1,即使用PC7管脚交替点亮和熄灭一只LED。1. LED初始化初始化基于模块化和移植的考虑,可将I/O口设置子程序单独封装成一个子函数。例如,LED相关管脚的配置可封装成子函数LED_Config(),具体源码如下:第3章 RFID阅读器开发基础 3838【描述3.D.1】LED_Config()/* LED初始化函数 */void LED_Config(void)/PC7引脚连接一个LED,低电平点亮/设置PC7为输出DDR

19、C |= (1PC7);/设置PC7为高电平PORTC |= (1PC7);第3章 RFID阅读器开发基础 39392. 主函数编写主函数编写主函数main()存放在main.c文件中,除了相关初始化函数和主循环外,还需要定义一些必需的宏定义和头文件等,详细代码清单如下:【描述3.D.1】main.c/* 宏定义 */开启iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 头文件 */IAR中已定义的ATmega16相关寄存器名称#include 第3章 RFID阅读器开发基础 4040/* 子函数 */LED初始化函数void LED_Con

20、fig(void);/* 主函数 */void main(void)/LED初始化函数LED_Config(); while(1)/点亮LEDPORTC &= (1PC7);/熄灭LEDPORTC |= (1PC7);第3章 RFID阅读器开发基础 41 41单步执行如下语句时,会看到LED亮灭转换。while(1) /点亮LEDPORTC &= (1PC7);/熄灭LEDPORTC |= (1PC7);第3章 RFID阅读器开发基础 42423.4.4 I/O端口第二功能端口第二功能AVR的I/O端口除了通用I/O功能外,大多数端口引脚都具有第二功能,使能某些引脚的第二功能,不会影响到同一端

21、口其他引脚作为通用I/O口的功能。ATmega16A的I/O端口第二功能如表3-9所示。第3章 RFID阅读器开发基础 4343表表3-9 I/O端口第二功能端口第二功能 第3章 RFID阅读器开发基础 4444第3章 RFID阅读器开发基础 45453.5 AVR中断中断AVR单片机的中断源种类多、门类全,便于设计实时、多功能、高效率的嵌入式应用系统。但同时由于其功能更为强大,因此比一般8位单片机的中断使用和控制相对复杂些。3.5.1 中断向量中断向量AVR单片机一般拥有数十个中断源,每个中断源都有独立的中断向量。默认情况下,程序存储器的最低端,即从Flash地址的0 x0000开始用于放置

22、中断向量,称做中断向量区。ATmega16A共有21个中断源。默认状态下,ATmega16A的中断向量如表3-10所示。第3章 RFID阅读器开发基础 4646表表3-10 ATmega16A中断向量表中断向量表 第3章 RFID阅读器开发基础 4747第3章 RFID阅读器开发基础 4848在这21个中断中,包含1个非屏蔽中断(RESET)、3个外部中断(INT0、INT1、INT2)和17个内部中断。本节只简要介绍RESET和外部中断。 系统复位中断RESET,也称为系统复位源。RESET是一个特殊的中断源,是AVR中唯一不可屏蔽的中断。当ATmega16A由于各种原因被复位后,程序将跳到

23、复位向量(默认为0 x0000)处,在该地址处通常放置一条跳转指令,跳转到主程序继续执行。 INT0、INT1和INT2是三个外部中断源,它们分别由芯片外部引脚PD2、PD3和PB2上的电平变化或状态触发。通过对控制寄存器MCUCR和控制与状态寄存器MCUCSR的配置定义触发方式。第3章 RFID阅读器开发基础 49493.5.2 中断控制中断控制AVR单片机的中断,有优先级和屏蔽等功能和控制手段,也支持中断的嵌套,并可以灵活地进行配置和使用。1. 中断优先级中断优先级在AVR单片机中,一个中断在中断向量区的位置决定了它的优先级,即位于低地址的中断优先级高于位于高地址的中断优先级。因此,对于A

24、Tmega16A来说,复位中断RESET具有最高优先级,外部中断INT0次之,而SPM_RDY的中断优先级最低。第3章 RFID阅读器开发基础 5050AVR单片机采用固定的硬件优先级方式,不支持通过软件对中断优先级的重新设定。因此,中断优先级的作用仅体现在同一时刻有两个及两个以上中断源向MCU申请中断的情况中。在这种情况下,MCU根据优先级的不同,首先响应其中最高优先级的中断,待该中断服务程序执行完返回后,再依次响应优先级较低的中断。第3章 RFID阅读器开发基础 51 512. 中断标志中断标志AVR有两种不同机制的中断:带有中断标志的中断和不带中断标志的中断。中断标志是指每个中断源在其I

25、/O空间寄存器中具有自己的一个中断标志位。在AVR中,大多数的中断都属于带中断标志的中断。中断标志位一般在MCU响应该中断时由硬件自动清除,或在中断服务程序中通过读写专门数据寄存器的方式自动清除。关于中断标志,还有下述规则和情况:当中断被禁止或MCU不能马上响应中断时,则该中断标志将会一直保持,直到中断允许并得到响应为止。第3章 RFID阅读器开发基础 5252已建立的中断标志,实际就是一个中断的请求信号,如果暂时不能被响应,则该中断标志会一直保留(除非被用户软件清除),此时该中断被“挂起”。如果有多个中断被挂起,一旦中断允许后,各个被挂起的中断将按优先级依次得到中断响应服务。在AVR中,还有

26、个别的中断不带中断标志,如配置为低电平触发的外部中断。这类中断只要条件满足,就会一直向MCU发出中断请求。如果由于等待时间过长而得不到响应,则可能因中断条件结束而失去一次中断服务的机会。如果这个低电平维持时间过长,则会使中断服务完成返回后再次响应,即MCU重复响应同一中断的请求,进行重复服务。第3章 RFID阅读器开发基础 53533. 中断屏蔽与管理中断屏蔽与管理为了能够灵活地管理中断,AVR对中断采用两级控制方式。所谓两级控制,是指AVR有一个中断允许的总控制位I(即AVR状态寄存器SREG中的I标志位),通常称为全局中断允许控制位。状态寄存器SREG的定义如表3-11所示。其中,I位置位

27、时,使能全局中断,清零时则不论单独中断标志置位与否,都不会产生中断。任一中断发生后I清零,而执行RETI(中断返回)指令后,I位恢复置位以使能中断。同时,AVR为每一个中断源都设置了独立的中断允许位,这些中断允许位分散在每个中断源所属模块的控制寄存器中。第3章 RFID阅读器开发基础 5454表表3-11 状态寄存器状态寄存器SREG 第3章 RFID阅读器开发基础 55554. 中断嵌套中断嵌套由于AVR在响应一个中断的过程中通过硬件将I标志位自动清0,这样就阻止了MCU响应其他中断,因此通常情况下,AVR是不能自动实现中断嵌套的。如果要实现中断嵌套的应用,用户可在中断服务程序中使用指令使能

28、全局中断允许位I,通过间接的方式实现中断的嵌套处理。第3章 RFID阅读器开发基础 56563.5.3 外部中断外部中断ATmega16A有INT0、INT1和INT2三个外部中断源,分别由芯片外部引脚PD2、PD3和PB2上的电平变化或状态作为中断触发信号。1. 外部中断触发方式外部中断触发方式INT0、INT1和INT2的中断触发方式取决于用户程序对MCU控制寄存器MCUCR和MCU控制与状态寄存器MCUCSR的设定。其中,INT0和INT1支持4种中断触发方式,INT2支持2种,触发方式如表3-12所示。第3章 RFID阅读器开发基础 5757表表3-12 外部中断触发方式外部中断触发方

29、式 第3章 RFID阅读器开发基础 58582. 外部中断寄存器外部中断寄存器在ATmega16A中,除了寄存器SREG中的全局中断允许标志位I以外,与外部中断有关的寄存器有4个,共有11个标志位,其作用分别是这三个外部中断的中断标志位、中断允许控制位及定义外部中断的触发类型。MCU控制寄存器MCUCR的低4位为INT0(ISC01、ISC00)和INT1(ISC11、ISC10)中断触发类型控制位。MCUCR定义如表3-13所示。INT0和INT1的中断触发方式定义如表3-14所示。第3章 RFID阅读器开发基础 5959表表3-13 MCUCR定义定义第3章 RFID阅读器开发基础 606

30、0表表3-14 INT0与与INT1中断触发方式定义中断触发方式定义 第3章 RFID阅读器开发基础 61 61MCU控制与状态寄存器MCUCSR中的第6位(ISC2)为INT2的中断触发类型控制位。MCUCSR定义如表3-15所示。INT2的中断触发方式如表3-16所示。通用中断控制寄存器GICR的高3位为INT0、INT1和INT2的中断允许控制位,其各位定义如表3-17所示。通用中断标志寄存器GIFR的高3位为INT0、INT1和INT2的中断标志位。GIFR各位定义如表3-18所示。第3章 RFID阅读器开发基础 6262表表3-15 MCUCSR定义定义 表表3-16 INT2中断触

31、发方式中断触发方式 第3章 RFID阅读器开发基础 6363表表3-17 GICR定义定义 表表3-18 GIFR定义定义 第3章 RFID阅读器开发基础 6464当INT0、INT1和INT2引脚上的有效事件满足中断触发条件后,INTF0、INTF1和INTF2位会变成1。如果此时SREG寄存器中的I位为1,而且GICR寄存器中的INTn置1,则MCU将响应中断请求,跳至相应的中断向量处开始执行中断服务程序,同时硬件自动将INTFn标志清0。第3章 RFID阅读器开发基础 65653.5.4 中断程序设计中断程序设计外部中断常用作检测外部事件,如检测按键的状态。下述内容用于实现描述3.D.2

32、,即在PD2管脚连接一个按键,使用外部中断检测该按键并翻转LED状态。1. 按键配置按键配置出于模块化的设计要求,可将按键相关管脚的配置封装成子函数SW_Config(),具体源码如下:第3章 RFID阅读器开发基础 6666【描述3.D.2】 SW_Config()/* 按键初始化函数 */void SW_Config(void)/PD2为外部中断INT0引脚/PD2引脚连接一个按键,按下为低电平/设置PD2为输入DDRD &= (1PD2);/启用PD2的上拉电阻PORTD |= (1PD2);/设置INT0为低电平触发中断MCUCR &=(1ISC01) | (1ISC00);/使能IN

33、T0GICR |=(1INT0);第3章 RFID阅读器开发基础 67672. 主函数编写主函数编写主函数main()存放在main.c文件中,除了相关初始化函数和主循环外,还需要定义一些必需的宏定义和头文件等,详细代码清单如下:【描述3.D.2】main.c/* 宏定义 */开启iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 头文件 */IAR中已定义的ATmega16相关寄存器名称#include 第3章 RFID阅读器开发基础 6868/* 子函数 */LED初始化函数,代码请参考描述3.D.1void LED_Config(void

34、);/按键初始化函数void SW_Config(void);/* 主函数 */void main(void)/LED初始化函数LED_Config();/SW初始化函数SW_Config();第3章 RFID阅读器开发基础 6969/开总中断SREG |= (1 7); while(1)/等待中断第3章 RFID阅读器开发基础 70703. 中断服务函数中断服务函数中断服务程序用于处理外部中断的相关事务,本例中需要将LED的显示状态进行翻转,详细代码清单如下:【描述3.D.2】 INT0_S()/* 中断服务函数 */INT0中断服务函数#pragma vector = INT0_vect_

35、interrupt void INT0_S(void) /每次按下按键,LED状态翻转一次if(PORTC&(1PC7)第3章 RFID阅读器开发基础 71 71PORTC &= (1PC7);elsePORTC |= (1PC7);运行上述程序后,观察开发板,每次按下相关按键都会看到LED的亮灭状态随之翻转。第3章 RFID阅读器开发基础 72723.6 AVR定时器定时器相对于一般的8位单片机而言,AVR不仅配备了更多的定时/计数器(简称定时器)接口,而且还是增强型的。例如,通过定时器与比较匹配寄存器互相配合,生成占空比可变的方波信号,即脉冲宽度调制输出PWM信号,用于D/A转换、电机无级

36、调速和变频控制等。3.6.1 定时器概述定时器概述ATmega16A配置了两个8位和一个16位共三个定时器。它们是8位的定时器T/C0及T/C2和16位的T/C1。它们之间的功能比较如表3-19所示。定时器原理图如图3-8所示。第3章 RFID阅读器开发基础 7373表表3-19 定时器功能比较定时器功能比较 第3章 RFID阅读器开发基础 7474图3-8 定时器原理图 第3章 RFID阅读器开发基础 75751. 时钟源与预分频器时钟源与预分频器对于定时器来说,首先需要明确的是时钟源,不同的时钟源决定了其定时和计数的时间间隔以及稳定性。1) 内部时钟源T/C可以由内部同步时钟或外部异步时钟

37、驱动。时钟源是由时钟选择逻辑决定的,而时钟选择逻辑是由位于T/C控制寄存器TCCR0的时钟选择位CS02:0控制的。T/C1与T/C0虽共用一个预分频模块,但可以有不同的分频设置。当CSn2:0=1时,系统内部时钟直接作为T/C的时钟源,这也是T/C最高频率的时钟源fCLK_I/O,与系统时钟频率相同。预分频器可以输出4个不同的时钟信号fCLK_I/O/8、fCLK_I/O/64、fCLK_I/O/256或fCLK_I/O/1024。第3章 RFID阅读器开发基础 76762) 外部时钟源由T1/T0引脚提供的外部时钟源可以用作T/C时钟clkT1/clkT0。引脚同步逻辑在每个系统时钟周期对

38、引脚T1/T0进行采样。然后将同步(采样)信号送到边沿检测器。寄存器由内部系统时钟clkI/O的上跳沿驱动。当内部时钟为高时,锁存器可以看做是透明的。第3章 RFID阅读器开发基础 77772. 计数单元计数单元8位T/C0的主要功能部件为可编程的双向计数单元。计数器单元原理图如图3-9所示。根据不同的工作模式,计数器针对每一个clkT0实现清零、加一或减一操作。其时钟和操作有如下特点:clkT0可以由内部时钟源或外部时钟源产生,具体由时钟选择位CS02:0确定。没有选择时钟源时(CS02:0 = 0)定时器即停止。不管有没有clkT0,CPU都可以访问TCNT0。CPU写操作比计数器其他操作

39、(如清零、加减操作)的优先级高。计数序列由T/C控制寄存器(TCCR0)的WGM01和WGM00决定。计数器计数行为与输出比较OC0的波形有紧密的关系。T/C的溢出中断标志TOV0根据WGM01:0设定的工作模式来设置。TOV0可以用于产生CPU中断。第3章 RFID阅读器开发基础 7878图3-9 计数器单元原理图 第3章 RFID阅读器开发基础 79793. 输出比较单元输出比较单元当定时器作输出比较时,8位比较器持续对TCNT0和输出比较寄存器OCR0进行比较。输出比较单元结构图如图3-10所示。一旦TCNT0等于OCR0,比较器就给出匹配信号,在匹配发生的下一个定时器时钟周期输出比较标

40、志OCF0置位。若此时OCIE0=1且SREG的全局中断标志I置位,CPU将产生输出比较中断。执行中断服务程序时,OCF0自动清零,或者通过软件写“1”的方式来清零。另外,根据WGM21:0和COM01:0设定的不同的工作模式,波形发生器利用匹配信号产生不同的波形。同时,波形发生器还利用max和bottom信号来处理极值条件下的特殊情况。第3章 RFID阅读器开发基础 8080图3-10 输出比较单元结构图 第3章 RFID阅读器开发基础 81 813.6.2 定时器工作模式定时器工作模式AVR的定时器工作模式比较多,具体有如下几种:普通模式。CTC(比较匹配时清零定时器)模式。快速PWM模式

41、。相位修正PWM模式。相位与频率修正PWM模式。在这几种工作模式中,普通模式为最常用的工作模式。限于篇幅,本节只介绍普通模式,其他工作模式可参考相关资料。第3章 RFID阅读器开发基础 8282以定时器0为例,在普通模式下计数器不停地累加,直至:计到最大值(TOP = 0 xFF),数值溢出,计数器简单地返回到最小值0 x00并重新开始。在TCNT0为零的同一个定时器时钟里,T/C溢出标志TOV0置位。TOV0有点像第17位,只能置位,不会清零。由于定时器中断服务程序能够自动清零TOV0,因此可通过软件提高定时器的分辨率。在普通模式下用户可以随时写入新的计数器数值。如果定时时间太长,必须使用定

42、时器溢出中断或预分频器来扩展定时范围。第3章 RFID阅读器开发基础 83833.6.3 定时器寄存器定时器寄存器定时器寄存器是与定时器有关的寄存器。以定时器0为例,计数寄存器TCNT0的各位定义如表3-20所示。输出比较寄存器OCR0的各位定义如表3-21所示。8位寄存器OCR0中的数据用于与寄存器TCNT0中的计数值进行匹配比较。在T/C0运行期间,比较匹配单元一直将寄存器TCNT0的计数值与寄存器OCR0的内容进行比较,一旦TCNT0的计数值与OCR0的数值匹配相等,将产生一个中断申请或改变OCR0的输出电平。定时/计数器中断屏蔽寄存器TIMSK的各位定义如表3-22所示。第3章 RFI

43、D阅读器开发基础 8484表表3-20 寄存器寄存器TCNT0定义定义 表表3-21 寄存器寄存器OCR0定义定义 第3章 RFID阅读器开发基础 8585表表3-22 寄存器寄存器TIMSK定义定义 第3章 RFID阅读器开发基础 8686涉及定时器的相关位定义如表3-23所示。定时器中断标志寄存器TIFR的各位定义如表3-24所示。表3-23 相关位定义表3-24 寄存器TIFR定义 第3章 RFID阅读器开发基础 8787涉及定时器的相关位定义如表3-25所示。定时器控制寄存器TCCR0的各位定义如表3-26所示。表3-25 相关位定义表3-26 寄存器TCCR0定义第3章 RFID阅读

44、器开发基础 8888涉及定时器的相关位定义如表3-27所示。波形产生模式的相关定义如表3-28所示。表3-27 相关位定义 表3-28 波形产生模式定义 第3章 RFID阅读器开发基础 8989普通模式和非PWM模式(WGM=0,2)下的COM0位功能定义如表3-29所示。 快速PWM模式(WGM0=3)下的COM0位功能定义如表3-30所示。表3-29 COM0位功能定义 表3-30 COM0位功能定义第3章 RFID阅读器开发基础 9090相位可调PWM模式(WGM=1)下的COM0位功能定义如表3-31所示。表3-31 COM0位功能定义第3章 RFID阅读器开发基础 91 91定时器0

45、的时钟源选择如表3-32所示。表3-32 时钟源选择 第3章 RFID阅读器开发基础 92923.6.4 定时器程序设计定时器程序设计定时器常用作周期性事务的处理和操作,下述内容用于实现描述3.D.3,即使用定时器1的溢出中断实现1秒定时驱动LED闪烁。1. 选择定时器选择定时器当AVR单片机晶振为8MHz(十进制),计数器的时钟源为内部时钟时,需要计数8 000 000个时钟周期才能达到定时1秒一次溢出的功能,显然大大超过了计数器的计数范围。实践中采用预分频器进行分频,以256分频为例,则需要的时钟周期为8000000/256=31250若16位的计数器1的计数范围为065 535(0 xf

46、fff),则可以达到要求。本例中可选定时器1。第3章 RFID阅读器开发基础 93932. 计算计数值计算计数值由于普通模式下定时器计数到0 xffff即产生中断,并翻转到0 x0000开始计数,则需要每次溢出后改变定时器的计数初值,以便使其每次计数31250后产生溢出中断。更改定时器1的计数初值可使用如下语句:TCNT1 =0 xffff-31250;使用计算的形式可以提高程序的可读性及避免计算错误,修改起来也方便。3. 定时器初始化定时器初始化出于模块化的设计要求,定时器相关的配置可封装成子函数TIM_Config(),具体源码如下:第3章 RFID阅读器开发基础 9494【描述3.D.3

47、】TIM_Config()/* 定时器初始化函数 */void TIM_Config(void) /配置时钟为clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置计数初值TCNT1 =0 xffff-31250;/开启定时器1溢出中断TIMSK |=(1TOIE1);第3章 RFID阅读器开发基础 95954. 主函数编写主函数编写主函数main()存放在main.c文件中,除了相关初始化函数和主循环外,还要定义一些必需的宏定义和头文件等,详细代码清单如下:【描述3.D.3】main.c/* 宏定义 */开启iom16.h文件中的bit

48、模式#define ENABLE_BIT_DEFINITIONS 1/* 头文件 */IAR中已定义的ATmega16相关寄存器名称#include 第3章 RFID阅读器开发基础 9696/* 子函数 */LED初始化函数,代码请参考描述3.D.1void LED_Config(void);/定时器初始化函数void TIM_Config(void);/* 主函数 */void main(void)/LED初始化函数LED_Config();/TIM初始化函数TIM_Config();第3章 RFID阅读器开发基础 9797/开总中断SREG |= (17);while(1)/等待中断第3章

49、 RFID阅读器开发基础 98985. 中断服务函数中断服务函数中断服务程序用于处理外部中断的相关事务,本例中需要将LED的显示状态进行翻转,详细代码清单如下:【描述3.D.3】 TIMER1_ov()/* 中断服务函数 */定时器1溢出中断服务函数#pragma vector = TIMER1_OVF_vect_interrupt void TIMER1_ov(void) /重置计数初值TCNT1 =0 xffff-31250;第3章 RFID阅读器开发基础 9999/每次进中断,LED状态翻转一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1P

50、C7);运行上述程序后,观察开发板,将看到LED以1秒钟改变一次亮灭的状态进行闪烁。第3章 RFID阅读器开发基础 1001003.7 AVR USARTAVR中集成了一个增强型的串行接口,简称USART(Universal Synchronous and Asynchronous serial Receiver and Transimitter,通用同步异步串行收发器)。该接口在嵌入式系统中一直是重要的应用接口,它不仅可以应用于板级芯片之间的通信,而且更多地应用在实现系统之间的通信和系统调试中。第3章 RFID阅读器开发基础 1011013.7.1 USART结构结构ATmega16A中集成

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第3章-RFID阅读器开发基础-课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|