网站大量收购闲置独家精品文档,联系QQ:2885784924

低频RFID阅读器设计.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2 EM4095 -功能概述 EM4095通过跳线分别于ATmage16A的相关引脚相连。跳线如图4- 6 所示。 4.2 EM4095 -功能概述 ATmage16A的相关引脚如图4- 7所示。 4.2 EM4095 -功能概述 分析电路图可知,EM4095的管脚与ATmega16A管脚的对应关系如表4- 3所示。 EM4095 ATmega16l 管脚 名称 管脚 名称 2 RDY/LCK 3 PB7 12 MOD 43 PB3 13 DEMOD_OUT 2 PB6 14 SHD 1 PB5 4.3 低频RFID阅读器程序设计 低频RFID阅读器程序,主要工作便是能够正确的读取标签的ID号码 一般分为三部分:初始化程序、驱动程序和主程序。 4.3 低频RFID阅读器程序设计 -初始化程序 初始化程序用于各种管脚和器件的初始化,以便能够正常进行解码。 基于模块化和移植的考虑,可将本例中GPIO设置子程序单独封装成为子函数gpio_config(),具体源码如下所示: 【描述4.D.1】gpio_config( ) //gpio配置 void gpio_config(void) { //PD7、PC7和PD2管脚配置 DDRD |= (1PD7); PORTD |= (1PD7); DDRC |= (1PC7); PORTC |= (1PC7); DDRD = ~(1PD2); } 4.3 低频RFID阅读器程序设计 -初始化程序 EM4095相关管脚设置子程序单独封装成为子函数EM_config(),具体源码如下所示: 【描述4.D.1】EM_config( ) //em4095配置 void EM_config(void) { //em4095相关管脚配置 DDRB |= EM_SHD | EM_MOD; DDRB = ~EM_DM_OUT; EM_PORT |= EM_SHD ; //定时器1配置,实现精确定时 TCCR1B =~((1CS10)|(1CS12)); TCCR1B |=(1CS11); //TCNT1=600; OCR1A =64600; TCCR1A =~((1WGM11)|(1WGM10)); TCCR1B =~(1WGM13); TCCR1B |=(1WGM12); TIMSK |=(1OCIE1A); SREG |= (1 7); } 4.3 低频RFID阅读器程序设计 -初始化程序 串口设置子程序单独封装成为子函数uart_config(),具体源码如下所示: 【描述4.D.1】uart_config( ) //串口设置 void uart_config(void) { //串口相关寄存器配置 UCSRA |=(1U2X); UCSRB |=(1RXCIE); UCSRC |=((1URSEL)|(1UCSZ1)|(1UCSZ0)); UCSRC =~((1UMSEL)|(1UPM1)|(1UPM0)|(1USBS)); UBRRH =~(1URSEL); //波特率115200 UBRRH =0; UBRRL =7; UCSRB |=((1RXEN)|(1TXEN)); } 4.3 低频RFID阅读器程序设计 -驱动程序 驱动程序是EM4095能够正确解码的相关演示程序、解码子程序等。 因本例中曼彻斯特码有严格的码元间隙,所以需要512us的延时子函数,该函数单独封装成为子函数delay_512us(),具体源码如下所示: 【描述4.D.1】delay_512us( ) //512us延时子函数 void delay_512us(int x) { //使用定时器实现定时 TIFR|=(1OCF1A); TCNT1=0; while(TCNT1x); } 4.3 低频RFID阅读器程序设计 -驱动程序 读取ID卡号需要曼彻斯特码解码,其解码需要首先判断同步头,此部分功能单独封装成为子函数read_id_start(),具体源码如下所示: 【描述4.D.1】read_id_start( ) //判断同步头 char read_id_start(void) { char code_st=1; char i; char c_l; while(!(PINBEM_DM_OUT)); TCNT1=0; while(PINBEM_DM_OUT); //512us存在误差,505-520毫秒范围内即可 if(TCNT1505TCNT1520) { //判断随后是否连续8个1 for(i=0;i8;i++) { //以512us四分之三的

您可能关注的文档

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档