📄 stc_flash.lst
字号:
C51 COMPILER V7.07 STC_FLASH 09/27/2007 07:17:46 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE STC_FLASH
OBJECT MODULE PLACED IN stc_flash.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE EromLIB\stc_flash.c BROWSE DEBUG OBJECTEXTEND PRINT(.\stc_flash.lst) OBJECT
-(stc_flash.obj)
stmt 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 //#include "define_stc_flash.h"
11 #include "../EromINC/MCS_X51.H"
12 #include<intrins.h>
13 bit gint;
14 /*************************************************
15 //-----使能IAP----------------
16 *************************************************/
17 void flsh_en()
18 {
19 1 gint = EA;
20 1 INT_GLOBAL(0); //DISABLE INTERUPT
21 1
22 1 set_flsh_wait; //set wait time
23 1 set_flsh_en; //enable flash operate
24 1 }
25 /**************************************************
26 //停止IAP
27 **************************************************/
28 void flsh_ds()
29 {
30 1 set_flsh_ds; //disable flash operate
31 1 set_flsh_trig(0); //dis trig
32 1 INT_GLOBAL(gint); //return global int
33 1 }
34
35 /*从flash中读出一个字节返回*/
36 UINT8 flsh_rd_byte(UINT16 addx)
37 {
38 1 set_flsh_addr(addx);
39 1 flsh_wr_cmd(CMD_READ);
40 1 set_flsh_trig(TRIG1);
41 1 set_flsh_trig(TRIG2);
42 1 _nop_();
43 1 return(flsh_rd_data);
44 1 }
45 /******************************************
46 //从一个扇区内读出一串数据。
47 //传送参数:扇区内地址,读出个数,读出地址
48 ********************************************/
49 bit flsh_sector_rd(UINT16 addx,UINT8 num,UINT8 *p)
50 {
51 1 UINT8 i;
52 1 if(num > USED_SPACE)
53 1 return(0); //超出扇区范围,退出
54 1 flsh_en();
C51 COMPILER V7.07 STC_FLASH 09/27/2007 07:17:46 PAGE 2
55 1 for(i = 0;i < num;i++)
56 1 {
57 2 *p=flsh_rd_byte(addx + i);
58 2 p++;
59 2 }
60 1 flsh_ds(); //禁止iap操作
61 1 return(1);
62 1 }
63
64 /***********************************************
65 //扇区擦除
66 ***********************************************/
67 void flsh_sector_earse(UINT16 addx)
68 {
69 1 UINT16 sec_addr = 0xfe00;
70 1 sec_addr &= addx; //取得扇区首地址
71 1
72 1 set_flsh_addr(sec_addr);
73 1 flsh_en();
74 1 flsh_wr_cmd(CMD_SES); //扇区擦除命令
75 1 set_flsh_trig(TRIG1);
76 1 set_flsh_trig(TRIG2);
77 1 _nop_();
78 1 flsh_ds();
79 1 }
80 /***********************************************************
81 // 写一个字节并校验,如果写正确,返回1,否则返回0
82 ***********************************************************/
83 bit flsh_wr_verify(UINT16 addx,UINT8 dax)
84 {
85 1 set_flsh_addr(addx);
86 1 flsh_wr_cmd(CMD_PGM);
87 1 flsh_wr_data(dax); //写数据到iap的数据寄存器。
88 1 set_flsh_trig(TRIG1);
89 1 set_flsh_trig(TRIG2);
90 1 _nop_();
91 1 flsh_wr_data(0); //使iap的数据寄存器改变,以便回读。
92 1 flsh_wr_cmd(CMD_READ);
93 1 set_flsh_trig(TRIG1);
94 1 set_flsh_trig(TRIG2);
95 1 _nop_();
96 1 if(flsh_rd_data == dax)
97 1 return(1);
98 1 else
99 1 return(0);
100 1 }
101 /**************************************************************************
102 //写一个扇区
103 //传送16位的目的地址,最好从扇区首地址开始,8位的数据长度,源数据的指针
104 **************************************************************************/
105 bit flsh_sector_wr(UINT16 addx,UINT8 num,UINT8 * pdax)
106 {
107 1 UINT8 i;
108 1 UINT16 addr;
109 1 if(num > USED_SPACE)
110 1 return(0); //超出扇区范围退出
111 1 addr = addx;
112 1 flsh_sector_earse(addx); //擦除目的扇区
113 1 flsh_en();
114 1 for(i=0;i<num;i++)
115 1 {
116 2 if(!flsh_wr_verify(addr,*pdax))
C51 COMPILER V7.07 STC_FLASH 09/27/2007 07:17:46 PAGE 3
117 2 {
118 3 flsh_ds(); //操作出错,返回前禁止flash操作
119 3 return(0);
120 3 }
121 2 addr++;
122 2 pdax++;
123 2 }
124 1 flsh_ds(); //写完毕禁止FLASH 操作
125 1 return(1);
126 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 260 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -