没有合适的资源?快使用搜索试试~ 我知道了~
一种曼彻斯特解码方法
4星 · 超过85%的资源 需积分: 48 86 下载量 135 浏览量
2017-12-20
08:20:17
上传
评论 5
收藏 10KB TXT 举报
温馨提示
试读
7页
通过C语言编写的,利用延时方法进行曼侧斯特解码。亲测好用。
资源推荐
资源详情
资源评论
检测方法
1).EM4095的数据格式为:9bit起始位+40bit数据位+10bit行校验位+4bit列校验位+1bit停止位
2).本程序时针对STC12C5A60S2单片机的,与80C51完全兼容,但是大部分指令时单周期指令,也就是
说比普通80C51大约快12倍
3).确定起始位,首先要正确找到数据1,按规则下跳为1,上跳为0. 可检测高电平并等其变低,
但这会把0错检为1,因为0也存在高电平。但是如果检测到一个周期的高电平(数据01)则可
确定找到了数据1,找到1后就可以同步了,因为EM4095卡最后一位数据就是0正好可以利用
作为判断的特征。
4).对于数据的确定,由于有了同步则可在同步后延时384us即3/4个码元周期,再判断接收段电平,
如为高则置数据为1,并一直等到低电平的出现,相反则等高电平的出现,并在此之间插入超时
判断。这样,一个完整的数据判断就完成了,并确保数据的准确性,另外这种方法的抗干扰性
会非常好,而如果采用定时同步的话则会因信号的畸变而引起数据出错,整体会导致读卡几率降低
但是此程序也有其缺点,因为采用纯延时判断的手段,因此其占用单片机的运行时间比较大。
5).同步后开始接收同步数据即9个1,这一部分用一个循环做,如果出错则放弃接收
6).同步数据接收完后,则开始接收数据,数据分11行5列接收,以利于校验位的判断
如有出错则放弃数据
7).如一切正常则返回卡号,如因尝试读卡次数到了则返回0,表示没有卡
8).码元频率是载波频率的64分频,因此码元周期为:T=64/125000= 0.000512s=512us,因此3T/4=384us
********************************************************************************************/
#include <reg52.h>
#include <intrins.h>//空操作指令需要此头文件
1).EM4095的数据格式为:9bit起始位+40bit数据位+10bit行校验位+4bit列校验位+1bit停止位
2).本程序时针对STC12C5A60S2单片机的,与80C51完全兼容,但是大部分指令时单周期指令,也就是
说比普通80C51大约快12倍
3).确定起始位,首先要正确找到数据1,按规则下跳为1,上跳为0. 可检测高电平并等其变低,
但这会把0错检为1,因为0也存在高电平。但是如果检测到一个周期的高电平(数据01)则可
确定找到了数据1,找到1后就可以同步了,因为EM4095卡最后一位数据就是0正好可以利用
作为判断的特征。
4).对于数据的确定,由于有了同步则可在同步后延时384us即3/4个码元周期,再判断接收段电平,
如为高则置数据为1,并一直等到低电平的出现,相反则等高电平的出现,并在此之间插入超时
判断。这样,一个完整的数据判断就完成了,并确保数据的准确性,另外这种方法的抗干扰性
会非常好,而如果采用定时同步的话则会因信号的畸变而引起数据出错,整体会导致读卡几率降低
但是此程序也有其缺点,因为采用纯延时判断的手段,因此其占用单片机的运行时间比较大。
5).同步后开始接收同步数据即9个1,这一部分用一个循环做,如果出错则放弃接收
6).同步数据接收完后,则开始接收数据,数据分11行5列接收,以利于校验位的判断
如有出错则放弃数据
7).如一切正常则返回卡号,如因尝试读卡次数到了则返回0,表示没有卡
8).码元频率是载波频率的64分频,因此码元周期为:T=64/125000= 0.000512s=512us,因此3T/4=384us
********************************************************************************************/
#include <reg52.h>
#include <intrins.h>//空操作指令需要此头文件
#define DELAYVAL 384
#define TIMEOUT 3000
//定义错误代码
#define ERR_NO 0x00
#define ERR_125KNOTFOUND 0x01
//控制EM4095的引脚
sbit MOD = P2^1;
sbit SHD = P2^0;
sbit DEMOD_OUT = P3^3;
sbit RDY_CLK = P3^4;
sbit BEEPLED = P1^5;
//延时n*1us函数
void stc12_Delay1us(unsigned short n)
{
while(--n)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
//读取卡号,
#define TIMEOUT 3000
//定义错误代码
#define ERR_NO 0x00
#define ERR_125KNOTFOUND 0x01
//控制EM4095的引脚
sbit MOD = P2^1;
sbit SHD = P2^0;
sbit DEMOD_OUT = P3^3;
sbit RDY_CLK = P3^4;
sbit BEEPLED = P1^5;
//延时n*1us函数
void stc12_Delay1us(unsigned short n)
{
while(--n)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
//读取卡号,
剩余6页未读,继续阅读
资源评论
- zhuyouyang2019-06-26跟别人博客上看到的是一样的,https://blog.csdn.net/sygdp21/article/details/5881561
- 喑楽粨衯粨2018-08-03学习一下很不错
- piaolingyh2019-02-26挺好,比较实用的
普通网友
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功