找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1307|回复: 0

AT29C040读写源程序

[复制链接]
发表于 2004-11-6 02:44:07 | 显示全部楼层 |阅读模式
<>#include &lt;reg51.h&gt;
#include &lt;intrins.h&gt;</P>
<>unsigned char time;
void int_t0(void) interrupt 1 {
time++;
}</P>
<>unsigned char d; //rec data</P>
<P>bit rec(void) {
TH0=0;time=0;
while (!RI) {if (time&gt;1) return(1);}
RI=0;
d=SBUF;
return(0);
}
void sen(unsigned char dd) {
SBUF=dd;
while (!TI) {}
TI=0;
}</P>
<P>void wait(void) {
time=0;while (time&lt;10) {}
}</P>
<P>void wait10ms(void) {
TH0=150;time=0;
while (!time) {}
}</P>
<P>sbit ce=P3^5;
sbit oe=P3^6;
sbit we=P3^7;
sbit a16=P3^2;
sbit a17=P3^3;
sbit a18=P3^4;</P>

<P>void pro_to_card(void) {
unsigned char no,i,j;
sen(0xaa);
if (rec()) {wait();return;}
no=d;
sen(d);

no&lt;&lt;=2;
no|=0xe3;
P3=0xff;
P3&amp;=no;

i=0;
do {
  P0=i;
  j=0;
  do {
   if (rec()) {wait();ce=1;return;}
   TI=0;SBUF=d;
   P1=j;
   P2=d;
   ce=0;
   we=0;
   we=1;
   ce=1;
   j++;
  } while (j);
  wait10ms();
  i++;
} while (i);
ce=1;
}</P>
<P>void card_to_pro(void) {
unsigned char no,i,j;
sen(0x55);
if (rec()) {wait();return;}
no=d;
sen(d);</P>
<P> no&lt;&lt;=2;
no|=0xe3;
P3=0xff;
P3&amp;=no;
P2=0xff;</P>
<P> i=0;
do {
  P0=i;
  j=0;
  do {
   P1=j;
   ce=0;oe=0;
   no=P2;
   oe=1;ce=1;
   j++;
   sen(no);
   if (rec()) {wait();return;}
   if (no!=d) {wait();return;}
  } while (j);
  i++;
} while (i);
}</P>

<P>
/*
void load(unsigned int as,unsigned char dd) {
P0=as/256;P1=as;P2=dd;
ce=0;we=0;we=1;ce=1;
}
void erase(void) {
a16=a17=a18=0;
load(0x5555,0xaa);
load(0x2aaa,0x55);
load(0x5555,0x80);
load(0x5555,0xaa);
load(0x2aaa,0x55);
load(0x5555,0x10);
wait10ms();
wait10ms();
}</P>
<P>void unlock(void) {
unsigned char i;
a16=a17=a18=0;
load(0x5555,0xaa);
load(0x2aaa,0x55);
load(0x5555,0x80);
load(0x5555,0xaa);
load(0x2aaa,0x55);
load(0x5555,0x20);
i=0;
do {
  P1=i;
  ce=0;we=0;we=1;ce=1;
  i++;
} while (i);
}
*/</P>
<P>void main(void) {
SCON=0x80;
TMOD=0x21;
ET0=TR0=1;EA=1;



wait10ms();
// erase();
// unlock();
REN=1;
while (1) {
  REN=1;RI=0;
  while (!RI) {} RI=0;
  switch (SBUF) {
  case 0x55:card_to_pro();break;
  case 0xaa:pro_to_card();break;
  case 0xa5:
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   sen(0xaa);
   break;
  }
}
}
</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-28 02:36 , Processed in 0.019701 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表