完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我做的125KHZ的RFID读头,在晶振为11.0592MHz下,读一切正常,但是我把晶振频率提高到18.432MHz时就不能读了,真心求教!!!!!
#include #include ***it LED=P0^0; //指示灯 ***it INPORT=P1^0; //解码输入 //用来区分脉冲宽度的参数 #define tiME00 50 #define TIME05 260 #define TIME10 550 bit bitin; //上一次的状态位 unsigned char Buff[30]; //解码缓冲区 unsigned char buff0[6]; void delay_ms(unsigned int ms) //延时函数 { unsigned char i; while(ms--) { i=112; while(i--); } } void printchar(unsigned char ch) //显示16进制数 { if(ch>=0&&ch<=9) ch=ch+'0'; else if(ch>=10&&ch<=15) ch=ch+'A'-10; putchar(ch); } void printhex(unsigned char hex) //以16进制格式输出一个字节 { unsigned char c; c=hex; c=c>>4; printchar(c); c=hex; c=c&0x0F; printchar(c); } //监测数据位 unsigned char readbit() { unsigned int mk=TIME10; //装入超时值 TL0=TH0=0; //初始化计数器 TR0=1; //开始计时 while(--mk) //超时机制,防止等死 if(bitin!=INPORT) //有跳变 { break; } TR0=0; //停止计时 if(mk==0) //超时退出 return 0; bitin=INPORT; //保存状态 mk=TH0*256+TL0; //计算跳变的脉冲宽度 if((mk>TIME05)&&(mk<=TIME10)) //一个周期 return 1; if((mk>=TIME00)&&(mk<=TIME05)) //半个周期 return 2; return 0; //出错 } //读一个完整地数据位 unsigned char readdata() { switch(readbit()) { case 1: return !bitin; case 2: if(readbit()!=2) return 2; return !bitin; default: return 2; } } //接收并解码 bit CheckData() { unsigned char i,j; bitin=INPORT; //保存状态位 for(i=0;i<9;i++) //检测9个数据位1 { LED=1; if(readdata()!=1) { return 0; } } //读取数据 for(i=0;i<11;i++) //5个字节写数据 { Buff=0x00; for(j=0;j<5;j++) //往一个字节写数据 { Buff<<=1; switch(readdata()) { case 0: //0 break; case 1: //1 Buff|=0x08; break; case 2: //err return 0; } } } //结束位 if(Buff[10]&0x08!=0x00) { return 0; } //行奇校验 for(i=0;i<10;i++) if((((Buff>>4) ^ (Buff>>3) ^ (Buff>>2) ^ (Buff>>1) ^ Buff)&0x08)!=0) return 0; //列奇校验 j=0; for(i=0;i<11;i++) j=j ^ (Buff&0x80); if(j!=0) return 0; for(i=0;i<11;i++) j=j ^ (Buff&0x40); if(j!=0) return 0; for(i=0;i<11;i++) j=j ^ (Buff&0x20); if(j!=0) return 0; for(i=0;i<11;i++) j=j ^ (Buff&0x10); if(j!=0) return 0; //完成 return 1; } bit ReadCardNo() { if(CheckData()) //检测卡 { unsigned char i; Buff[0]=(Buff[0] & 0xF0) | (Buff[1]>>4 & 0x0F); buff0[0]=Buff[0]; Buff[1]=(Buff[2] & 0xF0) | (Buff[3]>>4 & 0x0F); buff0[1]=Buff[1]; Buff[2]=(Buff[4] & 0xF0) | (Buff[5]>>4 & 0x0F); buff0[2]=Buff[2]; Buff[3]=(Buff[6] & 0xF0) | (Buff[7]>>4 & 0x0F); buff0[3]=Buff[3]; Buff[4]=(Buff[8] & 0xF0) | (Buff[9]>>4 & 0x0F); buff0[4]=Buff[4]; buff0[5]=buff0[0]^buff0[1]^buff0[2]^buff0[3]^buff0[4]; LED=1; for(i=0;i<6;i++) printhex(buff0); putchar('n'); delay_ms(300); LED=0; delay_ms(20000); return 1; } return 0; } void init(void) { PCON=0x00; SCON=0x50; TMOD=0x00; T2H=(65536-(18432000/4/9600))/256; T2L=(65536-(18432000/4/9600))%256; AUXR=0x15; ES=1; EA=1; TI=1; INPORT=1; delay_ms(300); } main() { init() delay_ms(300); LED=1; delay_ms(3000); LED=0; printf("Startn"); while(1) { ReadCardNo(); } } |
|
相关推荐
1个回答
|
|
帮顶....
|
|
|
|
只有小组成员才能发言,加入小组>>
3303 浏览 9 评论
2978 浏览 16 评论
3479 浏览 1 评论
9039 浏览 16 评论
4071 浏览 18 评论
1162浏览 3评论
597浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
586浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2322浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1887浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 23:24 , Processed in 1.232595 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号