📄 final-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 + -