51单片机控制硬盘资料及电路
[10-10 20:38:44] 来源:http://www.88dzw.com 微机|单片机 阅读:8463次
文章摘要: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,_Max
51单片机控制硬盘资料及电路,标签:电路设计,http://www.88dzw.comRead=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; //波特率为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 复位
delay(50);
Rst=1;
delay(255);
send_string("Reset Driver OK...\x0d\x0a");
Init(); //初始化硬盘
send_string("Initialize Driver OK,Now Read ID\x0d\x0a");
- 上一篇:一种简单的485卡电路图
《51单片机控制硬盘资料及电路》相关文章
- › T89C2051单片机有几个定时器,分别有几个工作方式,通过编程怎么控...
- › 用AT89C2051单片机制作蒸饭柜定时开关
- › DIY一台实用的51单片机编程器
- › 基于51单片机构成的工业控制系统
- › 基于AT89S51单片机的出租车计价器系统设计
- › 基于89C51单片机的编码译码显示实验电路设计
- 在百度中搜索相关文章:51单片机控制硬盘资料及电路
- 在谷歌中搜索相关文章:51单片机控制硬盘资料及电路
- 在soso中搜索相关文章:51单片机控制硬盘资料及电路
- 在搜狗中搜索相关文章:51单片机控制硬盘资料及电路