?? 源程序.htm
字號:
IDE_DATA_H=0xFF;<br>
IDE_DATA_L=0xFF;<br>
IDE_DIOR=0;<br>
IDE_Buffer_H=IDE_DATA_H;<br>
IDE_Buffer_L=IDE_DATA_L;<br>
IDE_DIOR=1;<br>
IDE_Address=IDE_Bus_Not_Use;<br>
set_IDE_address();<br>
}*/<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////////// 寫IDE 16位,未用 ////////////////////////////////////////<br>
/*void write_IDE_16(unsigned char address)<br>
{<br>
while(!IDE_IORDY);<br>
IDE_Address=address;<br>
set_IDE_address();<br>
IDE_DIOW=0;<br>
IDE_DATA_H=IDE_Buffer_H;<br>
IDE_DATA_L=IDE_Buffer_L;<br>
IDE_DIOW=1;<br>
IDE_Address=IDE_Bus_Not_Use;<br>
set_IDE_address();<br>
}*/<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
//////////////////////////////////////////// 讀IDE
低8位 /////////////////////////////////<br>
unsigned char read_IDE_8(unsigned char address)<br>
{<br>
unsigned char temp;<br>
while(!IDE_IORDY);<br>
IDE_Address=address;<br>
set_IDE_address();<br>
IDE_DATA_H=0xFF;<br>
IDE_DATA_L=0xFF;<br>
IDE_DIOR=0;<br>
temp=IDE_DATA_L;<br>
IDE_DIOR=1;<br>
IDE_Address=IDE_Bus_Not_Use;<br>
set_IDE_address();<br>
return temp;<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////////////////// 寫IDE
低8位 /////////////////////////////////<br>
void write_IDE_8(unsigned char address,unsigned char w_data)<br>
{<br>
while(!IDE_IORDY);<br>
IDE_Address=address;<br>
set_IDE_address();<br>
IDE_DIOW=0;<br>
IDE_DATA_L=w_data;<br>
IDE_DIOW=1;<br>
IDE_Address=IDE_Bus_Not_Use;<br>
set_IDE_address();<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
////////////////////////////////////////// 從IDE讀一個字 //////////////////////////////////<br>
/*void read_IDE_word(void)<br>
{<br>
read_IDE_16(IDE_Data);<br>
}*/<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////////////// 往IDE寫一個字 ///////////////////////////////////<br>
/*void write_IDE_word(void)<br>
{<br>
write_IDE_16(IDE_Data);<br>
}*/<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
//////////////////////////////////////// 讀
IDE 狀態寄存器 /////////////////////////////////<br>
void read_IDE_status(void)<br>
{<br>
IDE_status=read_IDE_8(IDE_Status); //結果保存在狀態寄存器中<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
////////////////////////////////////// 讀
IDE 錯誤寄存器 ///////////////////////////////////<br>
void read_IDE_error(void)<br>
{<br>
IDE_error_register=read_IDE_8(IDE_Error_Register); //結果保存在錯誤寄存器中<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////////// 等待IDE ///////////////////////////////////////////<br>
unsigned char wait_IDE_busy(void)<br>
{<br>
while(!IDE_IORDY);<br>
do<br>
{<br>
read_IDE_status();<br>
if(IDE_ERR)<br>
{<br>
read_IDE_error();<br>
}<br>
}while(IDE_BSY);<br>
IDE_Address=IDE_Bus_Not_Use;<br>
set_IDE_address();<br>
return 0;<br>
}<br>
//////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
//////////////////////////////////////// 寫
IDE 命令 /////////////////////////////////////<br>
void write_IDE_command(unsigned char command)<br>
{<br>
write_IDE_8(IDE_Command,command);<br>
wait_IDE_busy();<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
//////////////////////////////////////// IDE
軟復位 /////////////////////////////////////<br>
/*(void soft_reset_IDE(void)<br>
{<br>
write_IDE_8(IDE_Device_Control,0xFD);<br>
wait_IDE_busy();<br>
}<br>
*/<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////////////// 寫IDE
邏輯塊地址LBA //////////////////////////////<br>
void write_IDE_LBA(unsigned long int _LBA)<br>
{<br>
unsigned char LBA0;<br>
LBA0=((unsigned char *)&_LBA)[0];<br>
LBA0&=0x0F;<br>
LBA0|=0xE0;//磁盤0工作在LBA模式下<br>
write_IDE_8(IDE_LBA_Bits_24_27,LBA0);<br>
write_IDE_8(IDE_LBA_Bits_16_23,((unsigned char *)&_LBA)[1]);<br>
write_IDE_8(IDE_LBA_Bits_8_15,((unsigned char *)&_LBA)[2]);<br>
write_IDE_8(IDE_LBA_Bits_0_7,((unsigned char *)&_LBA)[3]);<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
unsigned char xdata buffer[512]; //扇區緩沖<br>
<br>
unsigned int byte_offset; //字節偏移<br>
unsigned char disk_error=0; //磁盤錯誤<br>
<br>
<br>
DPT xdata dpt[4]; //磁盤分區表<br>
DBR xdata dbr[4]; //DOS引導記錄<br>
<br>
<br>
unsigned long int xdata FAT_start_sector[4]; //FAT開始扇區<br>
unsigned long int xdata DATA_start_sector[4]; //數據開始扇區<br>
<br>
unsigned char mp3_file_exist=0;<br>
<br>
unsigned char xdata FAT_buffer[512]; //文件分配表FAT緩沖<br>
<br>
////////////////////////////////////// 寫扇區計數寄存器 ///////////////////////////////////////////<br>
void write_IDE_sector_count(unsigned char count)<br>
{<br>
write_IDE_8(IDE_Sector_Count,count);<br>
}<br>
/////////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////// 讀取一個FAT扇區,512字節保存在FAT_buffer[]中 ///////////////////////<br>
void read_IDE_FAT_sector(unsigned long int LBA)<br>
{<br>
unsigned int i;<br>
write_IDE_LBA(LBA);<br>
write_IDE_sector_count(1);<br>
write_IDE_command(IDE_Read_Sectors);<br>
IDE_Address=IDE_Data;<br>
set_IDE_address();<br>
IDE_DATA_H=0xFF;<br>
IDE_DATA_L=0xFF;<br>
for(i=0;i<512;i++)<br>
{<br>
while(!IDE_IORDY);<br>
IDE_DIOR=0;<br>
FAT_buffer[i]=IDE_DATA_L;<br>
i++;<br>
FAT_buffer[i]=IDE_DATA_H;<br>
IDE_DIOR=1;<br>
}<br>
IDE_Address=IDE_Bus_Not_Use;<br>
set_IDE_address();<br>
IDE_DATA_L=0xFF;<br>
}<br>
///////////////////////////////////////////////////////////////////////////////////////////////<br>
<br>
///////////////////////////////// 讀取一個數據扇區,512字節保存在buffer[]中
//////////////////<br>
void read_IDE_sector(unsigned long int LBA)<br>
{<br>
unsigned int i;<br>
write_IDE_LBA(LBA);<br>
write_IDE_sector_count(1);<br>
write_IDE_command(IDE_Read_Sectors);<br>
IDE_Address=IDE_Data;<br>
set_IDE_address();<br>
IDE_DATA_H=0xFF;<br>
IDE_DATA_L=0xFF;<br>
for(i=0;i<512;i++)<br>
{<br>
while(!IDE_IORDY);<br>
IDE_DIOR=0;<br>
buffer[i]=IDE_DATA_L;<br>
i++;<br>
buffer[i]=IDE_DATA_H;<br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -