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

📄 ata_cd_rom.lst

📁 用8051單晶片來控制cdrom播放音樂
💻 LST
字号:
C51 COMPILER V8.02   ATA_CD_ROM                                                            05/17/2007 20:56:02 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ATA_CD_ROM
OBJECT MODULE PLACED IN .\Output\ATA_CD_ROM.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ATA_CD_ROM.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\Output\ATA_CD_ROM.obj)

line level    source

   1          #include <regx51.h>
   2          #include "ATA_CD_ROM.h"
   3          
   4          unsigned char ATA_DATA_BUS,ATA_General_Status,ATA_Device_Head_Status,ATA_Error_Status;
   5          unsigned char ATA_DATA_BUS_LS,ATA_DATA_BUS_MS;
   6          
   7          unsigned char start_track,temp0,temp1,temp2,temp3;
   8          unsigned char Start_M,Start_S,Start_F,End_M,End_S,End_F;
   9          unsigned char Packet_Table[32];
  10          
  11          void Initial_CD_ROM(void)
  12          {
  13   1              ATA_nRESET = 0;                                                 //Reset CD ROM  
  14   1              DelayXms(100);
  15   1              ATA_nRESET = 1;
  16   1              DelayXms(2000);                                                 //Delay 2 sec
  17   1              do
  18   1              {
  19   2                      Get_Status_Register();  
  20   2              }while((ATA_General_Status&0x80)==0x80);
  21   1              //}while(P1_7);
  22   1              //LED_Glisten();        
  23   1      
  24   1              Get_Device_Head_Register();
  25   1              Device = 0;                                                             //Set Master,then CD ROM
  26   1              Set_Device_Head_Register();
  27   1      
  28   1              do
  29   1              {
  30   2                      Get_Status_Register();
  31   2              }while((ATA_General_Status&0x80)==0x80);        
  32   1      
  33   1              ATA_DATA_BUS = 0x90;                                    //Device Diagnostic
  34   1              Set_CMD_Register();
  35   1      
  36   1              do
  37   1              {
  38   2                      Get_Status_Register();
  39   2              }while((ATA_General_Status&0x80)==0x80);
  40   1      
  41   1              Get_Error_Register();
  42   1              while((ATA_Error_Status!=0x01) && (ATA_Error_Status!=0x81));                    //it isn't find,then Device                     
  43   1      }
  44          
  45          void test_unit_ready_cmd(void)
  46          {       
  47   1              unsigned int i;
  48   1      test_unit_loop:
  49   1      
  50   1              DelayXms(1000);
  51   1              for(i=0;i<32;i++)
  52   1              {
  53   2                      Packet_Table[i]=0x00;                           //clear packet table
  54   2              }
  55   1              
C51 COMPILER V8.02   ATA_CD_ROM                                                            05/17/2007 20:56:02 PAGE 2   

  56   1              do
  57   1              {
  58   2                      Get_Status_Register();
  59   2              }while((ATA_General_Status&0x88)!=0x00);        
  60   1      
  61   1              ATA_DATA_BUS = 0xA0;                                    //Send Packet Command
  62   1              Set_CMD_Register();     
  63   1              Send_Packet_Command();                  
  64   1      
  65   1              while((ATA_General_Status&0x01)==0x01)
  66   1              {
  67   2                      goto test_unit_loop;    
  68   2              }                               
  69   1      }
  70          
  71          void Read_TOC_CMD(void)
  72          {
  73   1              unsigned int i;
  74   1              
  75   1              for(i=0;i<32;i++)
  76   1              {
  77   2                      Packet_Table[i]=0x00;                           //clear packet table
  78   2              }
  79   1              
  80   1              do
  81   1              {
  82   2                      Get_Status_Register();
  83   2              }while((ATA_General_Status&0x88)!=0x00);
  84   1      
  85   1              ATA_DATA_BUS = 0xA0;                                    //Send Packet Command
  86   1              Set_CMD_Register();
  87   1      
  88   1              Packet_Table[0]=0x43;
  89   1              Packet_Table[1]=0x02;
  90   1              Packet_Table[7]=0xFF;
  91   1              Packet_Table[8]=0xFF;
  92   1      
  93   1              Send_Packet_Command();          
  94   1      
  95   1              while((ATA_General_Status&0x08)!=0x08);
  96   1              Get_Data();                                                             //Read DATA length
  97   1              Get_Data();                                                             //Read DATA length
  98   1              start_track = ATA_DATA_BUS_LS;
  99   1      
 100   1      Read_TOC_Loop:
 101   1      
 102   1              Get_Data();                                                             //Address and Control field
 103   1              Get_Data();                                                             //Get track number
 104   1              temp0 = ATA_DATA_BUS_LS;
 105   1              Get_Data();
 106   1              temp1 = ATA_DATA_BUS_MS;
 107   1              Get_Data();
 108   1              temp2 = ATA_DATA_BUS_LS;
 109   1              temp3 = ATA_DATA_BUS_MS;
 110   1              if(temp0==start_track)
 111   1              {
 112   2                      Start_M = temp1;
 113   2                      Start_S = temp2;
 114   2                      Start_F = temp3;
 115   2              }
 116   1              if(temp0==0xAA)
 117   1              {
C51 COMPILER V8.02   ATA_CD_ROM                                                            05/17/2007 20:56:02 PAGE 3   

 118   2                      End_M = temp1;
 119   2                      End_S = temp2;
 120   2                      End_F = temp3;
 121   2              }
 122   1              do
 123   1              {
 124   2                      //DelayXms(100);
 125   2                      Get_Status_Register();
 126   2              }while((ATA_General_Status&0x80)==0x80);        
 127   1      
 128   1              Get_Status_Register();
 129   1      
 130   1              if((ATA_General_Status&0x08)==0x08)
 131   1              {
 132   2                      goto Read_TOC_Loop;
 133   2              }
 134   1      }
 135          
 136          void Play_CD_CMD(void)
 137          {
 138   1              unsigned int i;
 139   1              
 140   1              for(i=0;i<32;i++)
 141   1              {
 142   2                      Packet_Table[i]=0x00;                           //clear packet table
 143   2              }
 144   1              
 145   1              do
 146   1              {
 147   2                      Get_Status_Register();
 148   2              }while((ATA_General_Status&0x88)!=0x00);
 149   1      
 150   1              ATA_DATA_BUS = 0xA0;                                    //Send Packet Command
 151   1              Set_CMD_Register();
 152   1              
 153   1              Packet_Table[0] = 0x47;
 154   1              Packet_Table[3] = Start_M;
 155   1              Packet_Table[4] = Start_S;
 156   1              Packet_Table[5] = Start_F;
 157   1              Packet_Table[6] = End_M;
 158   1              Packet_Table[7] = End_S;
 159   1              Packet_Table[8] = End_F;
 160   1      
 161   1              Send_Packet_Command();
 162   1              while((ATA_General_Status&0x01)==0x01);                 
 163   1      }
 164          
 165          void Get_Status_Register(void)
 166          {
 167   1              ATA_Address = 0xF0;                                             //Set Read Status Address
 168   1              ATA_DATA_LS = 0xFF;                                             //Default LSB of DATA Bus
 169   1              //ATA_DATA_MS = 0xFF;                                           //Default MSB of DATA Bus
 170   1              ATA_nDIOR = 0;                                                  //Start Read Data of Register
 171   1              ATA_General_Status = ATA_DATA_LS;
 172   1              ATA_nDIOR = 1;                                                  //Read Data done        
 173   1      }
 174          
 175          void Get_Device_Head_Register(void)
 176          {
 177   1              ATA_Address = 0xD0;
 178   1              ATA_DATA_LS = 0xFF;
 179   1              ATA_DATA_MS = 0xFF;
C51 COMPILER V8.02   ATA_CD_ROM                                                            05/17/2007 20:56:02 PAGE 4   

 180   1              ATA_nDIOR = 0;
 181   1              ATA_Device_Head_Status = ATA_DATA_LS;
 182   1              ATA_nDIOR = 1;
 183   1      }
 184          
 185          void Set_Device_Head_Register(void)
 186          {
 187   1              ATA_Address = 0xD0;
 188   1              ATA_DATA_LS = ATA_Device_Head_Status;
 189   1              ATA_nDIOW = 0;
 190   1              DelayXms(100);
 191   1              ATA_nDIOW = 1;
 192   1      }
 193          
 194          void Set_CMD_Register(void)
 195          {       
 196   1              ATA_Address = 0xF0;
 197   1              ATA_DATA_LS = ATA_DATA_BUS;
 198   1              ATA_nDIOW = 0;
 199   1              DelayXms(100);
 200   1              ATA_nDIOW = 1;
 201   1      }
 202          
 203          void Get_Error_Register(void)
 204          {
 205   1              ATA_Address = 0x30;
 206   1              ATA_DATA_LS = 0xFF;
 207   1              ATA_DATA_MS = 0xFF;
 208   1              ATA_nDIOR = 0;
 209   1              ATA_Error_Status = ATA_DATA_LS;
 210   1              ATA_nDIOR = 1;
 211   1      }
 212          
 213          void Get_Data(void)
 214          {
 215   1              ATA_Address = 0x10;
 216   1              ATA_DATA_LS = 0xFF;
 217   1              ATA_DATA_MS = 0xFF;
 218   1              ATA_nDIOR = 0;
 219   1              ATA_DATA_BUS_LS = ATA_DATA_LS;
 220   1              ATA_DATA_BUS_MS = ATA_DATA_MS;  
 221   1              ATA_nDIOR = 1;  
 222   1      }
 223          
 224          void Send_Packet_Command(void)
 225          {
 226   1              unsigned int i;
 227   1              do
 228   1              {
 229   2                      Get_Status_Register();
 230   2              }while((ATA_General_Status&0x89)!=0x08);
 231   1                      
 232   1      
 233   1              for(i=0;i<6;i++)
 234   1              {
 235   2                      ATA_DATA_BUS_LS = Packet_Table[i*2];
 236   2                      ATA_DATA_BUS_MS = Packet_Table[i*2+1];
 237   2                      Set_ATA_DATA_ALL();     
 238   2              }               
 239   1      
 240   1              do
 241   1              {
C51 COMPILER V8.02   ATA_CD_ROM                                                            05/17/2007 20:56:02 PAGE 5   

 242   2                      ATA_INTRQ = 1;
 243   2              }while(ATA_INTRQ==0);   
 244   1              
 245   1              Get_Status_Register();          
 246   1      }
 247          
 248          void Set_ATA_DATA_ALL(void)
 249          {
 250   1              ATA_Address = 0x10;
 251   1              ATA_DATA_LS = ATA_DATA_BUS_LS;
 252   1              ATA_DATA_MS = ATA_DATA_BUS_MS;
 253   1              ATA_nDIOW = 0;
 254   1              DelayXms(100);
 255   1              ATA_nDIOW = 1;
 256   1      }
 257          
 258          void DelayXms(unsigned int counter)
 259          {
 260   1              unsigned int i,j;
 261   1              for(i=0;i<counter;i++)
 262   1                      for(j=0;j<120;j++);
 263   1      }
 264          
 265          void LED_Glisten(void)
 266          {       
 267   1              while(1)
 268   1              {
 269   2                      P3_7 = 0;
 270   2                      DelayXms(500);          
 271   2                      P3_7 = 1;
 272   2                      DelayXms(500);
 273   2              }
 274   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    523    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     49       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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