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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ata.c

?? 硬盤控制電路以及原程序Demo,知識(shí)是屬于全人類的。能將自己的成果無(wú)條件與人共享是偉大和受人尊敬的
?? C
字號(hào):
/*
硬盤控制電路以及原程序Demo
【浩惠電子 http://www.hheet.com/bbs 版權(quán)所有】 附件: 

知識(shí)是屬于全人類的。能將自己的成果無(wú)條件與人共享是偉大和受人尊敬的,同時(shí)也是一件幸福的事。
由于我想得到幸福和受人尊敬,所以我也開放我的工作成果。(其實(shí)也不算什么工作成果,匆匆忙忙用了一晚寫的,見笑了。
在此感謝邵春偉同志,我在研究ata協(xié)議的時(shí)候參考了他寫的程序) 

相信很多人都想用單片機(jī)控制硬盤來(lái)實(shí)現(xiàn)數(shù)據(jù)的海量?jī)?chǔ)存和開發(fā)一些東西(如硬盤mp3),但網(wǎng)上關(guān)于此方面的資料不多,
而真正給出原代碼和電路的更是鳳毛麟角,而且就算給出原程序,但不知是因?yàn)槭鞘д`或是本身還未理解好ata協(xié)議,
抑或是出于對(duì)知識(shí)產(chǎn)權(quán)的保護(hù)問(wèn)題,程序中有著或大或少的錯(cuò)誤。本程序只是一個(gè)演示,還不是很完善,
只是給你開發(fā)ata程序作一個(gè)參考,但我保證絕對(duì)可以使用。當(dāng)然你可以修改和擴(kuò)充一下,變成一個(gè)完善的ata驅(qū)動(dòng)程序。 

特征與使用 
程序中所有與單片機(jī)本身硬件有關(guān)的參數(shù)都在程序開始處作出定義,移植到其他類型單片機(jī)時(shí)只需修改一下引腳定義就行了。
使用時(shí)注意根據(jù)你的硬盤修改一下相應(yīng)的參數(shù)(在程序中有注解)。 

使用步驟與運(yùn)行效果 
連接好電路(很簡(jiǎn)單),在把程序燒進(jìn)芯片。
先接通硬盤電源,再打開任意一個(gè)串口調(diào)試程序,把波特率設(shè)置成57600bps,再運(yùn)行單片機(jī)即可。
效果與下: 
此主題相關(guān)圖片如下: 


電路圖: 


此主題相關(guān)圖片如下: 


源程序: 
*/
#include <at89x51.h> 



/************************************************** 
* 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ù),每個(gè)硬盤的參數(shù)都不盡相同。若不正確則讀不了盤中的數(shù)據(jù)。計(jì)算方法如下: 
先看清楚你的 硬盤表面標(biāo)簽中的數(shù)據(jù),里面有三個(gè)重要參數(shù): 
1。柱面數(shù)(Cylinder) 
2。磁頭數(shù)(Head) 
3。磁道數(shù)(Sector) 
其中 _MaxHead=0xA+Head 
_MaxSector=Sector 
例如我的130M硬盤(很老吧,哈哈),磁頭數(shù)為15,十六進(jìn)制為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 D2 D1 D0 * 
BSY DRDY DWF DSC DRQ CORR IDX ERR * 
BSY:驅(qū)動(dòng)器忙; * 
DRDY:驅(qū)動(dòng)器準(zhǔn)備好; * 
DWF:驅(qū)動(dòng)器寫失敗; * 
DSC:尋道結(jié)束; * 
DRQ:請(qǐng)求服務(wù),驅(qū)動(dòng)器希望通過(guò)數(shù)據(jù)寄存器與CPU交換一字節(jié)數(shù)據(jù);* 
CORR:當(dāng)可以糾正的讀錯(cuò)誤發(fā)生時(shí),該位置1,數(shù)據(jù)傳輸將繼續(xù)進(jìn)行 * 
IDX:收到綜引信號(hào); * 
ERR:命令執(zhí)行出錯(cuò)。 * 
*************************************************************/ 



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<ms;i++) 
for(j=0;j<255;j++); 
} 



/******************************************************* 
*讀寄存器 
********************************************************/ 
byte ReadReg(byte Addr) 
{ 
RegAddr=Addr; 
DataL=0xff; 
Read=0; 
Status=DataL; 
Read=1; 
return Status; 
} 



/******************************************************* 
*等待BSY信號(hào) 
********************************************************/ 
byte WaitBSY(void) 
{ 
byte timeOut=0; 
do{ 
ReadReg(_Status_Command); 
timeOut++; 
// if(timeOut>=254) return(0xff); 
}while(BSY); 
return(1); 

} 





/***************************************************** 
*寫寄存器值 
********************************************************/ 
void WriteReg(byte Addr,byte Data) 
{ 
RegAddr=Addr; 
Write=0; 
DataL=Data; 
Write=1; 
} 



/******************************************************* 
讀數(shù)據(jù)儲(chǔ)存器中數(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); 



} 



/********************************************************** 
*用途:將硬盤的返回?cái)?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)動(dòng)) 
void SpinUP() 
{ 
WaitBSY(); 
WriteReg(_Status_Command,0xE1); 



} 
// 讓硬盤休眠(停轉(zhuǎn))/ 
void SpinDown() 
{ 
WaitBSY(); 
WriteReg(_Status_Command,0xE0); 



} 




void main(void) 
{ 
//Initialize 
SCON=0x50; //串口初始化 
TMOD=0x20; //波特率為57600bps 
TCON=0x40; 
PCON=0x80; 
TH1=0xFf; 
TL1=0xFf; 

TR1=1; 
send_string("IDE Control Demo. Power By DDDLZHU\x0d\x0a");//send welcome word 



Rst=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(); //讀硬盤id 
send_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 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久国产字幕高潮| 欧美日韩一区三区四区| 激情文学综合丁香| 热久久久久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 一区二区三区成人| 亚洲一区二区三区四区的| 一区二区三区国产| 亚洲超碰97人人做人人爱| 香蕉影视欧美成人| 另类综合日韩欧美亚洲| 久久99热99| 豆国产96在线|亚洲| 成人精品gif动图一区| 色婷婷久久久久swag精品| 欧美日韩一区二区三区视频| 91麻豆精品久久久久蜜臀| 91麻豆精品国产91| 欧美精品一区二区三区久久久 | 亚洲美女区一区| 一区二区三区高清在线| 奇米精品一区二区三区四区| 国产一区视频导航| 91小宝寻花一区二区三区| 91国在线观看| 日韩免费视频一区二区| 国产精品乱码人人做人人爱| 一区二区三区精品久久久| 久草在线在线精品观看| www..com久久爱| 制服.丝袜.亚洲.另类.中文 | 国产精品国产三级国产有无不卡 | 欧美日韩免费不卡视频一区二区三区| 欧美巨大另类极品videosbest | 日韩视频中午一区| 久久免费偷拍视频| 亚洲欧美日韩电影| 久久精品国产在热久久| 色综合久久六月婷婷中文字幕| 欧美一区二区三区人| 国产精品久久久久一区二区三区| 91丨porny丨首页| 欧美吞精做爰啪啪高潮| 日韩午夜在线观看视频| 国产欧美日本一区二区三区| 亚洲国产精品久久艾草纯爱| 国产成人午夜精品影院观看视频 | 色婷婷综合久久| 欧美tickling网站挠脚心| 亚洲精品欧美激情| 国产一区日韩二区欧美三区| 欧美精品vⅰdeose4hd| 亚洲欧洲精品一区二区精品久久久| 日韩精品亚洲专区| 欧美亚洲尤物久久| 国产精品白丝在线| 精品亚洲国产成人av制服丝袜| 欧美熟乱第一页| 亚洲视频图片小说| 不卡欧美aaaaa| 国产精品免费视频网站| 韩国精品一区二区| 日韩欧美中文字幕公布| 天堂一区二区在线免费观看| 色婷婷激情久久| 亚洲色欲色欲www在线观看| 成人美女视频在线看| 国产欧美视频一区二区三区| 精品伊人久久久久7777人| 日韩一区二区精品葵司在线 | 欧美精品一区二区三区蜜桃视频 | 精品国产免费一区二区三区四区 | av不卡一区二区三区| 日本一区二区视频在线| 国产成人在线视频网站| 国产亚洲女人久久久久毛片| 国内精品久久久久影院色 | 顶级嫩模精品视频在线看| 久久色在线视频| 国产成人a级片| 国产精品国产馆在线真实露脸| 粉嫩绯色av一区二区在线观看| 国产嫩草影院久久久久| 成人app软件下载大全免费| 亚洲人被黑人高潮完整版| 欧美写真视频网站| 免费在线观看视频一区| 久久综合色之久久综合| 高清不卡一区二区| 亚洲欧美偷拍三级| 91超碰这里只有精品国产| 美腿丝袜一区二区三区| 国产欧美日韩一区二区三区在线观看| 粉嫩蜜臀av国产精品网站| 亚洲欧美一区二区三区国产精品 | 国产成人在线网站| 悠悠色在线精品| 3atv在线一区二区三区| 国产麻豆精品在线| 亚洲黄色录像片| 日韩三级免费观看| 成人动漫一区二区在线| 香蕉加勒比综合久久| 欧美成人在线直播| 色综合视频在线观看| 免费国产亚洲视频| 日韩码欧中文字| 欧美一区二区三区在线观看视频| 国产91在线看| 石原莉奈一区二区三区在线观看| 精品国产一区二区三区不卡| 99久久婷婷国产综合精品| 日韩国产精品91| 国产精品色呦呦| 日韩一级大片在线| 不卡一区二区三区四区| 免费成人小视频| 亚洲视频中文字幕| 欧洲色大大久久| 久久99精品一区二区三区| 日本一区二区三区四区在线视频| 在线视频国产一区| 国产精品伊人色| 日韩在线一区二区三区| 国产精品视频免费| 2023国产一二三区日本精品2022| 91久久一区二区| 成人黄色大片在线观看| 美脚の诱脚舐め脚责91 | 色综合天天综合网天天狠天天| 男女视频一区二区| 五月婷婷激情综合| 亚洲欧洲中文日韩久久av乱码| 国产日韩欧美麻豆| 欧美tickling网站挠脚心| 欧美日韩国产综合一区二区| 99久精品国产| 午夜精品影院在线观看| 国产精品国产三级国产aⅴ中文| 日韩欧美精品三级| 欧美丰满高潮xxxx喷水动漫| 一本色道a无线码一区v| 97精品视频在线观看自产线路二| 国产成人免费视频一区| 国产精品亚洲成人| 国产一区二区女| 国精产品一区一区三区mba桃花| 免费成人你懂的| 美女性感视频久久| 久久精品久久99精品久久| 麻豆精品视频在线观看免费| 免费成人结看片| 久久国产综合精品| 国内精品不卡在线| 国产伦精品一区二区三区视频青涩| 麻豆高清免费国产一区| 久久精品国产77777蜜臀| 精品一区在线看| 国产高清不卡二三区| 福利一区在线观看| 99精品欧美一区二区三区综合在线| 成人a免费在线看| 欧美日韩一卡二卡三卡 | 日本中文字幕一区二区有限公司| 亚洲黄色av一区| 午夜视频一区在线观看| 免费成人美女在线观看| 美女网站色91| 国产精品一级黄| 97超碰欧美中文字幕| 欧美色图天堂网| 日韩视频一区在线观看| 国产三级三级三级精品8ⅰ区| 亚洲天堂av一区| 亚洲国产精品麻豆| 国产真实乱对白精彩久久| 国产91对白在线观看九色| 91成人在线观看喷潮| 欧美一级理论片| 国产精品免费视频一区| 亚洲午夜精品一区二区三区他趣| 免费在线观看一区| av电影一区二区| 制服丝袜成人动漫| 中文字幕一区二区三区蜜月| 午夜精品久久一牛影视| 国产高清精品网站| 精品视频在线免费| 国产色综合一区| 亚洲小说春色综合另类电影| 久久精品国产澳门| 一本大道av一区二区在线播放| 制服丝袜国产精品| 日韩一区中文字幕| 精品一区二区影视| 欧美日韩精品一区二区天天拍小说| 久久久久久夜精品精品免费| 亚洲成人一区二区| av电影在线观看一区| 2020国产精品久久精品美国|