-
#include
#include
sfr
AUXR
=0x8E;
sfr
IAP_DATA
=
0xE2;
//Flash data register
sfr
IAP_ADDRH
=
0xE3;
//Flash address
HIGH
sfr
IAP_ADDRL
=
0xE4;
//Flash address LOW
sfr
IAP_CMD
=
0xE5;
//Flash command register
sfr
IAP_TRIG
=
0xE6;
//Flash command
trigger
sfr
IAP_CONTR
=
0xE7;
//Flash control register
sfr
P1M0
=0x91;
sfr
P1M1
=0x92;
char code DX516[3] _at_ 0x3b;//
< br>保留
0x3b
开始的
3
个字节
#define
CMD_IDLE
0
//Stand-By
#define
CMD_READ
1
//Byte-Read
#define
CMD_PROGRAM
2
//Byte-Program
#define
CMD_ERASE
3
//Sector-Erase
//#define
WAIT_TIME
0x03
#define ENABLE_IAP 0X84
sbit
ROUT
= P1^7;//
sbit
GOUT
= P1^6;//
unsigned char i=0;
unsigned char con=0;
unsigned char OUT1,OUT2;
sfr
CCON =0xd8;
sfr
CMOD =0xd9;
sfr
CCAPM1 =0xdb;
sfr
CL
=0xe9;
sfr
CH
=0xf9;
sfr
CCAP1L =0xeb;
sfr
CCAP1H =0xfb;
sfr
PCA_PWM1=0xf3;
sbit CR
=CCON^6;
void
PCA_INIT(unsigned char qwq)
{
CMOD=0x80;
CCON=0x00;
CL
=0x00;
CH =0x00;
CCAPM1 =0x42;
PCA_PWM1=0x00;
CR=1;
CCAP1H=qwq;
}
unsigned char ti=0,t_us=0,t_con=0;
unsigned char t_ms=0;
unsigned int t_time=0;
void
time0() interrupt 1 using 2
{
TH0=0xff;
TL0=0xff;
ti++;
ROUT=(OUT1>ti) ? 0:1;
GOUT=(OUT2>ti) ? 0:1;
t_con++;
if(t_con>=0x30)
{
t_con=0;
t_ms++;
t_time++;
}
}
/*void ISP_IAP_enable(void)
{
EA
=
0;
ISP_CONTR
=
ISP_CONTR & 0x18;
// 0001,1000
ISP_CONTR
=
ISP_CONTR | WAIT_TIME;
ISP_CONTR
=
ISP_CONTR | 0x80;
// 1000,0000
} */
void
ISP_IAP_disable(void)
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0X80;
IAP_ADDRL=0;
}
unsigned char
read_eeprom(unsigned int byte_addr)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_READ;
IAP_ADDRH =
byte_addr >> 8;
IAP_ADDRL
=
byte_addr;
IAP_TRIG
=
0x46;
IAP_TRIG
=
0xb9;
_nop_();
ISP_IAP_disable();
return
(IAP_DATA);
}
void
sector_erase(unsigned int sector_addr)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;
IAP_ADDRL=sector_addr;
IAP_ADDRH=sector_addr>>8;
IAP_TRIG
=
0x46;
//
触发
ISP_IAP
命令
IAP_TRIG
=
0xb9;
//
触发
ISP_IAP
命令
_nop_();
ISP_IAP_disable();
}
void wire_eeprom(unsigned int
byte_addr, unsigned char original_data)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_PROGRAM;
IAP_ADDRH =
byte_addr >> 8;
IAP_ADDRL
=
byte_addr;
IAP_DATA
=
original_data;
IAP_TRIG
=
0x46;
//
触
发
ISP_IAP
命令
IAP_TRIG
=
0xb9;
//
触
发
ISP_IAP
命令
_nop_();
ISP_IAP_disable();
}
void main()
{