?? stc_flash.lst
字號:
C51 COMPILER V7.50 STC_FLASH 06/08/2006 14:06:33 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE STC_FLASH
OBJECT MODULE PLACED IN stc_flash.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LIB\stc_flash.c BROWSE INCDIR(.\inc;.\inc;..\inc) DEBUG OBJECTEXTEND PRINT(
-.\stc_flash.lst) OBJECT(stc_flash.obj)
line level source
1 /****************************************************************
2 //MCS-51單片機底層EEPROM操作庫。
3 //只在STC89C52單片機上實驗過
4
5 //create by changshengwuji
6 //email: netspider@163.com
7 //qq: 450353168
8 //2006.05.03
9 ****************************************************************/
10
11 //#include "define_stc_flash.h"
12 #include "../inc/MCS_X51.H"
13 #include<intrins.h>
14 bit gint;
15 /*************************************************
16 //-----使能IAP----------------
17 *************************************************/
18 void flsh_en()
19 {
20 1 gint = EA;
21 1 INT_GLOBAL(0); //DISABLE INTERUPT
22 1
23 1 set_flsh_wait; //set wait time
24 1 set_flsh_en; //enable flash operate
25 1 }
26 /**************************************************
27 //停止IAP
28 **************************************************/
29 void flsh_ds()
30 {
31 1 set_flsh_ds; //disable flash operate
32 1 set_flsh_trig(0); //dis trig
33 1 INT_GLOBAL(gint); //return global int
34 1 }
35
36 /*從flash中讀出一個字節返回*/
37 UINT8 flsh_rd_byte(UINT16 addx)
38 {
39 1 set_flsh_addr(addx);
40 1 flsh_wr_cmd(CMD_READ);
41 1 set_flsh_trig(TRIG1);
42 1 set_flsh_trig(TRIG2);
43 1 _nop_;
*** WARNING C275 IN LINE 43 OF LIB\STC_FLASH.C: expression with possibly no effect
44 1 return(flsh_rd_data);
45 1 }
46 /******************************************
47 //從一個扇區內讀出一串數據。
48 //傳送參數:扇區內地址,讀出個數,讀出地址
49 ********************************************/
50 bit flsh_sector_rd(UINT16 addx,UINT8 num,UINT8 *p)
51 {
52 1 UINT8 i;
53 1 if(num > USED_SPACE)
C51 COMPILER V7.50 STC_FLASH 06/08/2006 14:06:33 PAGE 2
54 1 return(0); //超出扇區范圍,退出
55 1 flsh_en();
56 1 for(i = 0;i < num;i++)
57 1 {
58 2 *p=flsh_rd_byte(addx + i);
59 2 p++;
60 2 }
61 1 flsh_ds(); //禁止iap操作
62 1 return(1);
63 1 }
64
65 /***********************************************
66 //扇區擦除
67 ***********************************************/
68 void flsh_sector_earse(UINT16 addx)
69 {
70 1 UINT16 sec_addr = 0xfe00;
71 1 sec_addr &= addx; //取得扇區首地址
72 1
73 1 set_flsh_addr(sec_addr);
74 1 flsh_en();
75 1 flsh_wr_cmd(CMD_SES); //扇區擦除命令
76 1 set_flsh_trig(TRIG1);
77 1 set_flsh_trig(TRIG2);
78 1 _nop_;
*** WARNING C275 IN LINE 78 OF LIB\STC_FLASH.C: expression with possibly no effect
79 1 flsh_ds();
80 1 }
81 /***********************************************************
82 // 寫一個字節并校驗,如果寫正確,返回1,否則返回0
83 ***********************************************************/
84 bit flsh_wr_verify(UINT16 addx,UINT8 dax)
85 {
86 1 set_flsh_addr(addx);
87 1 flsh_wr_cmd(CMD_PGM);
88 1 flsh_wr_data(dax); //寫數據到iap的數據寄存器。
89 1 set_flsh_trig(TRIG1);
90 1 set_flsh_trig(TRIG2);
91 1 _nop_;
*** WARNING C275 IN LINE 91 OF LIB\STC_FLASH.C: expression with possibly no effect
92 1 flsh_wr_data(0); //使iap的數據寄存器改變,以便回讀。
93 1 flsh_wr_cmd(CMD_READ);
94 1 set_flsh_trig(TRIG1);
95 1 set_flsh_trig(TRIG2);
96 1 _nop_;
*** WARNING C275 IN LINE 96 OF LIB\STC_FLASH.C: expression with possibly no effect
97 1 if(flsh_rd_data == dax)
98 1 return(1);
99 1 else
100 1 return(0);
101 1 }
102 /**************************************************************************
103 //寫一個扇區
104 //傳送16位的目的地址,最好從扇區首地址開始,8位的數據長度,源數據的指針
105 **************************************************************************/
106 bit flsh_sector_wr(UINT16 addx,UINT8 num,UINT8 * pdax)
107 {
108 1 UINT8 i;
109 1 UINT16 addr;
110 1 if(num > USED_SPACE)
111 1 return(0); //超出扇區范圍退出
112 1 addr = addx;
C51 COMPILER V7.50 STC_FLASH 06/08/2006 14:06:33 PAGE 3
113 1 flsh_sector_earse(addx); //擦除目的扇區
114 1 flsh_en();
115 1 for(i=0;i<num;i++)
116 1 {
117 2 if(!flsh_wr_verify(addr,*pdax))
118 2 {
119 3 flsh_ds(); //操作出錯,返回前禁止flash操作
120 3 return(0);
121 3 }
122 2 addr++;
123 2 pdax++;
124 2 }
125 1 flsh_ds(); //寫完畢禁止FLASH 操作
126 1 return(1);
127 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 256 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 4 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -