📄 at45db321.lst
字号:
C51 COMPILER V7.08 AT45DB321 12/28/2007 17:00:32 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE AT45DB321
OBJECT MODULE PLACED IN .\output\at45db321.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE at45db321.C LARGE BROWSE DEBUG OBJECTEXTEND OBJECT(.\output\at45db321.obj)
line level source
1
2 #include <STC89C51RC_RD_PLUS.H>
3 #include <intrins.h>
4 #include <absacc.h>
5
6 #define uint unsigned int
7 #define uchar unsigned char
8 #define ulong unsigned long
9
10
11 #define PAGE_ERASE 0x81
12 #define BLOCK_ERASE 0x50
13 #define STATUS_REGISTER_READ 0xD7
14 #define MAIN_MEMORY_PAGE_READ 0xD2
15 #define MAIN_MEMORY_PAGE_WRITE_THROUGH_BUFFER1 0x82
16 #define MAIN_MEMORY_PAGE_WRITE_THROUGH_BUFFER1_ERASE 0x83
17 #define DEVICE_ID_INFO 0x9F
18
19
20 #define READY 1
21 #define BUSY 0
22
23 sbit SCK = P1^3;
24 sbit SI = P1^4;
25 sbit SO = P1^0;
26 sbit CS = P1^2;
27
28 sbit LED = P1^0;
29 //#define P40 LED
30 /*
31 一片45DB321包括8192页,每页512字节
32 页擦除时间:最多35毫秒
33 页编程时间:最多15毫秒
34 芯片使用spi模式0
35
36 commond:0x84 -->write buffer1
37 commond:0x87 -->write buffer2
38
39 commond:0x82 -->Main Memory Page Program Through Buffer 1
40 commond:0x85 -->Main Memory Page Program Through Buffer 2
41
42 commond:0x81 -->Page Erase
43
44 commond:0xd2 -->Main Memory Page Read
45 commond:0x54 -->Buffer 1 Read
46 commond:0x56 -->Buffer 2 Read
47 */
48
49 /*延时1ms-11.0592MHz
50 void Delay(uint number)
51 {
52 uint j;
53 uint i;
54 for(j=0;j<number;j++)
55 {
C51 COMPILER V7.08 AT45DB321 12/28/2007 17:00:32 PAGE 2
56 for(i=0;i<110;i++);
57 }
58 }*/
59 /*延时1ms-22.1184MHz*/
60 void Delay(uint number)
61 {
62 1 uint j;
63 1 uint i;
64 1 for(j=0;j<number;j++)
65 1 {
66 2 for(i=0;i<220;i++);
67 2 }
68 1 }
69 void InitSys(void)
70 {
71 1 TH1 = 0xfd; //9600bps 11.0592MHz
72 1 TL1 = 0xfd;
73 1 TMOD = 0x21; //定时器1方式2,定时器0方式1
74 1 TR1 = 1; //启动定时器1
75 1 SCON = 0x50; //串口方式1,允许接受
76 1
77 1 ES = 1; //允许串口中断
78 1 ET0 = 1; //允许定时器0中断
79 1 TR1 = 1; //启动定时器1
80 1 IT1 = 1; //外部中断边沿方式
81 1 IT0 = 1; //外部中断边沿方式
82 1 EA = 1;
83 1 }
84 /*******************************************************************
85 发送字符串
86 *******************************************************************/
87 void PutStr(uchar *p,uint num)
88 {
89 1 uint i;
90 1 if(num != 0)
91 1 {
92 2 for(i = 0;i < num;i ++)
93 2 {
94 3 SBUF =p[i] ;
95 3 while(!TI);
96 3 //Delay(10);
97 3 TI = 0;
98 3 }
99 2 }
100 1 else
101 1 {
102 2 for(i=0;i<30;i++)
103 2 {
104 3 if(p[i] != 0)
105 3 {
106 4 SBUF = p[i];
107 4 while(!TI);
108 4 TI = 0;
109 4 }
110 3 }
111 2 }
112 1 }
113 /*************************************************/
114 /*函数原型:
115 /*输入参数:无
116 /*返回参数:无
117 /*************************************************/
C51 COMPILER V7.08 AT45DB321 12/28/2007 17:00:32 PAGE 3
118 void SPI_Init(void)
119 {
120 1 CS = 1;
121 1 SCK = 0;
122 1 SI = 1;
123 1 SO = 1;
124 1 Delay(20);//20ms
125 1 }
126 /*************************************************/
127 /*函数原型:
128 /*输入参数:要发送的命令或数据
129 /*返回参数:无
130 /*************************************************/
131 void SPI_SendByte(uchar SendData)
132 {
133 1 uchar i;
134 1 for(i=0;i<8;i++)
135 1 {
136 2 SI = (bit)(SendData&0x80);
137 2 SendData <<= 1;
138 2 SCK = 1;
139 2 SCK = 0;
140 2 }
141 1 }
142 /*************************************************/
143 /*函数原型:
144 /*输入参数:无
145 /*返回参数:读得的一字节数据
146 /*************************************************/
147 uchar SPI_ReadByte(void)
148 {
149 1 uchar i,RecData = 0;
150 1 for(i=0;i<8;i++)
151 1 {
152 2 SCK = 1;
153 2 RecData <<= 1;
154 2 if(SO)RecData += 1;
155 2 SCK = 0;
156 2
157 2 }
158 1 return (RecData);
159 1 }
160
161
162 //指定页擦除
163 void PageErase(uint Page)
164 {
165 1 uchar i;
166 1
167 1 if(Page>8191)return;
168 1
169 1 CS = 0;
170 1 SPI_SendByte(PAGE_ERASE);
171 1 i = Page>>6;
172 1 SPI_SendByte(i);
173 1 i = Page&0x3f;
174 1 i = i<<2;
175 1 SPI_SendByte(i);
176 1 i=0;
177 1 SPI_SendByte(i);
178 1 CS = 1;
179 1 Delay(70);
C51 COMPILER V7.08 AT45DB321 12/28/2007 17:00:32 PAGE 4
180 1 }
181 //读芯片状态寄存器,返回0表示busy,返回1表示ready
182 bit ReadStatus(void)//status register read
183 {
184 1 uchar i;
185 1 CS = 0;
186 1 SPI_SendByte(STATUS_REGISTER_READ);
187 1 i = SPI_ReadByte();
188 1 CS = 1;
189 1 return((bit)(i&0x80));
190 1 }
191 //得到器件的信息共4个字节
192 void ReadDeviceId(uchar *p)
193 {
194 1 uchar i;
195 1 CS = 0;
196 1 SPI_SendByte(DEVICE_ID_INFO);
197 1 for(i=0;i<4;i++)p[i] = SPI_ReadByte();
198 1 CS = 1;
199 1 }
200 //块擦除
201 void BlockErase(uint Block)
202 {
203 1 uchar i;
204 1 CS = 0;
205 1 SPI_SendByte(BLOCK_ERASE);
206 1 i = (uchar)(Block>>3);
207 1 SPI_SendByte(i);
208 1 i = (uchar)(Block<<5);
209 1 SPI_SendByte(i);
210 1 i=0;
211 1 SPI_SendByte(i);
212 1 CS = 1;
213 1 Delay(100);
214 1 }
215 //芯片擦除
216 void ChipErase(void)
217 {
218 1 uint i;
219 1 for(i=0;i<1024;i++)BlockErase(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -