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

📄 final-at24c512.cpp

📁 DOS下读写AT24C512源码,自己开发
💻 CPP
字号:
/****************************************************************************/
/*   This program is programming change the data of hardcard(at24c512)                */
/*   date      : 2004.11.17                                                 */
/****************************************************************************/
#include <stdio.h>
#include <dir.h>
#include <fcntl.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include<iostream.h>
struct REGPACK 	inregs;
/* at24c512  D5(32)=CLK, D7(128)=SDA*/
int start[2]={160,32};
int end[2]=  {32,160};
int wrs[16]=  {128,160,0,32,128,160,0,32,0,32,0,32,0,32,0,32};
int rs[16]={128,160,0,32,128,160,0,32,0,32,0,32,0,32,128,160};
long int i,j,temp,k,l,m,n,p;
int intnu;
long int a,b;
long int address,info,start1,length;
unsigned long int read_rom(long int address);
unsigned long int write_rom(long int address,long int info);
unsigned long int writeblock(long int start1,long int length);
void ack();
void main(){
	clrscr();
	cout<<"start"<<endl;
	cin>>start1;
	cout<<"length"<<endl;
	cin>>length;
	writeblock( start1,length);
    /*for(k=0;k<50;k++)
    {
	cout<<"please input the address you want to write:  ";
	cin>>address;
	cout<<" input the num you want to write:  ";
	cin>>info;
	write_rom(address,info);


	cout<<"  input the address you want to read:  ";
	cin>>address;
	read_rom(address);
	cout<<"  the content in the address  "<<address<<"  is  "<<a<<endl<<endl;
}*/
	/*cout<<"please input the address you want to write:"<<endl;
	cin>>address;
	cout<<"please input the num you want to write:"<<endl;
	cin>>info;
	write_rom(address,info);
	read_rom(temp);
	cout<<"the content you have just written in address  "<<address<<"  is  "<<a;*/
}

unsigned long int writeblock(long int start1,long int length){
	n=start1+length;
	for (p=start1;p<n;p++){
	   //	cout<<p<<endl;
		/*cout<<"data"<<endl;*/
		/*cin>>info;*/
		m=write_rom(p, 88);
		if(m==0){
		//	m=write_rom(p,55);
	   //		if(m==0){
				cout<<"error  "<<p;
				exit;
		//	}
		}
		delay(1);
	}
}

void ack(){
	inregs.r_ax = 0;
	inregs.r_dx = 0;
	intr(0x17, &inregs);
	inregs.r_ax = 32;
	inregs.r_dx = 0;
	intr(0x17, &inregs);
	inregs.r_ax = 0;
	inregs.r_dx = 0;
	intr(0x17, &inregs);
}

unsigned long int read_rom(long int address){
	a=0;
	for(i=0;i<2;i++){
		inregs.r_ax=start[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	for(i=0;i<16;i++){
		inregs.r_ax=wrs[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	ack();
	temp=address;
	for(i=0; i<8; i++){
		j= ((temp >> (15-i)) % 2) * 128;
		inregs.r_ax = 0+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
		inregs.r_ax = 32+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
	}
	ack();
	for(i=8; i<16; i++){
		j= ((temp >> (15-i)) % 2) * 128;
		inregs.r_ax = 0+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
		inregs.r_ax = 32+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
	}
	ack();
	for(i=0;i<2;i++){
		inregs.r_ax=start[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	for(i=0;i<16;i++){
		inregs.r_ax=rs[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	/*ack();*/
	inregs.r_ax = 0;
	inregs.r_dx = 0;
	intr(0x17, &inregs);
	//	delay(1);

	for(i=0; i<8; i++){
		inregs.r_ax = 160;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
		inregs.r_ax = 128;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
	   //	delay(1);
		intnu = !((inregs.r_ax & 0x4000) >> 14);
		a = (a << 1) + intnu;
	}

	ack();
	for(i=0;i<2;i++){
		inregs.r_ax=end[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}

	return a;
}


unsigned long int write_rom(long int address,long int info){
	for(i=0;i<2;i++){
		inregs.r_ax=start[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	for(i=0;i<16;i++){
		inregs.r_ax=wrs[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	ack();

	temp=address;
	for(i=0; i<8; i++){
		j= ((temp >> (15-i)) % 2) * 128;
		inregs.r_ax = 0+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
		inregs.r_ax = 32+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
	}
	ack();
	for(i=8; i<16; i++){
		j= ((temp >> (15-i)) % 2) * 128;
		inregs.r_ax = 0+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
		inregs.r_ax = 32+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
	}
	/*ack();*/
	inregs.r_ax = 0;
	inregs.r_dx = 0;
	intr(0x17, &inregs);
	inregs.r_ax = 32;
	inregs.r_dx = 0;
	intr(0x17, &inregs);

	for(i=0; i<8; i++){
		j = ((info >> (7-i)) % 2) * 128;
		inregs.r_ax = 0+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
		inregs.r_ax = 32+j;
		inregs.r_dx = 0;
		intr(0x17, &inregs);
	}
	ack();
	for(i=0;i<2;i++){
		inregs.r_ax=end[i];
		inregs.r_dx=0;
		intr(0x17,&inregs);
	}
	delay(5);
	l=read_rom(temp);

	if(l!=info)  return 0;
		else return 1;
}

























⌨️ 快捷键说明

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