⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ide.lst

📁 51单片机硬盘MP3播放器 的原理图及源代码 增加了USB下载文件功能; 汉字LCD显示功能;子文件夹功能等。并对软件做了一些修改。并将硬件电路图画出来了。由于做得仓促
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   IDE                                                                   03/02/2006 23:11:50 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE IDE
OBJECT MODULE PLACED IN IDE.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IDE.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /************************************************************************************
   2            本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
   3          
   4             IDE.C File
   5             Created by Computer-lov. Date: 2005.3.19
   6             Last edited date: 2005.5.31
   7             version 1.1
   8             Copyright (c) 2005 Computer-lov
   9             All rigths reserved
  10          **************************************************************************************/
  11          
  12          #include "AT89C51SND1C.h"
  13          #include "file_system.h"
  14          #include "IDE.H"
  15          #include "hardware.h"
  16          
  17          #include "lcd.h"
  18          
  19          unsigned char  DISK_CAPACITY[8];
  20          unsigned char driver_number=0;             //磁盘驱动器
  21          
  22          //////////////////////////////////////   IDE 状态寄存器  ////////////////////////////////////
  23          unsigned char bdata IDE_status;
  24          sbit IDE_BSY  =  IDE_status^7;
  25          sbit IDE_DRDY =  IDE_status^6;
  26          sbit IDE_DWF  =  IDE_status^5;
  27          sbit IDE_DSC  =  IDE_status^4;
  28          sbit IDE_DRQ  =  IDE_status^3;
  29          sbit IDE_CORR =  IDE_status^2;
  30          sbit IDE_IDX  =  IDE_status^1;
  31          sbit IDE_ERR  =  IDE_status^0;
  32          //////////////////////////////////////////////////////////////////////////////////////////////
  33          
  34          //////////////////////////////////////   IDE 错误寄存器  ////////////////////////////////////
  35          unsigned char bdata IDE_error_register;
  36          sbit IDE_BBK  =   IDE_error_register^7;
  37          sbit IDE_UNC  =   IDE_error_register^6;
  38          sbit IDE_MC   =   IDE_error_register^5;
  39          sbit IDE_IDNF =   IDE_error_register^4;
  40          sbit IDE_MCR  =   IDE_error_register^3;
  41          sbit IDE_ABRT =   IDE_error_register^2;
  42          sbit IDE_TKONF=   IDE_error_register^1;
  43          sbit IDE_AMNF =   IDE_error_register^0;
  44          //////////////////////////////////////////////////////////////////////////////////////////////
  45          
  46          //////////////////////////////////////////////////////////////////////////////////////////////
  47          void delayXms(unsigned int x)   //延时x毫秒,时间不准的
  48          {
  49   1       unsigned int i;
  50   1       for(;x>0;x--)
  51   1        for(i=0;i<500;i++);
  52   1      }
  53          //////////////////////////////////////////////////////////////////////////////////////////////
  54          
  55          /////////////////////////////////   IDE 复位  ///////////////////////////////////////////////
C51 COMPILER V7.06   IDE                                                                   03/02/2006 23:11:50 PAGE 2   

  56          void reset_IDE(void)
  57          {
  58   1       IDE_Address=IDE_Reset;
  59   1       IDE_ALE=1;
  60   1       IDE_ALE=0;
  61   1       delayXms(200);
  62   1       IDE_Address=IDE_Bus_Not_Use;
  63   1       IDE_ALE=1;
  64   1       IDE_ALE=0;
  65   1       delayXms(200);
  66   1       while(!IDE_IORDY);
  67   1      }
  68          ///////////////////////////////////////////////////////////////////////////////////////////////
  69          
  70          /////////////////////////////////////  读IDE 16位,未用  ////////////////////////////////////////
  71          /*void read_IDE_16(unsigned char address)
  72          {
  73           while(!IDE_IORDY);
  74           IDE_Address=address;
  75           set_IDE_address();
  76           IDE_DATA_H=0xFF;
  77           IDE_DATA_L=0xFF;
  78           IDE_DIOR=0;
  79           IDE_Buffer_H=IDE_DATA_H;
  80           IDE_Buffer_L=IDE_DATA_L;
  81           IDE_DIOR=1;
  82           IDE_Address=IDE_Bus_Not_Use;
  83           set_IDE_address();
  84          }*/
  85          ///////////////////////////////////////////////////////////////////////////////////////////////
  86          
  87          /////////////////////////////////////  写IDE 16位,未用  ////////////////////////////////////////
  88          /*void write_IDE_16(unsigned char address)
  89          {
  90           while(!IDE_IORDY);
  91           IDE_Address=address;
  92           set_IDE_address();
  93           IDE_DIOW=0;
  94           IDE_DATA_H=IDE_Buffer_H;
  95           IDE_DATA_L=IDE_Buffer_L;
  96           IDE_DIOW=1;
  97           IDE_Address=IDE_Bus_Not_Use;
  98           set_IDE_address();
  99          }*/
 100          ///////////////////////////////////////////////////////////////////////////////////////////////
 101          
 102          ////////////////////////////////////////////    读IDE 低8位   /////////////////////////////////
 103          unsigned char read_IDE_8(unsigned char address)
 104          {
 105   1       unsigned char temp;
 106   1       while(!IDE_IORDY);
 107   1       IDE_Address=address;
 108   1       set_IDE_address();
 109   1       IDE_DATA_H=0xFF;
 110   1       IDE_DATA_L=0xFF;
 111   1       IDE_DIOR=0;
 112   1       temp=IDE_DATA_L;
 113   1       IDE_DIOR=1;
 114   1       IDE_Address=IDE_Bus_Not_Use;
 115   1       set_IDE_address();
 116   1       return temp;
 117   1      }
