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

📄 bian.c

📁 模拟EM卡程序
💻 C
字号:
/*****************************************
*	程序名称: dt	 *
*                                    *
*	程序用途: ID模块    *
*	通讯方式: UART      *
*	晶振频率:11.0592MHz             *
*	开发日期: 2005-01-4             *
*****************************************/

 #include <reg51.h>
#include 	<intrins.h>
#include <stdio.h>
#define uchar  unsigned char
#define uint   unsigned int
#define ulong  unsigned long
#define SENDNUM   10
void send_data(uchar h);
void send_1(void);
void send_0(void);
uchar TX_COMM[5]={0x01,0x23,0x45,0x67,0x89};
uchar READ_DATA[5]={0x11,0x11};
uchar READ_TIME[5]={0x22,0x22};
uchar SET_TIME[5]={0x33,0x33};
uchar READ_NUMBER[5]={0x55,0x55};
uchar TX_END[5]={0x98,0x76,0x54,0x32,0x10};
sbit  BEEP=P3^5;
uchar d[8]={0xFF,0x8f,0x63,0x55,0xf7,0x29,0x7a,0x96};
uchar dd[8]={0x82,0x00,0xF1,0xAE,0xA8};
uchar aa[10];
 void send(uchar *ddd)
{
 int i,j;
 uchar sd[8];
 uchar temp=0,temp1,dat[11];
  for(j=0;j<5;j++)			 //行校验
   {
      dat[2*j]=(ddd[j]&0xf0)>>4;
      dat[2*j+1]=ddd[j]&0x0f;
   }
  for(j=0;j<10;j++)
  {
   	temp=((dat[j]&0x08)>>3)^((dat[j]&0x04)>>2)^((dat[j]&0x02)>>1)^(dat[j]&0x01);
  	if(temp){dat[j]=(dat[j]<<1)|0x01;}
	else{dat[j]=dat[j]<<1;}
  }
 temp1=0x10;
  temp=0;
  dat[10]=0;	   //列校验
 for(i=4;i>0;i--)
 {
  for(j=0;j<10;j++)
  {
   temp^=((dat[j]&temp1)>>i);
  }
   if(temp){dat[10]=dat[10]|0x01;}
   dat[10]=dat[10]<<1;
   temp1=temp1>>1; 
   temp=0;
   }
 sd[0]=0xff;
 sd[1]=0x80|(dat[0]<<2)|(dat[1]>>3);
 sd[2]=(dat[1]<<5)|dat[2];
 sd[3]=(dat[3]<<3)|(dat[4]>>2);
 sd[4]=(dat[4]<<6)|(dat[5]<<1)|(dat[6]>>4);
 sd[5]=(dat[6]<<4)|(dat[7]>>1);
 sd[6]=(dat[7]<<7)|(dat[8]<<2)|(dat[9]>>3);
 sd[7]=(dat[9]<<5)|dat[10];
 for(j=0;j<SENDNUM;j++)
  for(i=0;i<8;i++)
   send_data(sd[i]);
 }




// 主程序
void main(void)
{  	uint i=0;
    IE=0; 					
    TCON=0x40; TMOD=0x20;
    SCON=0x50; TH1=0xFD;	//波特率9600 bps(晶振:11.0592MHz)
    TR1=1;
	BEEP=0;
	while(1)
	    { 
 // dd[2]=i/256;
 //dd[3]=i%256;
		   send(dd);
		   i++;
		   if(i>4000)
		   i=0;
 	    }
   }     


  void delay(void)
{ _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();_nop_();
 
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();_nop_();
 


}
void lay(void) {uchar i; for(i=0;i<5;i++) delay();}

void send_1(void){BEEP=1;lay();BEEP=0;lay();}
void send_0(void){BEEP=0;lay();BEEP=1;lay();}
void send_data(uchar h)
{
  int i;
  for(i=0;i<8;i++)
        { if(h&0x80) 
          { send_1(); }
		  else
		  {	send_0(); }
		  h=h<<1;
		 }	 
}
													  














⌨️ 快捷键说明

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