#include "reg51.h"
#include "intrins.h"
#include "stdio.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
# define char unsigned char
#define int unsigned int
sfr WDT_CONTR=0xc1;
sfr IAP_DATA=0xC2;
sfr IAP_ADDRH=0xC3;
sfr IAP_ADDRL=0xC4;
sfr IAP_CMD=0xC5;
sfr IAP_TRIG=0xC6;
sfr IAP_CONTR=0xC7;
sfr AUXR=0x8E;
sfr T2H=0xD6;
sfr T2L=0xD7;
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
#define ENABLE_IAP 0x83
#define IAP_ADDRESS 0x0400
sbit ssa=P3^6;
/*
sbit sa=P0^0;
sbit sb=P0^1;
sbit sc=P0^2;
sbit sd=P0^3;
sbit se=P0^4;
sbit sf=P0^5;
sbit sg=P0^6;
sbit sh=P0^7;
sbit s1=P1^0;
sbit s2=P1^1;
sbit s3=P1^2;
sbit s4=P1^3;
sbit s5=P1^4;
*/
char dat,ia,ib,ka,kb,kc,ja,jb,jc,jd,cj,dj;
int Addr,i,nn,oo,pp;
unsigned long mm,ma,je,jf,fn,ff0;
float tt0, t0pl,tnpl,tn;
char data dis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char dis_7[17]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E,0xFF};
char scan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char data sd[5]={0x00,0x00,0x00,0x00,0x00};
char data hd[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void IapIdle()
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0x80;
IAP_ADDRL=0;
}
BYTE IapReadByte(Addr) //讀一字節
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_READ;
IAP_ADDRL=Addr;
IAP_ADDRH=Addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
dat=IAP_DATA;
IapIdle();
return dat;
}
void IapProgramByte( Addr, dat) //寫一字節
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_PROGRAM;
IAP_ADDRL=Addr;
IAP_ADDRH=Addr>>8;
IAP_DATA=dat;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
IapIdle();
}
void IapEraseSector(Addr) //扇區擦除
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;
IAP_ADDRL=Addr;
IAP_ADDRH=Addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
IapIdle();
}
|