C51 COMPILER V7.06   IDE                                                                   03/02/2006 23:11:50 PAGE 3   

 118          ///////////////////////////////////////////////////////////////////////////////////////////////
 119          
 120          /////////////////////////////////////////////  写IDE 低8位    /////////////////////////////////
 121          void write_IDE_8(unsigned char address,unsigned char w_data)
 122          {
 123   1       while(!IDE_IORDY);
 124   1       IDE_Address=address;
 125   1       set_IDE_address();
 126   1       IDE_DIOW=0;
 127   1       IDE_DATA_L=w_data;
 128   1       IDE_DIOW=1;
 129   1       IDE_Address=IDE_Bus_Not_Use;
 130   1       set_IDE_address();
 131   1      }
 132          ///////////////////////////////////////////////////////////////////////////////////////////////
 133          
 134          //////////////////////////////////////////   从IDE读一个字  //////////////////////////////////
 135          /*void read_IDE_word(void)
 136          {
 137           read_IDE_16(IDE_Data);
 138          }*/
 139          ///////////////////////////////////////////////////////////////////////////////////////////////
 140          
 141          /////////////////////////////////////////   往IDE写一个字  ///////////////////////////////////
 142          /*void write_IDE_word(void)
 143          {
 144           write_IDE_16(IDE_Data);
 145          }*/
 146          ///////////////////////////////////////////////////////////////////////////////////////////////
 147          
 148          ////////////////////////////////////////   读 IDE 状态寄存器  /////////////////////////////////
 149          void read_IDE_status(void)
 150          {
 151   1       IDE_status=read_IDE_8(IDE_Status);  //结果保存在状态寄存器中
 152   1      }
 153          ///////////////////////////////////////////////////////////////////////////////////////////////
 154          
 155          //////////////////////////////////////    读 IDE 错误寄存器 ///////////////////////////////////
 156          void read_IDE_error(void)
 157          {
 158   1       IDE_error_register=read_IDE_8(IDE_Error_Register);   //结果保存在错误寄存器中
 159   1      }
 160          ///////////////////////////////////////////////////////////////////////////////////////////////
 161          
 162          /////////////////////////////////////     等待IDE    ///////////////////////////////////////////
 163          unsigned char wait_IDE_busy(void)
 164          {
 165   1       while(!IDE_IORDY);
 166   1       do
 167   1        {
 168   2         read_IDE_status();
 169   2         if(IDE_ERR)
 170   2         {
 171   3          read_IDE_error();
 172   3          LCD_go_home();
 173   3          prints("硬盘错误! ");
 174   3          printf(IDE_error_register);
 175   3         }
 176   2        }while(IDE_BSY);
 177   1       IDE_Address=IDE_Bus_Not_Use;
 178   1       set_IDE_address();
 179   1       return 0;
C51 COMPILER V7.06   IDE                                                                   03/02/2006 23:11:50 PAGE 4   

 180   1      }
 181          //////////////////////////////////////////////////////////////////////////////////////////////
 182          
 183          ////////////////////////////////////////    写 IDE 命令  /////////////////////////////////////
 184          void write_IDE_command(unsigned char command)
 185          {
 186   1       write_IDE_8(IDE_Command,command);
 187   1       wait_IDE_busy();
 188   1      }
 189          ///////////////////////////////////////////////////////////////////////////////////////////////
 190          
 191          ////////////////////////////////////////   IDE 软复位    /////////////////////////////////////
 192          /*(void soft_reset_IDE(void)
 193          {
 194           write_IDE_8(IDE_Device_Control,0xFD);
 195           wait_IDE_busy();
 196          }
 197          */
 198          ///////////////////////////////////////////////////////////////////////////////////////////////
 199          
 200          /////////////////////////////////////////   写IDE 逻辑块地址LBA  //////////////////////////////
 201          void write_IDE_LBA(unsigned long int _LBA)
 202          {
 203   1       unsigned char LBA0;
 204   1       LBA0=((unsigned char *)&_LBA)[0];
 205   1       LBA0&=0x0F;
 206   1       LBA0|=0xE0;//磁盘0工作在LBA模式下
 207   1       write_IDE_8(IDE_LBA_Bits_24_27,LBA0);
 208   1       write_IDE_8(IDE_LBA_Bits_16_23,((unsigned char *)&_LBA)[1]);
 209   1       write_IDE_8(IDE_LBA_Bits_8_15,((unsigned char *)&_LBA)[2]);
 210   1       write_IDE_8(IDE_LBA_Bits_0_7,((unsigned char *)&_LBA)[3]);
 211   1      }
 212          ///////////////////////////////////////////////////////////////////////////////////////////////
 213          
 214          unsigned char xdata buffer[512];  //扇区缓冲
 215          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -