亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区

硬盤控制電路以及原程序

2016-07-05 15:37
硬盤控制電路以及原程序知識是屬于全人類的。能將自己的成果無條件與人共享是偉大和受人尊敬的,同時也是一件幸福的事。由于我想得到幸福和受人尊敬,所以我也開放我的工作成果。(其實也不算什么工作成果,匆匆忙忙用了一晚寫的,見笑了。在此感謝邵春偉同志,我在研究ata協議的時候參考了他寫的程序)相信很多人都想用單片機控制硬盤來實現數據的海量儲存和開發一些東西(如硬盤mp3),但網上關于此方面的資料不多,而真正給出原代碼和電路的更是鳳毛麟角,而且就算給出原程序,但不知是因為是失誤或是本身還未理解好ata協議,抑或是出于對知識產權的保護問題,程序中有著或大或少的錯誤。本程序只是一個演示,還不是很完善,只是給你開發ata程序作一個參考,但我保證絕對可以使用。當然你可以修改和擴充一下,變成一個完善的ata驅動程序。特征與使用程序中所有與單片機本身硬件有關的參數都在程序開始處作出定義,移植到其他類型單片機時只需修改一下引腳定義就行了。使用時注意根據你的硬盤修改一下相應的參數(在程序中有注解)。使用步驟與運行效果連接好電路(很簡單),在把程序燒進芯片。先接通硬盤電源,再打開任意一個串口調試程序,把波特率設置成57600bps,再運行單片機即可。效果與下:硬盤控制電路以及原程序源程序:#include /***************************************************HardDisk Control Demo * Power BY DDDLZHU*編譯環境 : KEIL C51 V7.07支持器件 : AT89C51 *COPYRIGHT (C) 2004***************************************************/#define byte unsigned char#define uint unsigned int/*************************************************//線路連接定義。如電路有變直接修改就可以了*************************************************/#define DataH P1 #define DataL P0#define RegAddr P2#define Read P3_4#define Write P3_3#define Rst P3_2/*************************************************//線路連接定義。如電路有變直接修改就可以了*************************************************///寄存器地址定義#define _Status_Control 0x16#define _Data 0x8#define _Err_Features 0x9#define _SecCount 0xa#define _SecNum 0xb#define _CylinderL 0xc#define _CylinderH 0xd#define _DeviceAndHead 0xe#define _Status_Command 0xf//**************************************************************************************//*這里為初始化硬盤的重要參數,每個硬盤的參數都不盡相同。若不正確則讀不了盤中的數據。計算方法如下:先看清楚你的 硬盤表面標簽中的數據,里面有三個重要參數:1。柱面數(Cylinder)2。磁頭數(Head)3。磁道數(Sector)其中 _MaxHead=0xA Head _MaxSector=Sector例如我的130M硬盤(很老吧,哈哈),磁頭數為15,十六進制為0xf,所以_MaxHead=0xAF,磁道數為17,所以_MaxSector=0x11*/#define _MaxHead 0xAF#define _MaxSector 0x11//************************************************************************************byte bdata Status=0x00;sbit ERR=Status^0;sbit IDX=Status^1;sbit CORR=Status^2;sbit DRQ=Status^3;sbit DSC=Status^4;sbit DF=Status^5;sbit DRDY=Status^6;sbit BSY=Status^7;/************************************************************* D7 D6 D5 D4 D3 D2D1 D0*BSYDRDYDWFDSC DRQCORRIDX ERR *BSY:驅動器忙; *DRDY:驅動器準備好;*DWF:驅動器寫失敗; *DSC:尋道結束;*DRQ:請求服務,驅動器希望通過數據寄存器與CPU交換一字節數據;*CORR:當可以糾正的讀錯誤發生時,該位置1,數據傳輸將繼續進行 *IDX:收到綜引信號; *ERR:命令執行出錯。 **************************************************************/byte Data_bufferH=0x0;byte Data_bufferL=0x0;//***************串口子程序void send_string(unsigned char *word);void send_char(unsigned char word);unsigned char get_char(void);//8888888888888888888888/*******************************************************:延遲函數 ********************************************************/void delay(byte ms){ byte i,j;for(i=0;i=254) return(0xff);}while(BSY);return(1);}/******************************************************寫寄存器值********************************************************/void WriteReg(byte Addr,byte Data){RegAddr=Addr;Write=0;DataL=Data;Write=1;}/*******************************************************讀數據儲存器中數據********************************************************/void ReadData(void){DataH=0xff;DataL=0xff;RegAddr=_Data;Read=0;Data_bufferL=DataL;Data_bufferH=DataH;Read=1;}/*******************************************************寫數據寄存器中數據********************************************************/void WriteData(void){RegAddr=_Data;Write=0;DataL=Data_bufferL;DataH=Data_bufferH;Write=1;}/**********************************************************初始化硬盤************************************************************/void Init(void){ do{WriteReg(_DeviceAndHead,0xa0); ReadReg(_Status_Command); }while(!DRDY|BSY);WriteReg(_DeviceAndHead,_MaxHead);WriteReg(_SecCount,_MaxSector);WriteReg(_Status_Command,0x91);WaitBSY();WriteReg(_Status_Command,0x10);WaitBSY();}/**********************************************************讀硬盤參數***********************************************************/ void DriverID(void) {unsigned int i=512;//send_string("Starting read driver ID\n");WaitBSY();//send_string("Now can read driver ID\n");WriteReg(_Status_Command,0xec);//send_string("Waiting..");do{ReadReg(_Status_Command);}while(BSY|!DRQ);//send_string("Now Sending\n");while(i){ReadData();send_char(Data_bufferH);send_char(Data_bufferL);i-=2;}}/*********************************************************硬盤尋址**********************************************************/WriteCHS(byte head,uint cylinder,byte sector,byte read_count){WaitBSY();WriteReg(_DeviceAndHead,0xa0|head);WriteReg(_CylinderH,(char)(cylinder>>8)); WriteReg(_CylinderL,(char)(cylinder&0x00ff));WriteReg(_SecNum,sector); WriteReg(_SecCount,read_count);}/***********************************************************用途:將硬盤的返回數據讀入BUFFER數組************************************************************/void SendData(){ uint i;i=512*15;do{ReadReg(_Status_Command);}while(BSY|!DRQ);if(ERR){send_string("\x0d\x0a Error\x0d\x0a");}while(i){ReadData();send_char(Data_bufferL);send_char(Data_bufferH);i-=2;}}// 激活硬盤(轉動)void SpinUP(){WaitBSY();WriteReg(_Status_Command,0xE1);}// 讓硬盤休眠(停轉)/void SpinDown(){WaitBSY();WriteReg(_Status_Command,0xE0);}void main(void){//Initialize SCON=0x50;//串口初始化TMOD=0x20; //波特率為57600bpsTCON=0x40;PCON=0x80;TH1=0xFf;TL1=0xFf;TR1=1;send_string("IDE Control Demo. Power By DDDLZHU\x0d\x0a");//send welcome wordRst=0; //IDE 復位delay(50);Rst=1;delay(255);send_string("Reset Driver OK...\x0d\x0a");Init(); //初始化硬盤send_string("Initialize Driver OK,Now Read ID\x0d\x0a");send_string("HardDisk ID is ....\x0d\x0a");DriverID();//讀硬盤idsend_string("\n\nNow Read The First Sector On this HardDisk\x0d\x0a\x0d\x0a");delay(244);delay(244);delay(244);delay(244);WriteCHS(0,0,1,16); //寫地址WaitBSY();WriteReg(_Status_Command,0x20); //發送讀命令SendData();send_string("\x0d\x0a\x0d\x0a Read OK,Now Shut Down The HardDisk..\x0d\x0a");SpinDown();//硬盤停轉 while(1);}//**************************************串口子程序void send_char(unsigned char word){ TI=0;SBUF=word;while(TI==0);TI=0;}void send_string(unsigned char *word){ TI=0;while(*word!=0){SBUF=*word;while(TI==0);TI=0;word ;}}unsigned char get_char(void){ RI=0;REN=1;while(RI==0);return(SBUF);RI=0;REN=0;}//88888888888888888888888888888888888888888
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日本高清视频| 亚洲国产一区二区在线| 欧美成人免费在线视频| 久久精品91久久久久久再现| 亚洲一区二区四区| 亚洲网站在线播放| 99re国产精品| 在线午夜精品自拍| 在线视频一区二区| 亚洲视频在线播放| 亚洲午夜av在线| 亚洲无人区一区| 一区二区三区色| 亚洲特色特黄| 亚洲一区二区欧美| 亚洲欧美美女| 欧美一区二区视频免费观看| 欧美在线|欧美| 欧美在线观看视频一区二区| 久久国产精品72免费观看| 欧美在线观看视频| 久久久久久999| 老色鬼久久亚洲一区二区| 米奇777在线欧美播放| 牛牛影视久久网| 欧美精品不卡| 欧美日韩国产经典色站一区二区三区| 欧美日韩免费观看一区三区| 国产精品h在线观看| 国产精品亚洲片夜色在线| 国产伦精品免费视频| 国产一区二区三区久久久久久久久 | 99成人在线| 亚洲一区亚洲二区| 欧美亚洲一区二区在线观看| 久久国产66| 欧美成人免费一级人片100| 欧美日韩伦理在线免费| 国产精品欧美久久| 精品不卡在线| 亚洲美女网站| 亚洲欧美日韩精品久久亚洲区 | 国产精品欧美一区喷水| 欧美高清视频一区二区三区在线观看 | 99re这里只有精品6| 一区二区三区黄色| 香蕉精品999视频一区二区| 久久久精品国产免费观看同学| 久久综合精品一区| 欧美了一区在线观看| 国产精品美女| 亚洲国产91| 亚洲一区二区三区久久| 亚洲二区视频在线| 亚洲视频电影图片偷拍一区| 久久精品在线播放| 欧美日韩的一区二区| 国产欧美一级| 最新日韩中文字幕| 午夜精品理论片| 日韩一级成人av| 久久久久99| 欧美日本在线观看| 国产欧美欧洲在线观看| 亚洲激情国产| 欧美中文字幕在线播放| 亚洲视频精品| 欧美mv日韩mv国产网站| 国产精品香蕉在线观看| 亚洲人成在线免费观看| 欧美一区国产二区| 亚洲资源av| 欧美精品一区二区三区蜜桃| 国产色产综合色产在线视频| 日韩性生活视频| 亚洲国产精品久久久久久女王| 亚洲一区网站| 欧美精品亚洲精品| 黑人巨大精品欧美一区二区小视频| 一区二区激情| 亚洲精品一区二| 久久久久久久激情视频| 欧美三级特黄| 亚洲国产人成综合网站| 欧美一区二区三区四区视频| 亚洲一区免费网站| 欧美激情五月| 亚洲第一二三四五区| 欧美亚洲一区| 亚洲自拍偷拍网址| 欧美精品在线视频观看| 韩日精品视频| 性欧美激情精品| 亚洲欧美日韩国产一区| 欧美日本成人| 亚洲欧洲综合| 亚洲国产日本| 另类天堂av| 国精品一区二区| 亚洲欧美三级伦理| 亚洲欧美在线一区二区| 欧美深夜影院| 日韩午夜在线| 一本色道久久| 欧美—级高清免费播放| 亚洲国产高清一区| 亚洲国产视频一区二区| 久久综合久久美利坚合众国| 国产亚洲在线观看| 亚洲欧美日韩一区二区| 午夜精品区一区二区三| 国产精品视频专区| 亚洲一级黄色| 香蕉久久一区二区不卡无毒影院 | 一区二区三区在线免费观看| 欧美怡红院视频| 久久se精品一区二区| 国产精品一区久久| 亚洲一区二区在线播放| 午夜精品久久久| 国产精品久久999| 亚洲婷婷在线| 欧美一区二区精品| 国产欧美精品一区二区色综合| 亚洲欧洲99久久| 久久精品综合一区| 伊人色综合久久天天| 亚洲国产成人一区| 欧美成人一区二免费视频软件| 在线观看视频一区二区| 亚洲欧洲日产国码二区| 欧美成人在线网站| 亚洲三级观看| 亚洲在线播放| 国产日韩精品一区| 久久精品亚洲乱码伦伦中文| 能在线观看的日韩av| 亚洲国产精品嫩草影院| 在线视频日韩| 国产精品免费区二区三区观看| 午夜精品久久久久影视 | 国产精品chinese| 亚洲综合精品| 久久这里有精品视频| 亚洲国产高清在线| 正在播放欧美视频| 国产女人18毛片水18精品| 欧美中文字幕在线播放| 欧美成人日韩| 一区二区三区高清在线 | 国内精品伊人久久久久av影院| 亚洲国内精品在线| 欧美日本中文| 亚洲欧美日韩国产另类专区| 久久人体大胆视频| 亚洲精品欧美精品| 亚欧成人在线| 伊人久久男人天堂| 亚洲私人影院| 国产主播一区二区| 日韩一区二区免费看| 国产乱码精品一区二区三区五月婷| 欧美一区二区三区视频免费| 欧美激情在线观看| 亚洲永久字幕| 免费不卡中文字幕视频| 一区二区三区欧美在线观看| 久久精品一区蜜桃臀影院| 最新69国产成人精品视频免费| 亚洲影视在线| 好看的日韩av电影| 亚洲视频大全| 激情五月综合色婷婷一区二区| 宅男精品视频| 黄色资源网久久资源365| 亚洲天堂男人| 影音先锋亚洲电影| 亚洲免费影视| 亚洲国产综合91精品麻豆| 亚欧美中日韩视频| 91久久精品日日躁夜夜躁欧美| 欧美一区二区精品在线| 91久久线看在观草草青青| 欧美在线免费| 99视频一区| 蜜臀久久99精品久久久久久9 | 久热re这里精品视频在线6| 99视频在线观看一区三区| 久久久久久9999| 亚洲视频高清| 欧美国产日本| 久久国产免费| 国产精品一区二区黑丝| 日韩写真在线| 一区二区在线视频播放| 亚洲欧美在线免费观看| 亚洲精品中文字幕在线| 久久影院午夜论| 亚洲免费视频成人| 欧美日韩精品欧美日韩精品一|