📄 ide.lst
字号:
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 + -