⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 em4100.c

📁 读EM4100卡的PICC程序,使用PIC16FXX单片机。读取卡的低3字节。完全可以直接使用。
💻 C
字号:
// em4100.c
// for mp-198
// code size 188 word
// 135 lines
// 2005.09.24 代码优化
//===============================
void Read_em4100(void)//读em4100卡
{
	if (emsign_in==hight)
	{
		if (emflag.oldlevel==hight) return; //信号无变化,结束处理
		else	emflag.bitdata=0;//上升沿信号
	}
	else
	{
		if (emflag.oldlevel==low) return; //信号无变化,结束处理
		else	emflag.bitdata=1;//下降沿信号
	}
	emflag.oldlevel ^= 1; //信号线电平记忆

// 信号宽度判别
{
	if ((TMR0<pw_min)||(TMR0>pw_max))
	{
		TMR0=0;
		em_error();
		return ;//信号太窄或太宽,错误!结束处理
	}
	else
	{	//emflag.bitover=false;
		if (TMR0<pw_mid)
		{
			return ;//信号宽度不足一个bit的宽度,退出,等待下个脉冲一起处理
		}
		else
		{
			TMR0=0;//定时器重新计数
		}
	}
}
//
//	tmr20ms_over=false;
	switch (em_step)
	{
		case 0:
		{
			receive_em_bits();
			if ((em_bits>=9)&&((emdata._int&0x3ff)==0x1ff))
			{
				em_bits=0;
				em_step=1;
				em_parity.me=0;
				em_cunt=0;
				emdata._byte=0;
				em_parity.me=0;
			}
			break;
		}
		case 1:
		{
			receive_em_bits();
			if (em_bits==4)
			{
				em_bits=0;
				em_parity.me ^= (emdata._byte&0x0f);
				em_cunt++;
				em_step=2;
			}
			break;
		}
		case 2:
		{
			if (((emflag.bitdata)&&(em_parity.b._7))||((!emflag.bitdata)&&(!em_parity.b._7)))
			{
				em_parity.b._7=0;
				if (em_cunt<10)
				{
					em_step=1;
				}
				else
				{
					em_step=3;
				}

			}
			else
			{
				em_error();
			}
			break;
		}
		case 3:
		{
			em_parity.me <<= 1;
			em_parity.b._0 |= emflag.bitdata;
			em_bits++;
			if (em_bits==4)
			{
				asm ("swapf _em_parity,w");
				asm ("xorwf _em_parity,f");
				if (ZERO)
				{
					tmr_card=0;
					if (((emdata.me!=card_temp)||(emflag.beoff)))
					{
						b_readcard_ok=true;
					}
					ndata.me=emdata.me;
					card_temp=ndata.me;
					b_data_type=1;
					emflag.beoff=false;
				}
				em_bits=0;
				em_step=0;
				emdata._byte=0;
			}
			break;
		}
	}
}

//================================================================
void receive_em_bits()
{
	emdata.me <<=1;
	if (emflag.bitdata)
	{
		emdata._byte |=1;
		em_parity.b._7 ^= 1;
	}
	em_bits++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -