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

硬盤控制電路以及原程序

2016-07-05 15:37
硬盤控制電路以及原程序知識是屬于全人類的。能將自己的成果無條件與人共享是偉大和受人尊敬的,同時也是一件幸福的事。由于我想得到幸福和受人尊敬,所以我也開放我的工作成果。(其實也不算什么工作成果,匆匆忙忙用了一晚寫的,見笑了。在此感謝邵春偉同志,我在研究ata協(xié)議的時候參考了他寫的程序)相信很多人都想用單片機控制硬盤來實現(xiàn)數(shù)據(jù)的海量儲存和開發(fā)一些東西(如硬盤mp3),但網(wǎng)上關(guān)于此方面的資料不多,而真正給出原代碼和電路的更是鳳毛麟角,而且就算給出原程序,但不知是因為是失誤或是本身還未理解好ata協(xié)議,抑或是出于對知識產(chǎn)權(quán)的保護問題,程序中有著或大或少的錯誤。本程序只是一個演示,還不是很完善,只是給你開發(fā)ata程序作一個參考,但我保證絕對可以使用。當(dāng)然你可以修改和擴充一下,變成一個完善的ata驅(qū)動程序。特征與使用程序中所有與單片機本身硬件有關(guān)的參數(shù)都在程序開始處作出定義,移植到其他類型單片機時只需修改一下引腳定義就行了。使用時注意根據(jù)你的硬盤修改一下相應(yīng)的參數(shù)(在程序中有注解)。使用步驟與運行效果連接好電路(很簡單),在把程序燒進芯片。先接通硬盤電源,再打開任意一個串口調(diào)試程序,把波特率設(shè)置成57600bps,再運行單片機即可。效果與下:硬盤控制電路以及原程序源程序:#include /***************************************************HardDisk Control Demo * Power BY DDDLZHU*編譯環(huán)境 : 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//**************************************************************************************//*這里為初始化硬盤的重要參數(shù),每個硬盤的參數(shù)都不盡相同。若不正確則讀不了盤中的數(shù)據(jù)。計算方法如下:先看清楚你的 硬盤表面標簽中的數(shù)據(jù),里面有三個重要參數(shù):1。柱面數(shù)(Cylinder)2。磁頭數(shù)(Head)3。磁道數(shù)(Sector)其中 _MaxHead=0xA Head _MaxSector=Sector例如我的130M硬盤(很老吧,哈哈),磁頭數(shù)為15,十六進制為0xf,所以_MaxHead=0xAF,磁道數(shù)為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:驅(qū)動器忙; *DRDY:驅(qū)動器準備好;*DWF:驅(qū)動器寫失?。?*DSC:尋道結(jié)束;*DRQ:請求服務(wù),驅(qū)動器希望通過數(shù)據(jù)寄存器與CPU交換一字節(jié)數(shù)據(jù);*CORR:當(dāng)可以糾正的讀錯誤發(fā)生時,該位置1,數(shù)據(jù)傳輸將繼續(xù)進行 *IDX:收到綜引信號; *ERR:命令執(zhí)行出錯。 **************************************************************/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/*******************************************************:延遲函數(shù) ********************************************************/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;}/*******************************************************讀數(shù)據(jù)儲存器中數(shù)據(jù)********************************************************/void ReadData(void){DataH=0xff;DataL=0xff;RegAddr=_Data;Read=0;Data_bufferL=DataL;Data_bufferH=DataH;Read=1;}/*******************************************************寫數(shù)據(jù)寄存器中數(shù)據(jù)********************************************************/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();}/**********************************************************讀硬盤參數(shù)***********************************************************/ 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);}/***********************************************************用途:將硬盤的返回數(shù)據(jù)讀入BUFFER數(shù)組************************************************************/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;}}// 激活硬盤(轉(zhuǎn)動)void SpinUP(){WaitBSY();WriteReg(_Status_Command,0xE1);}// 讓硬盤休眠(停轉(zhuǎn))/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 復(fù)位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); //發(fā)送讀命令SendData();send_string("\x0d\x0a\x0d\x0a Read OK,Now Shut Down The HardDisk..\x0d\x0a");SpinDown();//硬盤停轉(zhuǎn) 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亚洲国产精品_日韩亚洲一区二区
最新国产の精品合集bt伙计| 亚洲欧美一区二区视频| 一本大道久久a久久综合婷婷| 国产欧美高清| 国产精品红桃| 欧美先锋影音| 欧美三区美女| 欧美日韩在线高清| 欧美人与禽猛交乱配视频| 欧美国产日韩一区二区三区| 毛片一区二区| 欧美成人在线影院| 欧美大学生性色视频| 免费永久网站黄欧美| 美女国内精品自产拍在线播放| 久久久久久网址| 久久综合网色—综合色88| 久久久噜噜噜久噜久久| 久久久99久久精品女同性| 久久精品日韩| 久久人91精品久久久久久不卡| 久久嫩草精品久久久久| 免费短视频成人日韩| 免费精品99久久国产综合精品| 猛男gaygay欧美视频| 欧美福利小视频| 欧美精品综合| 国产精品极品美女粉嫩高清在线 | 一区二区三区在线视频免费观看 | 亚洲国产日韩欧美在线动漫| 亚洲人线精品午夜| 夜夜嗨av一区二区三区| 亚洲在线视频网站| 久久精品一本| 亚洲久色影视| 欧美精品一区在线发布| 黄色影院成人| 亚洲黄一区二区三区| 9久草视频在线视频精品| 亚洲一线二线三线久久久| 欧美一区二区大片| 亚洲国产日韩欧美在线动漫| 一区二区三区免费网站| 欧美主播一区二区三区| 欧美成人日韩| 国产精品视频yy9299一区| 国内精品视频一区| 亚洲精品视频二区| 欧美亚洲在线| 日韩午夜免费| 欧美一区二区三区四区在线| 你懂的成人av| 国产精品久久久久久福利一牛影视| 国产午夜精品久久久久久免费视| 亚洲福利视频二区| 亚洲午夜精品在线| 亚洲国产成人av| 在线亚洲欧美| 久热精品在线视频| 欧美午夜www高清视频| 国产在线拍揄自揄视频不卡99| 亚洲精品美女久久久久| 午夜精品久久久久久久99水蜜桃 | 一区二区在线视频播放| 亚洲日本电影| 午夜在线精品偷拍| 一本色道**综合亚洲精品蜜桃冫| 欧美中文在线字幕| 欧美伦理91i| 国产亚洲一区二区三区在线观看| 日韩午夜精品| 亚洲成色999久久网站| 亚洲一区二区三区午夜| 老牛嫩草一区二区三区日本| 国产精品国产| 亚洲激情中文1区| 欧美在线日韩在线| 亚洲视频一区二区| 蜜臀91精品一区二区三区| 国产精品一区二区久久久久| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美日韩在线综合| 一区二区三区www| 牛人盗摄一区二区三区视频| 国产欧美在线看| 正在播放亚洲| 一区二区久久| 欧美国内亚洲| 国外成人在线视频| 亚洲在线不卡| 亚洲图片自拍偷拍| 欧美二区不卡| 亚洲国产专区校园欧美| 久久久国产视频91| 欧美性理论片在线观看片免费| 亚洲第一色中文字幕| 午夜亚洲性色福利视频| 亚洲欧美国产一区二区三区| 欧美激情综合五月色丁香小说| 很黄很黄激情成人| 午夜精品国产| 欧美一区二区网站| 国产精品色婷婷久久58| 一本色道久久综合亚洲精品不卡| 亚洲乱码日产精品bd| 免费一级欧美片在线播放| 黄色免费成人| 亚洲高清久久| 久久综合99re88久久爱| 好吊一区二区三区| 久久se精品一区精品二区| 久久精品国产一区二区三区| 国产精品视频免费观看| 亚洲一区二区精品视频| 亚洲欧美韩国| 国产精品扒开腿爽爽爽视频 | 久久精品视频在线| 国产伦精品一区| 亚洲在线日韩| 欧美一区二区三区久久精品茉莉花| 欧美亚州一区二区三区| 亚洲少妇自拍| 午夜精品久久一牛影视| 国产精品视频| 午夜精品一区二区三区在线视| 欧美在线视频导航| 国产一区二区av| 亚洲国产成人久久| 欧美jizz19性欧美| 亚洲欧洲久久| 亚洲无吗在线| 国产欧美亚洲精品| 亚洲高清资源综合久久精品| 久久亚洲免费| 亚洲七七久久综合桃花剧情介绍| 99视频精品全国免费| 欧美午夜激情在线| 亚洲欧美国产另类| 久久久久www| 在线播放亚洲一区| 一区二区激情| 国产精品日日摸夜夜添夜夜av | 免费不卡中文字幕视频| 亚洲激情校园春色| 亚洲综合丁香| 国产在线观看精品一区二区三区 | 欧美在线一区二区三区| 一区二区三区我不卡| 99精品欧美一区二区三区综合在线 | 亚洲日本激情| 中文欧美日韩| 国产欧美韩日| 亚洲国产精品成人精品| 欧美日韩hd| 亚洲制服av| 老鸭窝毛片一区二区三区 | 亚洲欧洲综合另类在线| 亚洲欧美日韩成人高清在线一区| 国产欧美另类| 亚洲国产天堂网精品网站| 欧美日韩999| 午夜精品久久久久久久久久久| 快she精品国产999| 一本综合久久| 久久综合久久综合这里只有精品 | 国产精品亚洲综合色区韩国| 亚洲国产精品va| 欧美日韩一区二区三区免费看| 亚洲欧美日韩国产中文在线| 久久综合九色综合欧美就去吻| 亚洲麻豆国产自偷在线| 欧美在线一二三四区| 亚洲欧洲在线免费| 久久国产精品久久国产精品| 亚洲国产精品毛片| 欧美一区二区三区视频在线| 亚洲国产精品999| 午夜一区二区三区不卡视频| 亚洲国产精品传媒在线观看| 午夜日韩av| 最新中文字幕一区二区三区| 久久av在线| 99热免费精品| 六月婷婷久久| 亚洲欧美999| 欧美人交a欧美精品| 亚洲第一福利社区| 国产精品婷婷| 99精品福利视频| 狠狠色综合色综合网络| 午夜精品国产精品大乳美女| 亚洲片区在线| 美女主播一区| 午夜欧美理论片| 国产精品yjizz| 99国内精品久久| 伊人春色精品| 久久成人精品电影| 99re热这里只有精品视频| 美日韩免费视频|