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

📄 at29c040_card.c

📁 C51单片机端
💻 C
字号:

#include <intrins.h>
#include <stdio.h>
#include "system.h"

sbit iocs  = P1^7;
sbit ramcs = P3^4;
sbit flashcs = P3^4;

sbit ce=P3^5;
sbit oe=P3^6;
sbit we=P3^7;

sbit a16=P1^4;
sbit a17=P1^5;

#define inflash  {flashcs = 0; iocs = 0;}
#define infram  {flashcs = 1; iocs = 0;}

unsigned char time;
unsigned char d;	//rec data

void int_t0(void) interrupt 1 {
	time++;
}
void wait(void) {
	time=0;while (time<10) {}
}

void wait10ms(void) {
	TH0=150;time=0;
	while (!time) {}
}

void card_to_pro(void) 
{
	data unsigned char dd;
	unsigned int add;
	a16=0;
	a17=0;
	for(add = 0x3ff; add < 0x440; add++)
	{
		inflash;
		dd = XBYTE[add];
		infram;
		printf("%bx\r",dd);
	}
}

void load(unsigned int as,unsigned char dd)
{
	inflash;
	XBYTE[as] = dd;
	infram;
}

void erase(void) 
{
	a16=0;
	a17=0;
	load(0x5555,0xaa);
	_nop_();
	load(0x2aaa,0x55);
	_nop_();
	load(0x5555,0x80);
	_nop_();
	load(0x5555,0xaa);
	_nop_();
	load(0x2aaa,0x55);
	_nop_();
	load(0x5555,0x10);
	wait10ms();
	wait10ms();
	wait10ms();
}

void unlock(void) {
	unsigned char i;
	a16=0;
	a17=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);
}

void vprotect()
{ 
	a17 = 0;
	a16 = 0;
	inflash;
	XBYTE[0x5555]=0xaa;
	XBYTE[0x2aaa]=0x55;
	XBYTE[0x5555]=0xa0;
	infram;
}

void write_data(unsigned int m_addr,unsigned int s_sector,unsigned int acount)
{
	unsigned char data cdat;
	unsigned int data addraa,addrbb; /* addraa 为内存地址,addrbb 为29C020地址 */
	unsigned int data i,j;

	a17 = 0;
	a16 = 0;
	addraa=m_addr;
	addrbb=s_sector*256;

	for(j=acount;j>0;j--)
	{
		vprotect();
		for(i=0;i<256;i++)
		{
			infram;
			cdat=XBYTE[addraa];
//			select_segment(s_sector/256); /*s_sector 是256的整数倍*/
			inflash;
			XBYTE[addrbb]=cdat;
			infram;
			addraa++;
			addrbb++;
		}
		s_sector++;
		wait10ms();
	}
}

void serial_init (void)  {
  SCON  = 0x50;                      /* mode 1: 8-bit UART, enable receiver   */
  TMOD |= 0x20;                      /* timer 1 mode 2: 8-Bit reload          */
  PCON |= 0x80;
  TH1   = 0xfd;                      /* reload value 19200 baud                */
  TR1   = 1;                         /* timer 1 run                           */
  TI    = 1;                  /* TI:   set TI to send first char of UART    */
}

void main(void) 
{
	unsigned char i;

	infram;
	serial_init();
	CKCON |= 0x07;
	ET0=TR0=1;EA=1;
	wait10ms();
//	protect();
	erase();
	while(1);
}


⌨️ 快捷键说明

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