Arduino program
Arduino program
byte data;
byte AL,AH; // 16-bit address
byte lockByte; // embed lock bits here
byte SigH,SigL; // Signature Bytes
2
void setup()
{ pinMode(_MISO, INPUT);
pinMode(_MOSI, OUTPUT);
pinMode(_CLK, OUTPUT);
pinMode(RST, OUTPUT);
Serial.begin(115200); // depends on the setting of
the host PC
}
void loop()
{ while (!Serial.available()); // wait for character
if (Serial.available() > 0)
switch (Serial.read())
{
case 'p': Serial.write(progEnable());
break;
case 'r': readProgmem();
Serial.write(data);
break;
case 'a': while(!Serial.available());
AL = Serial.read();
break;
case 'A': while(!Serial.available());
AH = Serial.read();
break;
case 'd': while(!Serial.available());
data = Serial.read();
break;
case 'S': AH = 0;
AL = 0;
SigH = readSign();
Serial.write(SigH);
break;
case 's': AH = 2;
3
AL = 0;
SigL = readSign();
Serial.write(SigL);
AH = 1;
AL = 0;
SigL = readSign();
Serial.write(SigL);
break; // read SigL
case 'o': digitalWrite(RST,1);break;
case 'c': digitalWrite(RST,0);break;
case 'e': eraseChip();
Serial.write(RDY);
break;
case 'j': break;
case 'w': writeProgmem();
break; }
digitalWrite(_CLK,1);
delayMicroseconds(1);
t = digitalRead(_MISO);
digitalWrite(_CLK,0);
4
if (t) retval |= 1; else retval &= 0xFE;
retval<<=1;
intData<<= 1;
delayMicroseconds(1);
}
if (intData & 0x80) digitalWrite(_MOSI,1);
else digitalWrite(_MOSI,0);
digitalWrite(_CLK,1);
delayMicroseconds(1);
t = digitalRead(_MISO);
digitalWrite(_CLK,0);
if (t) retval |= 1;
else retval &= 0xFE;
return retval; }
byte progEnable()
{ SendSPI(0xAC);
SendSPI(0x53);
SendSPI(dummyData);
return SendSPI(dummyData); }
void eraseChip()
{ SendSPI(0xAC);
SendSPI(0x9F);
SendSPI(dummyData);
SendSPI(dummyData);
delay(520); }
5
void readProgmem()
{ SendSPI(0x20);
SendSPI(AH);
SendSPI(AL);
data = SendSPI(dummyData); }
void writeProgmem()
{ SendSPI(0x40);
SendSPI(AH);
SendSPI(AL);
SendSPI(data); }
void writeLockBits()
{ SendSPI(0xAC);
SendSPI(lockByte);
SendSPI(dummyData);
SendSPI(dummyData); }
void readLockBits()
{ SendSPI(0x24);
SendSPI(dummyData);
SendSPI(dummyData);
lockByte = SendSPI(dummyData); }
byte readSign()
{ SendSPI(0x28);
SendSPI(AH);
SendSPI(AL);
return SendSPI(dummyData); }
6
Use the following
software to burn
AT89Sxx via the
Arduino kit
7
The form of 8051 SPI programmer software