⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash test.txt

📁 C++Builder6上位机程序关键代码:(其中一些地方参考了Easy 51Pro宇宙版的源码) 只实现了很少一部分功能
💻 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 + -