📄 at29c040_card.c
字号:
#include <intrins.h>
#include <stdio.h>
#include "system.h"
sbit iocs = P1^7;
sbit ramcs = P3^4;
sbit flashcs = P3^4;
sbit ce=P3^5;
sbit oe=P3^6;
sbit we=P3^7;
sbit a16=P1^4;
sbit a17=P1^5;
#define inflash {flashcs = 0; iocs = 0;}
#define infram {flashcs = 1; iocs = 0;}
unsigned char time;
unsigned char d; //rec data
void int_t0(void) interrupt 1 {
time++;
}
void wait(void) {
time=0;while (time<10) {}
}
void wait10ms(void) {
TH0=150;time=0;
while (!time) {}
}
void card_to_pro(void)
{
data unsigned char dd;
unsigned int add;
a16=0;
a17=0;
for(add = 0x3ff; add < 0x440; add++)
{
inflash;
dd = XBYTE[add];
infram;
printf("%bx\r",dd);
}
}
void load(unsigned int as,unsigned char dd)
{
inflash;
XBYTE[as] = dd;
infram;
}
void erase(void)
{
a16=0;
a17=0;
load(0x5555,0xaa);
_nop_();
load(0x2aaa,0x55);
_nop_();
load(0x5555,0x80);
_nop_();
load(0x5555,0xaa);
_nop_();
load(0x2aaa,0x55);
_nop_();
load(0x5555,0x10);
wait10ms();
wait10ms();
wait10ms();
}
void unlock(void) {
unsigned char i;
a16=0;
a17=0;
load(0x5555,0xaa);
load(0x2aaa,0x55);
load(0x5555,0x80);
load(0x5555,0xaa);
load(0x2aaa,0x55);
load(0x5555,0x20);
i=0;
do {
P1=i;
ce=0;we=0;we=1;ce=1;
i++;
} while (i);
}
void vprotect()
{
a17 = 0;
a16 = 0;
inflash;
XBYTE[0x5555]=0xaa;
XBYTE[0x2aaa]=0x55;
XBYTE[0x5555]=0xa0;
infram;
}
void write_data(unsigned int m_addr,unsigned int s_sector,unsigned int acount)
{
unsigned char data cdat;
unsigned int data addraa,addrbb; /* addraa 为内存地址,addrbb 为29C020地址 */
unsigned int data i,j;
a17 = 0;
a16 = 0;
addraa=m_addr;
addrbb=s_sector*256;
for(j=acount;j>0;j--)
{
vprotect();
for(i=0;i<256;i++)
{
infram;
cdat=XBYTE[addraa];
// select_segment(s_sector/256); /*s_sector 是256的整数倍*/
inflash;
XBYTE[addrbb]=cdat;
infram;
addraa++;
addrbb++;
}
s_sector++;
wait10ms();
}
}
void serial_init (void) {
SCON = 0x50; /* mode 1: 8-bit UART, enable receiver */
TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */
PCON |= 0x80;
TH1 = 0xfd; /* reload value 19200 baud */
TR1 = 1; /* timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
}
void main(void)
{
unsigned char i;
infram;
serial_init();
CKCON |= 0x07;
ET0=TR0=1;EA=1;
wait10ms();
// protect();
erase();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -