首页|嵌入式系统|显示技术|模拟IC/电源|元件与制造|其他IC/制程|消费类电子|无线/通信|汽车电子|工业控制|医疗电子|测试测量
首页 > 分享下载 > 嵌入式系统 > MEGA8-T2-CTC产生125KHz方波(ICP中断方式读125KHz的RFID卡)

MEGA8-T2-CTC产生125KHz方波(ICP中断方式读125KHz的RFID卡)

资料介绍

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;
}
}
}

标签:嵌入式单片机MCU
MEGA8-T2-CTC产生125KHz方波(ICP中断方式读125KHz的RFID卡)
本地下载

评论