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

📄 mcard.c

📁 基于LP22132 KELL下的磁卡写卡器
💻 C
字号:
#include<MCARD.H>
#include "config.h"
#include "lpclib.h" 

/*******************************************************************************************
void ram_init(void)
描述:标志位清0
********************************************************************************************/
void ram_init(void)
{
  unsigned char i;
	bitcount3=0;
	bitcount2=0;
	bitcount1=0;
	rnum3=0;
	rnum2=0;
	rnum1=0;
    readdat_num=0;
	savdat3=0xff;
	savdat2=0xff;
	savdat1=0xff;
    temp_h_byte=0;
    temp_l_byte=0;
    for(i=0;i<MAX_TRACK1_LEN;i++)Track1buf[i]=0xff;		
    for(i=0;i<MAX_TRACK2_LEN;i++)Track2buf[i]=0xff;
    for(i=0;i<MAX_TRACK3_LEN;i++)Track3buf[i]=0xff;
}
//------------------------------------------------------------------------------------------
// 外部中断2
// void IRQ_Eint2 (void)__irq
//------------------------------------------------------------------------------------------
 void IRQ_Eint2 (void)__irq
	{
	savdat1=(savdat1&0xfe)|((IO1PIN&0x00200000)>>21); 
	if(bitcount1<7)
		{
		savdat1<<=1;
		bitcount1++;
		}
	else {
		 bitcount1=0;
		 Track1buf[rnum1]=~savdat1; 
		if(rnum1<MAX_TRACK1_LEN)rnum1++; 
		savdat1=0xff; 
		 }      
    EXTINT = 0x04;				    
    VICVectAddr = 0;				
}
//------------------------------------------------------------------------------------------
// 外部中断3
//  void IRQ_Eint3 (void)__irq
//------------------------------------------------------------------------------------------
 void IRQ_Eint3 (void)__irq
	{
	savdat3=(savdat3&0xfe)|((IO1PIN&0x20000000)>>29);
	if(bitcount3<7)
		{
		savdat3<<=1;
 		bitcount3++;
 		}
	else 
		{
		bitcount3=0;
		Track3buf[rnum3]=~savdat3; 
		if(rnum3<MAX_TRACK3_LEN)rnum3++; 
		savdat3=0xff;
		LED_R_OFF();
 		}
 EXTINT = 0x08;				 
 VICVectAddr = 0;		
	}
//------------------------------------------------------------------------------------------
// 捕获中断1
//void IRQ_TIME1 (void)__irq
//------------------------------------------------------------------------------------------
 void IRQ_TIME1 (void)__irq
	{
	T1IR= 1<<6;
	savdat2=(savdat2&0xfe)|((IO1PIN&0x40000000)>>30);  
	if(bitcount2<7)
		{
 		savdat2<<=1;
		 bitcount2++;
 		}
	else
		{
		bitcount2=0;
		Track2buf[rnum2]=~savdat2; 
		if(rnum2<MAX_TRACK2_LEN)rnum2++; 
		savdat2=0xff; 
		} 
	VICVectAddr = 0;    
}
/**********************************************************************************************
void dat_format(void)
描述:将不足7位的数据位格式化成正常数据
*********************************************************************************************/	
void dat_format(void)
{
if(bitcount1!=0)
	{
	bitcount1=(8-bitcount1);   //第一磁道
	savdat1<<=bitcount1;
	 Track1buf[rnum1]=~savdat1;//当数据不足8位时则数据的低位补1
	rnum1++;
	}
if(bitcount2!=0)
	{
	bitcount2=(8-bitcount2);     //第二磁道
	savdat2<<=bitcount2;
	Track2buf[rnum2]=~bitcount2;//当数据不足8位时则数据的低位补1
	rnum2++;
	}

if(bitcount3!=0)
	{
	bitcount3=(8-bitcount3);   //第三磁道
	savdat3<<=bitcount3;
	Track3buf[rnum3]=~savdat3;//当数据不足8位时则数据的低位补1
	rnum3++;
	}
}
/*******************************************************************************************
函数原型:byte judge_readstatus_tr1(byte *tmprecord,byte tmplength) 
功能:对一轨的数据进行解码
参数说明:tmprecord存放未解码的数据的缓冲区首址,tmplength存放未解码的数据的长度
********************************************************************************************/
unsigned char  judge_readstatus_tr1  (unsigned char *tmprecord,unsigned char tmplength) 
{
  static unsigned char tmpnum;
	static unsigned char  k;
	static unsigned char  m;
	static unsigned char tmpLRC;
	static unsigned char byte_num ; 
	static unsigned char dat_tmp;
    tmpnum=tmplength;
	byte_num=0;
    FLAG_SS=0;
	FLAG_ES=0;
	FLAG_BRC=1;
	FLAG_LRC=0;		
/**********************************找包头循环体***************************************/	
	while(1)
		{
		if((!FLAG_SS)&&(tmprecord[tmpnum]!=0x00)&&(tmprecord[tmpnum-1]!=0x00))
			{
			temp_h_byte=tmprecord[tmpnum-1];
			temp_l_byte=tmprecord[tmpnum];
			for(k=0;k<8;k++)
				{
				if((temp_l_byte&0x7f)==0x45)	//45 is stx.
					{
					FLAG_SS=1;			//STX is ok.
					tmpLRC=0x05;			//计算LRC

⌨️ 快捷键说明

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