📄 源程序.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 + -