曼彻斯特解码程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
曼彻斯特解码
1、变量定义 (2)
2、Manchest初始化 (2)
3、Manchest解码信号翻转 (3)
4、过滤错误的卡号 (4)
5、获取正确的卡号 (5)
6、Manchest获取卡号数据 (6)
7、通过中断采样获取刷卡数据 (9)
1、变量定义
#define TH1_370US_H 0XFE //晶振11.0592MHZ,12T模式
#define TL1_370US_L 0XAB
#define SIGNAL_FLIP_TIME 10 //每隔100ms翻转一次读卡信号
#define REPEAT_TIME 5 //500ms后重复读卡
#define CLEAR_CARD_TIME 20 //2S后清除卡号数据
#define MANCHEST_TIME 5
sbit PULSE = P3^2;
sbit RFEN = P3^5; //曼彻斯特解码脉冲信号
sbit MANCHEST0= P3^2; //wiegand0
sbit MANCHEST1= P3^3; //wiegand1
uchar code CheckingTab[32]={ //接收到10组卡号的偶校验
0X00,0X01,0X01,0X00,0X01,0X00,0X00,0X01, //这里数值是低五位的偶校验值
0X01,0X00,0X00,0X01,0X00,0X01,0X01,0X00,
0X01,0X00,0X00,0X01,0X00,0X01,0X01,0X00,
0X00,0X01,0X01,0X00,0X01,0X00,0X00,0X01};
uchar WGCardBuf[5]; //卡号
uchar CopyCardBuf[5]; //备份卡号
uchar ManchestBuf[11]; //暂存接收到的11组数据
uchar idata g_ucManchestTime = MANCHEST_TIME; //
uchar idata g_ucDWithCardTime= 0; //隔500ms处理该卡号
uchar idata g_ucPreambleFlag = 0;
uchar idata g_ucERAgainTimer = 0; //每隔100ms翻转一次RFEN
uchar idata g_ucStoreGroupCnt= 0; //接收到几组数据,这里为11组才可能正确
uchar idata g_ucEGroupBitCnt = 0; //每组数据有5个为,5=4位卡号+1位偶校验
uchar idata g_ucPreambleCount= 0; //9位为1的引导码
uchar idata g_ucRemvoeCardTime=0; //隔多久清除以前的卡号数据,这里为3s
2、Manchest初始化
/******************************************************************** 函数原型:ManchestInit
功能:曼彻斯特解码变量初始化
输入:无
输出:无
说明:无
*-------------------------------------------------------------------- *修改时间| 修改者| 备注
*-------------------------------------------------------------------- *2012-02-14 Oscar First
********************************************************************/ void ManchestInit(void) //初始化读卡参数
{
RFEN = 1;
g_ucPreambleFlag = 0;
g_ucStoreGroupCnt = 0;
g_ucEGroupBitCnt = 5;
g_ucPreambleCount = 9;
g_ucERAgainTimer = SIGNAL_FLIP_TIME;
}
3、Manchest解码信号翻转
/******************************************************************** 函数原型:ProcessManchestSignal
功能:manchest解码的翻转信号
输入:无
输出:无
说明:无
*-------------------------------------------------------------------- *修改时间| 修改者| 备注
*-------------------------------------------------------------------- *2012-02-14 Oscar First
********************************************************************/ void ProcessManchestSignal(void)
{
if((g_ucDWithCardTime!=0)&&(--g_ucDWithCardTime==0))
{}
if((g_ucRemvoeCardTime!=0)&&(--g_ucRemvoeCardTime==0))
{
CopyCardBuf[0] = 0; //清除卡号缓冲区
CopyCardBuf[1] = 0;
CopyCardBuf[2] = 0;
CopyCardBuf[3] = 0;
CopyCardBuf[4] = 0;
}