资料
  • 资料
  • 专题
MEGA8-T2-CTC产生125KHz方波(ICP中断方式读125KHz的RFID卡)
推荐星级:
时间:2019-12-23
大小:74.18KB
阅读数:168
上传用户:16245458_qq.com
查看他发布的资源
下载次数
1
所需E币
3
ebi
新用户注册即送 300 E币
更多E币赚取方法,请查看
close
资料介绍
MEGA8-T2-CTC产生125KHz方波,ICP中断方式读125KHz的RFID卡(EM4100系列)成功ATMEGA8,11.0592MHZ,T2工作于CTC模式,OC2生产125.673KHz的方波,8050/8550两个三极管放大,358调制出来的信号加到M8的ICP脚上。串口输出读卡信息。 //包含所需头文件 #includeavr/io.h> #includeavr/interrupt.h> /*------宏定义------*/ #defineBIT(x) (1(x)) voidput_c(unsignedchardat); voidput_s(unsignedchar*dat,unsignedcharenter); voidfind_start(void); volatileunsignedcharbit_array[256]; volatileunsignedchartest_end=0; //端口初始化 voidport_init(void) { PORTB=0x00; DDRB=0x08; PORTC=0x00; DDRC=0x00; PORTD=0x03; DDRD=0x02; } //定时T1初始化 voidtimer1_init(void) { TCCR1B=0x00;//停止定时器 TIMSK|=0x20;//中断允许 TCNT1H=0xFF; TCNT1L=0xF8;//初始值 TCCR1A=0x00; TCCR1B=0xC5;//启动定时器 } //定时器T1输入捕捉中断服务程序 ISR(TIMER1_CAPT_vect) { staticunsignedchartr=0; staticunsignedcharbit_no=0; staticunsignedcharone_time=0; TCCR1B=0; TCNT1=0; if(ICR1>6) { bit_no=0; } if(test_end==0) { if(tr==1) { bit_array[bit_no]=1; bit_no++; if(bit_no==0) { test_end=1; } if(ICR1L>4) { bit_array[bit_no]=1; bit_no++; if(bit_no==0) { test_end=1; } } TCCR1B=0xC5; //上升沿触发 tr=0; } else { bit_array[bit_no]=0; bit_no++; if(bit_no==0) { test_end=1; } if(ICR1L>4) { bit_array[bit_no]=0; bit_no++; if(bit_no==0) { test_end=1; } } TCCR1B=0x85; //下降沿触发 tr=1; } } } //定时器T2初始化 voidtimer2_init(void) { TCCR2=0x00;//停止定时器 ASSR=0x00;//异步时钟模式 TCNT2=0x00;//初始值 OCR2=0x2B;//匹配值 TIMSK|=0x00;//中断允许 TCCR2=0x19;//启动定时器 } //串口通信初始化 voidusart_init(void) { UCSRB=0x00;//禁止中断 UCSRA=0x00; UCSRC=BIT(URSEL)|0x06; UBRRL=0x05; UBRRH=0x00; UCSRB=0x98; } voidput_c(unsignedchardat) { while(!(UCSRA(1UDRE))); UDR=dat; } voidput_s(unsignedchar*dat,unsignedcharenter) { while(*dat) { put_c(*dat); dat++; } if(enter==1) { put_c(0x0d); put_c(0x0a); } } voidput_long(unsignedlongdat) { unsignedlongtemp=1000000000; unsignedchari=0; unsignedcharout=0; for(i=0;i10;i++) { out=dat/temp; dat%=temp; temp/=10; put_c(out+48); } // out=dat%temp; // put_c(out+48); } voidinit_devices(void) { cli();//禁止所有中断 MCUCR=0x00; MCUCSR=0x80;//禁止JTAG GICR=0x00; port_init(); timer1_init(); timer2_init(); usart_init(); sei();//开全局中断 } //主函数 intmain(void) { unsignedchari=0; init_devices(); //在这继续添加你的代码 put_s("RFIDCardReader",1); while(1) { if(test_end==1) { decode(); test_end=0; } } return0; } voiddecode(void) { unsignedchari,j,k; unsignedcharid_code[11]={0,0,0,0,0,0,0,0,0,0,0}; unsignedcharcol_parity=0; unsignedcharrow_parity=0; unsignedchartemp=0; unsignedcharstart_data[20]={1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}; unsignedlongrfid=0; for(i=0;i128;i++) { for(j=0;j20;j++) { if(bit_array[i+j]!=start_data[j]) { break; } } if(j==20) { put_s("",1); put_s("FindRFIDCard.",1); i+=20; for(k=0;k11;k++) { row_parity=0; // 读出五位数据 temp=0; for(j=0;j5;j++) { temp=1; if((bit_array[i]==0)(bit_array[i+1]==1)) { temp|=0x01; if(j4) { row_parity+=1; } } elseif((bit_array[i]==1)(bit_array[i+1]==0)) { temp=0xfe; } else { return; } i+=2; } id_code[k]=(temp>>1); temp=0x01; row_parity%=2; if(k10) { if(row_parity!=temp) { return; } } else { if(temp!=0) { return; } } } if(k==11) { put_s("IDCard:",0); for(j=2;j10;j++) { rfid+=(((unsignedlong)(id_code[j]))(4*(9-j))); } } put_long(rfid); return; } } } ……
版权说明:本资料由用户提供并上传,仅用于学习交流;若内容存在侵权,请进行举报,或 联系我们 删除。
PARTNER CONTENT
相关评论 (下载后评价送E币 我要评论)
没有更多评论了
  • 可能感兴趣
  • 关注本资料的网友还下载了
  • 技术白皮书