📄 flash test.txt
字号:
/*-------------------------------------------
4个电阻的下载线引脚定义如下:
SCK 并口6脚
MOSI 并口7脚
RESET 并口9脚
MISO 并口10脚
-------------------------------------------*/
class PARALLEL
{
public:
BYTE OutBuf[6]; //输入单片机的数据
BYTE InBuf[6]; //单片机返回的数据
void setSck(BYTE n); //设置输入时钟
void setRst(BYTE n); //设置复位引脚
void setMosi(BYTE n); //设置输入引脚
BOOL getMiso(); //得到引脚返回值
void preparePro(); //初使准备编程化并口
void sckBytes(int nBytes); //输入一组数据到单片机
void readSign(BYTE *buf); //读特征字
};
void PARALLEL::setSck(BYTE n)
{
BYTE u=ReadByte(0x378);
if(n==0) u&=0xef;
else u|=0x10;
WriteByte(0x378,u);
}
void PARALLEL::setRst(BYTE n)
{
BYTE u=ReadByte(0x378);
if(n==0) u&=0x7f;
else u|=0x80;
WriteByte(0x378,u);
}
void PARALLEL::setMosi(BYTE n)
{
BYTE u=ReadByte(0x378);
if(n==0) u&=0xdf;
else u|=0x20;
WriteByte(0x378,u);
}
BOOL PARALLEL::getMiso()
{
BOOL u=ReadByte(0x379);
u&=0x40;
if(u>0) return TRUE;
else return FALSE;
}
void PARALLEL::preparePro()
{
setRst(1);
setSck(0);
setMosi(0);
Sleep(20);
setRst(0); //编程前置低电平
Sleep(20);
OutBuf[0]=0xac;
OutBuf[1]=0x53;
sckBytes(4);
}
void PARALLEL::sckBytes(int nBytes)
{
for(int n=0;n<nBytes;n++)
{
setSck(0);
setMosi((OutBuf[n] & 0x80));//SCK为低电平时,发送一位
setSck(1);
if(getMiso())//SCK为高电平时,接收一位
{
InBuf[n]=InBuf[n] | 0x80;
}
else
{
InBuf[n]=InBuf[n] & 0x7f;
}
setSck(0);
setMosi((OutBuf[n] & 0x40));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x40;
}
else
{
InBuf[n]=InBuf[n] & 0xbf;
}
setSck(0);
setMosi((OutBuf[n] & 0x20));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x20;
}
else
{
InBuf[n]=InBuf[n] & 0xdf;
}
setSck(0);
setMosi((OutBuf[n] & 0x10));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x10;
}
else
{
InBuf[n]=InBuf[n] & 0xef;
}
setSck(0);
setMosi((OutBuf[n] & 0x08));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x08;
}
else
{
InBuf[n]=InBuf[n] & 0xf7;
}
setSck(0);
setMosi((OutBuf[n] & 0x04));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x04;
}
else
{
InBuf[n]=InBuf[n] & 0xfb;
}
setSck(0);
setMosi((OutBuf[n] & 0x02));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x02;
}
else
{
InBuf[n]=InBuf[n] & 0xfd;
}
setSck(0);
setMosi((OutBuf[n] & 0x01));
setSck(1);
if(getMiso())
{
InBuf[n]=InBuf[n] | 0x01;
}
else
{
InBuf[n]=InBuf[n] & 0xfe;
}
setSck(0);
}
}
void PARALLEL::readSign(BYTE *buf)
{
OutBuf[0]=0x30;
OutBuf[1]=0x0;
for(int i=0;i<4;i++)
{
OutBuf[2]=i;
sckBytes(4);
buf[i]=InBuf[3];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -