📄 95m.cpp
字号:
// 95m.cpp
// Program the AT24C01 EEPROM
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\types.h>
void write_eeprom();
#include <sys\stat.h>
void change_data();
void save_data();
void read_custom_file();
void read_eeprom();
void verify_eeprom();
void program_default();
void read_ks8995m_registers();
void delay();
using namespace std;
#define SDA 0x378 //x--- ---- pin 9 (_output)
#define SCL 0x37a //---- -x-- pin 16 (_output)
#define ACK 0x379 //-x-- ---- pin 10 (input) pin 2 and pin 10 connected by a diode
FILE *gold_file;
unsigned char gold_data[128];
unsigned char compare[128];
int i;
unsigned char c;
char space_bar;
char choice;
int address;
unsigned long a;
unsigned char verify;
int main()
{
if ((gold_file = fopen("95m.dat", "rb")) == NULL)
{
printf("file open failed. \n");
exit (0);
}
printf(" KENDIN COMMUNICATIONS\n");
printf(" Sunnyvale, California\n");
printf(" TEL: (408) 735 1118 x253\n");
printf(" J. Yu 6/2000 V1.0\n\n\n");
printf(" 24C01 EEPROM PROGRAMMER\n\n");
printf("Connect a DB25 cable from parallel printer port to KS8995E demo board.\n");
printf("Set printer port to NORMAL mode.\n\n\n");
printf("Push ENTER to continue.\n");
scanf("%c", &space_bar);
printf("Contents of default data:\n");
printf(" # data # data # data # data # data # data # data # data # data # data\n");
for (i=-1; i<128;i++)
{
gold_data[i]=c;
c=fgetc(gold_file);
if (i == -1)
{}
else
printf("%3x %3x ", i,gold_data[i]);
}
fclose(gold_file);
start: printf("\n");
printf("\nEnter Option:\n");
printf("1. Write EEPROM\n");
printf("2. Change buffer data\n");
printf("3. Save buffer to file (Enter file name)\n");
printf("4. Read custom file\n");
printf("5. Read EEPROM to buffer \n");
printf("6. Verify EEPROM\n");
printf("7. Program default values\n");
printf("8. Read KS8995M registers\n");
printf("9. Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1: write_eeprom();
goto start;
case 2: change_data();
goto start;
case 3: save_data();
goto start;
case 4: read_custom_file();
goto start;
case 5: read_eeprom();
goto start;
case 6: verify_eeprom();
goto start;
case 7: program_default();
goto start;
case 8: read_ks8995m_registers();
goto start;
case 9: exit(0);
default:
exit (0);
}
}
//-----------------------------------------------------------------------------------------
void write_eeprom()
{
for ( address=0; address<128; address++)
{
initial:
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //start condition
_outp(SDA, 0x00);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //write control byte '1010 000 0'
_outp(SCL, 0x04);delay(); //'1'
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //'1'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0' write condition
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //acknowledge
verify = _inp(ACK); //verify acknowledge
verify = verify & 0x40;
if (verify != 0x00)
{
goto initial;
}
else
_outp(SCL, 0x00);delay();
unsigned char addr=address;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
//printf("%d ", address);
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
addr <<=1;
_outp(SDA, addr);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //acknowledge
_outp(SCL, 0x00);delay();
unsigned char data= gold_data[address];
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
data<<=1;
_outp(SDA, data);delay(); //write data
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //acknowledge
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay();
_outp(SCL, 0x04);delay(); //stop condition, end data write
_outp(SDA, 0x80);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay();
for (a=0; a<10000; a++);
{}
}
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay();
}
//-----------------------------------------------------------------------------------------
void change_data()
{
printf("Contents of default data:\n");
printf(" # data # data # data # data # data # data # data # data # data # data\n");
for (int i=0; i<128;i++)
{
printf("%3d %3x ", i,gold_data[i]);
}
again: printf("\nEnter the address location you want to change. (0 to 127)\n");
int location;
cin >> location;
printf("Enter the byte in HEX format.\n");
unsigned char value;
scanf("%x",&value);
gold_data[location]=value;
printf("Done (y/n)?\n");
char done;
cin >> done;
if (done == 'y');
else {goto again;}
printf(" # data # data # data # data # data # data # data # data # data # data\n");
for (i=0; i<128;i++)
{
printf("%3d %3x ", i,gold_data[i]);
}
printf("\n");
}
//-----------------------------------------------------------------------------------------
void save_data()
{
int handle; // open file for write operation.
char filename[80];
printf("Enter the name of file to save.\n");
cin >> filename;
if (( handle= open(filename, O_CREAT|O_BINARY|O_RDWR, S_IREAD|S_IWRITE)) == -1)
{
printf("Open failed\n");
}
write(handle,gold_data,128);
}
//-----------------------------------------------------------------------------------------
void read_custom_file()
{
int handle; // open file for read operation.
char filename[80];
printf("Enter the name of file to read.\n");
cin >> filename;
if (( handle= open(filename, O_CREAT|O_BINARY|O_RDWR, S_IREAD|S_IWRITE)) == -1)
{
printf("Open failed\n");
}
read(handle,gold_data,128);
printf(" # data # data # data # data # data # data # data # data # data # data\n");
for (i=0; i<128;i++)
{
printf("%3d %3x ", i,gold_data[i]);
}
}
//-----------------------------------------------------------------------------------------
void read_eeprom()
{
unsigned char indata=0; //input data buffer
unsigned char data=0;
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //start condition
_outp(SDA, 0x00);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //write control byte '1010 000 0'
_outp(SCL, 0x04);delay(); //'1'
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //'1'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0' write condition
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //acknowledge
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //write address
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //acknowledge
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //start condition
_outp(SDA, 0x00);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //write control byte '1010 000 1'
_outp(SCL, 0x04);delay(); //'1'
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //'1'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x00);delay(); //'0'
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay(); //'1' read condition
_outp(SCL, 0x04);delay();
_outp(SCL, 0x00);delay();
_outp(SDA, 0x80);delay();
_outp(SCL, 0x04);delay(); //acknowledge
_outp(SCL, 0x00);delay();
for ( address=0; address<129; address++)
{
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);
indata<<=1;
indata >>= 7; // clear up unwanted bits
indata <<=7;
data=0x00;
data = data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);
indata <<=1; //clear up unwanted bits
indata >>=7;
indata <<=6;
data = data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);delay(); //read data
indata <<=1; //clear up unwanted bits
indata >>=7;
indata <<=5;
data = data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);delay(); //read data
indata <<=1; //clear up unwanted bits
indata >>=7;
indata <<=4;
data=data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);delay(); //read data
indata <<=1; //clear up unwanted bits
indata >>=7;
indata <<=3;
data=data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);delay(); //read data
indata <<=1; //clear up unwanted bits
indata >>=7;
indata <<=2;
data=data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
indata=_inp(ACK);delay(); //read data
indata <<=1; //clear up unwanted bits
indata >>=7;
indata <<=1;
data=data | indata;
_outp(SCL, 0x00);delay();
_outp(SCL, 0x04);delay();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -