亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ide_8051.txt

?? 單片機驅動IDE硬盤的C程序
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
  for (i=0; i<40; i+=2) {
    Tmp=*(Buffer+54+i);
    *(Buffer+54+i)=*(Buffer+55+i);
    *(Buffer+55+i)=Tmp;
  }
  memcpy(DriveInfo->Model, Buffer+54, 80);
  // Terminate string...
  DriveInfo->Model[40]='\0';
  // Return the error register...
  return ReadBYTE(CMD, 1);
}

//----------------------------------------------------------------------------
// Read one sector, identified by drive, head, track and sector
// Returns contents of the Error Register (0x00 is no error detected)
//----------------------------------------------------------------------------

unsigned char ReadSector(unsigned char Drive,
                unsigned char Head, unsigned int Track, unsigned char Sector,
                unsigned char *Buffer) {
  unsigned int i;
  // Prepare parameters...
  WriteBYTE(CMD,6, 0xA0+(Drive ? 0x10:00)+Head); // CHS mode/Drive/Head
  WriteBYTE(CMD,5, Track>>8);  // MSB of track
  WriteBYTE(CMD,4, Track);     // LSB of track
  WriteBYTE(CMD,3, Sector);    // sector
  WriteBYTE(CMD,2, 0x01);      // 1 sector
  // Issue read sector command...
  WriteBYTE(CMD,7, 0x20);      // Read sector(s) command
  Timer10mSec=10000;
  while ((ReadBYTE(CMD,7) & 0x08)!=0x08 && Timer10mSec); // Wait for DRQ or ti
meout
  if (Timer10mSec==0) return 0xFF;

  // Fetch the sector...
  MSBDATA=ALLINPUT;
  LSBDATA=ALLINPUT;
  // Select address and activate CS
  SetAddress(CMD, 0);
  // Two bytes at a time
  for (i=0; i<512; i+=2) {
    nDIOR=0;
    *(Buffer+i)=LSBDATA;
    *(Buffer+i+1)=MSBDATA;
    nDIOR=1;
  }
  // Disable CS
  nCS1FX=1;
  nCS3FX=1;
  // Return the error register...
  return ReadBYTE(CMD, 1);
}

//----------------------------------------------------------------------------
// Write one sector, identified by drive, head, track and sector
// Returns contents of the Error Register (0x00 is no error detected)
//----------------------------------------------------------------------------

unsigned char WriteSector(unsigned char Drive,
                unsigned char Head, unsigned int Track, unsigned char Sector,
                unsigned char *Buffer) {
  unsigned int i;
  // Prepare parameters...
  WriteBYTE(CMD,6, 0xA0+(Drive ? 0x10:00)+Head); // CHS mode/Drive/Head
  WriteBYTE(CMD,5, Track>>8);  // MSB of track
  WriteBYTE(CMD,4, Track);     // LSB of track
  WriteBYTE(CMD,3, Sector);    // sector
  WriteBYTE(CMD,2, 0x01);      // 1 sector
  // Issue write sector command...
  WriteBYTE(CMD,7, 0x30);      // Write sector(s) command
  Timer10mSec=10000;
  while ((ReadBYTE(CMD,7) & 0x08)!=0x08 && Timer10mSec); // Wait for DRQ or ti
meout
  if (Timer10mSec==0) return 0xFF;

  // Select address and activate CS
  SetAddress(CMD, 0);
  // write sector data...
  for (i=0; i<512; i+=2) {
    LSBDATA=*(Buffer+i);
    MSBDATA=*(Buffer+i+1);
    nDIOW=0;
    nDIOW=1;
  }
  // Disable CS
  nCS1FX=1;
  nCS3FX=1;
  Timer10mSec=10000;
  while ((ReadBYTE(CMD,7) & 0xC0)!=0x40 && Timer10mSec); // Wait for DRDY and
NOT BUSY
  if (Timer10mSec==0) return 0xFF;                       //   or timeout

  // Return the error register...
  return ReadBYTE(CMD, 1);
}

//----------------------------------------------------------------------------
// Set drive mode (STANDBY, IDLE)
//----------------------------------------------------------------------------
#define STANDBY 0
#define IDLE    1
#define SLEEP   2

unsigned char SetMode(bit DriveNo, unsigned char Mode, bit PwrDown) {
  WriteBYTE(CMD, 6, 0xA0 + (DriveNo ? 0x10:0x00)); // Select drive
  WriteBYTE(CMD, 2, (PwrDown ? 0x01:0x00)); // Enable automatic power down
  switch (Mode) {
    case STANDBY: WriteBYTE(CMD,7, 0xE2); break;
    case IDLE:    WriteBYTE(CMD,7, 0xE3); break;
    // NOTE: To recover from sleep, either issue a soft or hardware reset !
    // (But not on all drives, f.ex seagate ST3655A it's not nessecary to rese
t
    // but only to go in Idle mode, But on a Conner CFA170A it's nessecary wit
h
    // a reset)
    case SLEEP:   WriteBYTE(CMD,7, 0xE6); break;
  }
  Timer10mSec=10000;
  while ((ReadBYTE(CMD,7) & 0xC0)!=0x40 && Timer10mSec); // Wait for DRDY & NO
T BUSY
  if (Timer10mSec==0) return 0xFF;                       //   or timeout

  // Return the error register...
  return ReadBYTE(CMD, 1);
}

//----------------------------------------------------------------------------
// Show all IDE registers
//----------------------------------------------------------------------------

void ShowRegisters(bit DriveNo) {
  WriteBYTE(CMD,6, 0xA0 + (DriveNo ? 0x10:0x00)); // Select drive
  printf("Reg 0=%02BX 1=%02BX 2=%02BX 3=%02BX 4=%02BX 5=%02BX 6=%02BX 7=%02BX
\n",
    ReadBYTE(CMD, 0), ReadBYTE(CMD, 1), ReadBYTE(CMD, 2), ReadBYTE(CMD, 3),
    ReadBYTE(CMD, 4), ReadBYTE(CMD, 5), ReadBYTE(CMD, 6), ReadBYTE(CMD, 7));
}

//----------------------------------------------------------------------------
// Main part
//----------------------------------------------------------------------------
void main() {
  unsigned int  i;
  char cmdbuf[15];
  tdefDriveInfo DriveInfo;
  int Head=0, Track=0, Sector=1;

 //------------------------------
 // Initialize outputs...
 //------------------------------
  nCS1FX=1;
  nCS3FX=1;
  DA0   =0;
  DA1   =0;
  DA2   =0;
  nDIOR =1;
  nDIOW =1;
  RESET =0; // Reset drive
 //------------------------------
 // configure inputs...
 //------------------------------
  nDASP   =1;
  LSBDATA =ALLINPUT;
  MSBDATA =ALLINPUT;
  INTRQ   =1;
  IORDY   =1;
 //------------------------------
 // Configure onchip resources...
 //------------------------------
  TMOD |= 0x01;               // TMOD: timer 0, mode 1, 16 timer
  TH0   = 0xDC;               // Set timeout period for Timer 0
  TL0   = 0x00;               // to 10 mSec timeout
  ET0   = 1;                  // Enable Timer 0 interrupts
  TR0   = 1;                  // Start timer 0

  SCON  = 0x50;               // SCON: mode 1, 8-bit UART, enable rcvr    */
  TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit reload      */
  TH1   = 0xFD;               // TH1:  reload value for 9.6 Kbaud         */
  PCON  = 0x00;               // PCON: Double baudrate, 19.2 Kbaud        */
  TR1   = 1;                  // TR1:  timer 1 run                        */
//ES    = 1;                  // ES:   Enable serial port int             */
  TI    = 1;                  // TI:   set TI to send first char of UART  */
  EA    = 1;                  // Global int enable

 //---------------------------------------------------------------------------
-
 // Let things settle, and after that, remove RESET from drive
 //---------------------------------------------------------------------------
-
  Delay(10);
  RESET=1;    // Remove reset to drive
 //---------------------------------------------------------------------------
-
 // ?
 //---------------------------------------------------------------------------
-
  printf("--------------------------------------------\n");
  printf("---------IDE EXERCISER (c) CHG 1996---------\n");
  printf("--------------------------------------------\n");
  ShowInputs();

  printf("Waiting for Initial DRDY & NOT BUSY from drive\n");
  WriteBYTE(CMD,6, 0xA0); // Set drive/Head register, ie. select drive 0
  while ((ReadBYTE(CMD,7) & 0xC0)!=0x40); // Wait for DRDY and NOT BUSY
  printf("Drive is ready!\n");

  printf("Spinning drive up (Going to IDLE mode)\n");
  printf("SetMode=%02bX\n", SetMode(DRIVE0, IDLE, TRUE));
  printf("Drive is ready!\n");

  printf("ReadSector=%02bX\n", ReadSector(DRIVE0, 0, 0, 1, SectorBuffer));
  HexDump(SectorBuffer, 512);
  for (i=0; i<512; i++) SectorBuffer[i]=i;

  printf("WriteSector=%02bX\n", WriteSector(DRIVE0, 0, 0, 1, SectorBuffer));
  printf("ReadSector=%02bX\n", ReadSector(DRIVE0, 0, 0, 1, SectorBuffer));
  HexDump(SectorBuffer, 512);

  while (1) {
    printf ("\nCommand: ");
    gets(cmdbuf, sizeof(cmdbuf));
    for (i=0; cmdbuf[i]!=0; i++) cmdbuf[i] = toupper(cmdbuf[i]);
    for (i = 0; cmdbuf[i] == ' '; i++);        /* skip blanks
*/

    switch (cmdbuf[i]) {
      case 'S': SetMode(DRIVE0, STANDBY, TRUE); break;
      case 'I': SetMode(DRIVE0, IDLE, TRUE);    break;
      case 'D': IdentifyDrive(DRIVE0, SectorBuffer, &DriveInfo);
                HexDump(SectorBuffer, 256);
                printf("Model         = %s\n", DriveInfo.Model);
                printf("Heads         = %bu\n",DriveInfo.Heads);
                printf("Tracks        = %u\n", DriveInfo.Tracks);
                printf("Sectors/Track = %u\n", DriveInfo.SectorsPerTrack);

        break;
      case 'R': ShowRegisters(DRIVE0); break;
      case '?':
                printf("--------------------------------------------\n");
                printf("---------IDE EXERCISER (c) CHG 1996---------\n");
                printf("--------------------------------------------\n");
                printf("Commands:\n");
                printf("  S    go to Standby mode\n");
                printf("  I    go to Idle mode\n");
                printf("  D    Identify drive\n");
                printf("  R    Show all registers\n");
                printf("  G <Head>,<Track>,<Sector> Read sector\n");
                printf("--------------------------------------------\n");
        break;
      case 'G':
        sscanf (&cmdbuf[i+1], "%d,%d,%d",
                 &Head, &Track, &Sector);
        printf("ReadSector=%02bX\n", ReadSector(DRIVE0, Head, Track, Sector, S
ectorBuffer));
        HexDump(SectorBuffer, 512);
        printf("Head=%d, Track=%d, Sector=%d\n", Head, Track, Sector);
        break;
    }
  }
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本美女一区二区| 久久久电影一区二区三区| 亚洲精品视频在线观看网站| 成人免费黄色在线| 中文字幕亚洲成人| 欧美午夜一区二区三区免费大片| 亚洲电影欧美电影有声小说| 欧美理论电影在线| 久久99蜜桃精品| 国产精品入口麻豆原神| 成人免费毛片a| 亚洲综合丁香婷婷六月香| 欧美性极品少妇| 蜜桃精品在线观看| 久久久久久久久久久电影| 国产凹凸在线观看一区二区| 亚洲免费在线视频| 日韩欧美一区在线观看| 国产高清精品久久久久| 亚洲精品少妇30p| 91精品国产欧美一区二区18| 国产aⅴ综合色| 一区二区在线观看免费| 欧美精品一区二区在线播放| 成人综合在线观看| 日韩综合小视频| 精品美女在线播放| 91丨porny丨国产| 人人精品人人爱| 国产精品第五页| 97精品久久久午夜一区二区三区 | 97久久精品人人澡人人爽| 亚洲图片欧美视频| 国产日韩精品一区二区三区 | 在线一区二区三区做爰视频网站| 午夜av一区二区三区| 日韩欧美另类在线| 成人黄色综合网站| 亚洲一区二区成人在线观看| 久久精子c满五个校花| 欧美怡红院视频| 成人福利视频在线看| 午夜精品一区二区三区三上悠亚| 国产农村妇女精品| 欧美另类高清zo欧美| 99re热这里只有精品免费视频| 一级精品视频在线观看宜春院 | 99久久久无码国产精品| 美国三级日本三级久久99| 亚洲黄色性网站| 久久一区二区视频| 在线观看免费一区| 不卡电影免费在线播放一区| 久久超级碰视频| 亚洲国产另类精品专区| 日韩一区中文字幕| 日韩欧美一二三四区| 欧美三级视频在线播放| 国产成人无遮挡在线视频| 亚洲综合免费观看高清完整版| 精品国产123| 欧美一级专区免费大片| 91美女片黄在线观看91美女| 国产麻豆视频一区| 奇米四色…亚洲| 天天综合天天做天天综合| 亚洲丝袜自拍清纯另类| 国产精品美女一区二区三区| 欧美一区二区日韩一区二区| 欧美在线观看视频在线| 国产乱码精品一区二区三区五月婷 | 成人国产精品免费观看视频| 久久er精品视频| 天天色综合天天| 午夜激情一区二区三区| 亚洲美女淫视频| 一区二区三区日本| 一区二区激情小说| 亚洲成人激情自拍| 亚洲不卡一区二区三区| 奇米色一区二区| 一区二区三区在线视频观看 | 欧美少妇bbb| 欧美性猛交xxxx乱大交退制版 | 成人福利视频在线看| 精品一区免费av| 国产精品一区二区免费不卡| 精品一区二区av| 国产成人8x视频一区二区| 国v精品久久久网| 狠狠色综合日日| 国产乱对白刺激视频不卡| 精品夜夜嗨av一区二区三区| 国产精品亚洲专一区二区三区| 国产一区二区0| 成人av网站在线观看| 色综合久久久久综合体桃花网| 欧美色图12p| 日韩一区二区电影网| 久久综合精品国产一区二区三区| 久久这里只精品最新地址| 久久久久久电影| 国产精品护士白丝一区av| 一区二区三区在线免费播放| 亚洲午夜羞羞片| 久久成人综合网| www.日本不卡| 91麻豆精品国产91久久久更新时间| 欧美日韩在线不卡| 久久青草国产手机看片福利盒子 | 日本三级韩国三级欧美三级| 久久激五月天综合精品| 国产成人午夜精品5599| 欧美日韩午夜影院| 精品国产凹凸成av人导航| 亚洲丝袜制服诱惑| 老司机一区二区| 色婷婷综合久色| 日韩一区二区三区观看| 国产精品电影一区二区三区| 午夜视黄欧洲亚洲| 国产69精品久久777的优势| 在线亚洲欧美专区二区| 久久综合成人精品亚洲另类欧美 | 一区二区三区在线观看国产| 蜜臀av性久久久久蜜臀av麻豆| 成人网在线播放| 激情综合色综合久久| 不卡av免费在线观看| 日韩精品一区二区三区三区免费 | 日韩国产在线一| 国产午夜一区二区三区| 亚洲国产一区二区在线播放| 高清不卡在线观看av| 欧美理论在线播放| 一区二区三区欧美久久| 国内精品自线一区二区三区视频| 欧美性一级生活| 中文字幕av资源一区| 日韩精品乱码免费| 色天使色偷偷av一区二区| 久久综合久色欧美综合狠狠| 亚洲一区免费观看| 91美女视频网站| 中文av字幕一区| 国内精品免费**视频| 日韩一区二区三区免费看| 亚洲激情成人在线| 91视频国产资源| 中文字幕精品综合| 国产精品123区| 欧美不卡一区二区| 美女视频黄频大全不卡视频在线播放| 一本一道综合狠狠老| 国产精品久久久爽爽爽麻豆色哟哟| 久久精品国产久精国产爱| 欧美一区午夜视频在线观看| 亚洲一区二区三区四区在线 | 日韩二区在线观看| 91九色02白丝porn| 亚洲青青青在线视频| 成人污污视频在线观看| 中文字幕欧美激情| 国产成人在线视频网址| 久久久久九九视频| 国产精品一区二区在线观看网站| 欧美一级片在线观看| 青椒成人免费视频| 欧美一区二区三级| 蜜桃久久久久久| 欧美大尺度电影在线| 久久精品二区亚洲w码| 欧美一区二区国产| 另类的小说在线视频另类成人小视频在线| 日本高清无吗v一区| 一个色综合网站| 欧美久久久久免费| 久久国内精品自在自线400部| 欧美一级xxx| 激情五月婷婷综合| 国产亚洲福利社区一区| 不卡的av在线| 亚洲欧洲www| 欧美色偷偷大香| 男男gaygay亚洲| 精品国产凹凸成av人导航| 盗摄精品av一区二区三区| 欧美国产日韩一二三区| 91国产免费观看| 日韩精品一级中文字幕精品视频免费观看| 91精品国产91综合久久蜜臀| 狠狠网亚洲精品| 最新国产精品久久精品| 欧美色区777第一页| 久久精品国产第一区二区三区| 中文字幕高清不卡| 欧美视频一区在线观看| 精品亚洲免费视频| 一区二区三区国产精品| 欧美一级免费观看|