IC解密I2C存储卡读写实验 AT24c08a
- IC解密#include <reg51.h>
- IC解密#include <ABSACC.H>
- IC解密#define cp8155 XBYTE[0xff20]
- #define pa8155 XBYTE[0xff21]
- #define pb8155 XBYTE[0xff22]
- #define pc8155 XBYTE[0xff23]
- #define dataadr 0x4000
- //*********************************************
- //MON51必须用到的
- code unsigned char stop[3] _at_ 0x3b;
- unsigned char code DISPB[]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90,
- 0x088,0x83,0x0C6,0x0A1,0x86,0x8E,0xFF,0x0C,0xDE,0x0F3,0x08F};
- unsigned char ledbuf[6];
- sbit SCL=P3^0;
- sbit SDA=P3^1;
- sbit INS=P1^0;
- sbit WRS=P1^1;
- sbit RDS=P1^2;
- bit ack; //是否应答
- void disp(void);
- void delay(unsigned char dl);
- void Start_I2c(void);
- void Stop_I2c(void);
- void SendByte(unsigned char c);
- unsigned char RcvByte();
- bit ISendByte(unsigned char sla,unsigned char c);
- bit IRcvByte(unsigned char sla,unsigned char *c);
- void main(void)
- {
- unsigned char tmp1,tmp2;
- bit wrok,wrst; //读写正常,读写状态
- //SP=0x60;
- SP=0x53;
- tmp2=0x50;
- wrok=1; wrst=0;
- cp8155=0x43;
- while(1)
- {
- while(INS);
- delay(1);
- if (INS==0) break;
- }
- while(1)
- {
- if (wrst==0)
- {//写数据到卡
- for (tmp1=0;tmp1<0x80;tmp1++)
- {
- WRS=!WRS;
- if (ISendByte(tmp1,tmp2)==0) {wrok=0; break;}
- tmp2++;
- }
- Stop_I2c();
- }
- else
- {//从卡读数据
- for (tmp1=0;tmp1<0x80;tmp1++)
- {
- RDS=!RDS;
- if (IRcvByte(tmp1,&tmp2)==0) {wrok=0; break;}
- XBYTE[dataadr+tmp1]=tmp2; //读取数据
- }
- Stop_I2c();
- }
- if (wrok==0)
- {//读写错误
- ledbuf[0]=0x01; ledbuf[1]=0x0c; ledbuf[2]=0x10;
- ledbuf[3]=0x0E; ledbuf[4]=0x14; ledbuf[5]=0x14;//IC-ERR
- while(1) disp();
- }
- if (wrst==0) wrst=1; //向卡写数据完成后,读取数据
- else
- {//IC卡读写正确
- ledbuf[0]=0x01; ledbuf[1]=0x0c; ledbuf[2]=0x09;
- ledbuf[3]=0x00; ledbuf[4]=0x00; ledbuf[5]=0x0d;//ICgood
- while(1) disp();
- }
- }
- }

芯片解密