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

📄 t.c

📁 at89c51 读取写入 at29c040 4M flash的 C源代码
💻 C
字号:

#include <reg51.h>
#include <absacc.h>
#include "t.h"

#if 1
void delay(unsigned int n)
{
	unsigned int i,j;
	for(j=0;j<100;j++)
	for(i=0;i<n;i++);
}
#endif
#if 0
unsigned char readFlash(unsigned int addr)
{
	unsigned char v;
	LE=1;//delay(1);
	P0=addr;//delay(1);
	LE=0;//delay(1);
	P2=addr>>8;//delay(1);
	OE=0;//delay(10);
	P0=0xFF;
	v=P0;//delay(1);
	OE=1;//delay(1);
	return v;
}
void writeFlash1(unsigned int addr,char value)
{
	LE=1;//delay(1);
	P0=addr;//delay(1);
	LE=0;//delay(1);
	P2=addr>>8;//delay(1);
	P0=value;//delay(1);
	WE=0;//delay(10);
	WE=1;//delay(1);
}
void chipErase()
{
	writeFlash1(0x5555,0xAA);
	writeFlash1(0x2AAA,0x55);
	writeFlash1(0x5555,0x80);
	writeFlash1(0x5555,0xAA);
	writeFlash1(0x2AAA,0x55);
	writeFlash1(0x5555,0x10);
}
#endif


#if 1
unsigned char volatile xdata *s,xdata *p;

#endif
void main()
{
#if 1
	unsigned char func=0,v;

	unsigned char wrchar;

	s=p=0x4000;
	for(;;)
	{
		KEY1=0;
		KEY2=0;
		KEY3=0;

		if(KEY1)
		{
			func=(func+1)&0x03;
			LEDOUT=~func;

			switch(func)
			{
			case 0: break;//(set value) reset pos and memory display
			case 1: wrchar=0xA0; break;//set write char value
			case 2: break;//(display offset addr value)set pos p
			case 3: break;//write at pos or erase
			}
		}

		if(func==0)
		{
			if(KEY2){	p--;	v=*p;LEDOUT=~v;}
			else if(KEY3){	p++;	v=*p;LEDOUT=~v;}
		}
		else if(func==1)
		{
			if(KEY2){	wrchar+=0x10;	LEDOUT=~wrchar;}
			else if(KEY3){	wrchar+=0x01;	LEDOUT=~wrchar;}
		}
		else if(func==2)
		{
			if(KEY2){ p--;LEDOUT=~(char)p;}
			else if(KEY3){ p++;LEDOUT=~(char)p;}
		}
		else if(func==3)
		{
			if(KEY2)//write at pos
			{
				*p=wrchar;
				LEDOUT=~(0xAA);
			}
		}
		delay(100);
	}
#else
	unsigned int s,p;//read
	unsigned char func=0,v;

	unsigned char wrchar;

	s=p=0x4000;
	for(;;)
	{
		KEY1=0;
		KEY2=0;
		KEY3=0;

		if(KEY1)
		{
			func=(func+1)&0x03;
			LEDOUT=~func;

			switch(func)
			{
			case 0: break;//(set value) reset pos and memory display
			case 1: wrchar=0xA0; break;//set write char value
			case 2: break;//(display offset addr value)set pos p
			case 3: break;//write at pos or erase
			}
		}

		if(func==0)
		{
			if(KEY2){	p--;	v=XBYTE[p];LEDOUT=~v;}
			else if(KEY3){	p++;	v=XBYTE[p];LEDOUT=~v;}
		}
		else if(func==1)
		{
			if(KEY2){	wrchar+=0x10;	LEDOUT=~wrchar;}
			else if(KEY3){	wrchar+=0x01;	LEDOUT=~wrchar;}
		}
		else if(func==2)
		{
			if(KEY2){ p--;LEDOUT=~(char)p;}
			else if(KEY3){ p++;LEDOUT=~(char)p;}
		}
		else if(func==3)
		{
			if(KEY2)//write at pos
			{
				XBYTE[p]=wrchar;
				LEDOUT=~(0xAA);
			}
			else if(KEY3)// chip erase
			{
				XBYTE[0x4000]=0x11;
				XBYTE[0x4001]=0x22;
				XBYTE[0x4002]=0x33;
				XBYTE[0x4003]=0x44;
				XBYTE[0x4004]=0x55;
				XBYTE[0x4005]=0x66;
				XBYTE[0x4006]=0x77;
				XBYTE[0x4007]=0x88;
				XBYTE[0x4008]=0x99;

			//	XBYTE[0x5555]=0xAA;
			//	XBYTE[0x2AAA]=0x55;
			//	XBYTE[0x5555]=0x80;
			//	XBYTE[0x5555]=0xAA;
			//	XBYTE[0x2AAA]=0x55;
			//	XBYTE[0x5555]=0x10;
				LEDOUT=~(0xFA);
			}
		}
		delay(100);
	}
#endif
}

⌨️ 快捷键说明

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