📄 flash.lst
字号:
C51 COMPILER V7.06 FLASH 06/10/2005 13:26:30 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN FLASH.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FLASH.C BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS
stmt level source
1 /***********************************************************/
2 /* */
3 /* CPU:AT89c55 20MHZ */
4 /* Copyright 2004.09 Comelit */
5 /* AUTHOR: LV_XIAO_LU */
6 /* */
7 /***********************************************************/
8
9 #include "reg52.h"
10 #include "string.h"
11 #include "define.h"
12 #include "variable.h"
13 #include "typedef.h"
14 #include "function.h"
15
16
17
18
19 //sbit LED_CTR = P1^1 ;
20
21 #define BRIGHT_ON 0
22 #define BRIGHT_OFF 1
23
24 void Mes_init(void);
25 void Write_sector(register unsigned char xdata *des_adr,register unsigned char xdata *s_adr);
26 void Write_flash_hd(void);
27 void Code_init(void);
28 void Copy_var_to_mem(void);
29 void Copy_mes_to_mem(void);
30 void Copy_mem(void);
31 void Store_mes(void);
32 void Message_hd(void);
33 void Write_flash_hd(void);
34 //unsigned char Test_hardware(void);
35
36 /*const code unsigned char rom_verify_data_tbl[] =
37 {0x00,0x00,0x00,0x8f,0x8d,0x8c,0x67,0x65,0x66,0x6a,0x64,0x5d,
38 0x80,0x80,0x80,0x88,0x85,0x82,0x6a,0x6a,0x6d,0x8f,0x8d,0x90,
39 0x80,0x80,0x80,0x7e,0x7e,0x7e,0x68,0x6b,0x70,0x7b,0x7d,0x7c,
40 0x80,0x80,0x80,0x71,0x6d,0x69,0x84,0x82,0x81,0x8d,0x8f,0x8f};
41
42 const unsigned int rom_test_addr[] =
43 {0x8000,0x9999,0xaaaa,0xd555};*/
44 /**************************************************/
45 /* dst_adr指向外部FLASH MEMORY的要写的段地址 */
46 /* s_adr指向SRAM里要写入FLASH MEMORY里的内容的地址*/
47 /**************************************************/
48 void Write_sector(register unsigned char xdata *dst_adr,register unsigned char xdata *s_adr)
49 {
50 1 register unsigned int i;
51 1 /*保护段数据特殊功能码:3个*/
52 1 special_addr1 = 0xaa;
53 1 special_addr2 = 0x55;
54 1 special_addr1 = 0xa0;
55 1
C51 COMPILER V7.06 FLASH 06/10/2005 13:26:30 PAGE 2
56 1 // EA = 0; // 禁止中断以防写FLASH时出错
57 1 /*费时3.4MS*/
58 1 for(i=0;i<256;i++)
59 1 {
60 2 *(dst_adr+i) = *(s_adr+i) ;
61 2 }
62 1 // EA = 1;
63 1
64 1 }
65
66 /***************************************************/
67 /* init_code用于指示系统是否进行过系统工作初始化 */
68 /***************************************************/
69 void Code_init(void)
70 {
71 1 init_code[0] = init_code_b[0];
72 1 init_code[1] = init_code_b[1];
73 1 init_code[2] = init_code_b[2];
74 1 }
75 /***************************************************/
76 /***************************************************/
77 void Mes_init(void)
78 {
79 1 unsigned char i;
80 1 Page_switch(PAGE_0);
81 1
82 1 Code_init();
83 1 if((init_code[0]==0xa5)&&(init_code[1]==0x5a)&&(init_code[2]==0xaa)) //已初始化信息列表
84 1 {
85 2 Copy_mem();
86 2 }
87 1 else
88 1 {
89 2
90 2 Mes_tcb_init();
91 2 init_code[0]=0xa5;
92 2 init_code[1]=0x5a;
93 2 init_code[2]=0xaa;
94 2 /*以下函数实现将从SRAM里0X00开始128个字节(1段)送到FLASH MEMORY 0X1000开始的128*/
95 2 /*个字节中去,即在FLASH MEMORY中备份重要数据*/
96 2 Page_switch(PAGE_0);
97 2 Write_sector((unsigned char xdata*)(0x1000),(unsigned char xdata*)0x00);
98 2 Delay_10ms();
99 2
100 2 /*备份mes_control 到FLASH MEMORY中的mes_control_b*/
101 2 for(i=0;i<8;i++)
102 2 {
103 3 Write_sector((unsigned char xdata*)(0x1100 + i*256),(unsigned char xdata*)(0x100 + i*256));
104 3 Delay_10ms(); //延时10MS
105 3 }
106 2 }
107 1
108 1 }
109
110 /*******************************************************/
111 /*该函数用于将FLASH 内存块内变量COPY到SRAM中的变量区 */
112 /*******************************************************/
113 void Copy_var_to_mem(void)
114 {
115 1 register unsigned char i;
116 1 unsigned char xdata *source = (unsigned char xdata*)(0x1000);
117 1 unsigned char xdata *dest = (unsigned char xdata*)0x00;
C51 COMPILER V7.06 FLASH 06/10/2005 13:26:30 PAGE 3
118 1 for(i=0;i<7;i++)
119 1 *(dest+i) = *(source+i);
120 1 }
121
122 /**********************************************************************/
123 /*该函数用于将FLASH 内存块内mes_control_b COPY到SRAM中的mes_control */
124 /**********************************************************************/
125 void Copy_mes_to_mem(void)
126 {
127 1 register unsigned char i;
128 1 register unsigned int j;
129 1 unsigned char xdata *source = (unsigned char xdata*)(0x1100);
130 1 unsigned char xdata *dest = (unsigned char xdata*)0x100;
131 1 if(write_F == 0)
132 1 {
133 2 for(i=0;i<8;i++)
134 2 {
135 3 for(j=0;j<256;j++)
136 3 {
137 4 *dest = *source;
138 4 dest++;
139 4 source++;
140 4
141 4 }
142 3 Delay_10ms();
143 3
144 3 }
145 2 }
146 1 }
147
148 /*******************************************************/
149 /*******************************************************/
150 void Copy_mem(void)
151 {
152 1 Page_switch(PAGE_0);
153 1 Copy_var_to_mem();
154 1 Copy_mes_to_mem();
155 1 }
156 /**************************************************************/
157 /*actual_store_p: 在写数据时实际指向FLASH的地址指针 */
158 /*actual_fetch_p: 在写数据时实际从rx_prc_buff中读时指向的指针*/
159 /**************************************************************/
160 void Store_mes(void)
161 {
162 1 register unsigned int i=0;
163 1 Page_switch(page_addr); //切换到要存贮的那一块64K区域
164 1 /*数据保护*/
165 1 special_addr1 = 0xaa;
166 1 special_addr2 = 0x55;
167 1 special_addr1 = 0xa0;
168 1 // EA = 0;
169 1 while((i<256)&&(*actual_fetch_p != '\0'))
170 1
171 1 {
172 2 *actual_store_p = *actual_fetch_p ;
173 2 actual_store_p++;
174 2 actual_fetch_p++;
175 2 i++;
176 2 }
177 1 if(*actual_fetch_p == '\0')
178 1 {
179 2 *actual_store_p = '\0' ;
C51 COMPILER V7.06 FLASH 06/10/2005 13:26:30 PAGE 4
180 2 store_prc_F = 0; //不须要再存贮
181 2 }
182 1 // EA = 1;
183 1 write_delay_time = TM20MS;
184 1 write_F = 1 ;
185 1
186 1 }
187
188
189
190 /*******************************************************/
191 /* struct MES_CON_BLOCK xdata *prc_ctr_block 表示指向
192 /*从链表中分配到的用于存贮信息的内存块
193 /*******************************************************/
194 void Message_hd(void)
195 {
196 1
197 1 if((received_mes_F == 1)&&(store_prc_F == 0)&&(write_F == 0))
198 1 {
199 2
200 2 prc_ctr_block = Create_tcb_block(); //得到内存块并先将其挂回disp_tcb_list中
201 2 received_mes_F = 0 ;
202 2 actual_store_p =(unsigned char xdata*)prc_ctr_block->mes_addr.address.address; //得到信息放置的地址
203 2 actual_fetch_p = mes_data; //从何处开始取得存贮的信息
204 2 page_addr = (unsigned char)prc_ctr_block->mes_addr.address.page_addr;
205 2 store_prc_F = 1;
206 2 pre_store_prc_F = 1;
207 2 // Bank_switch(page_addr); //存贮信息时先切换页
208 2 Store_mes();
209 2 }
210 1 else if(write_F == 0)
211 1 {
212 2 if(store_prc_F == 1) //写flash操作结束却信息没存完,继续
213 2 Store_mes();
214 2 else if(pre_store_prc_F == 1) //如果存信息刚结束
215 2 {
216 3
217 3 pre_store_prc_F = 0;
218 3 Page_switch(PAGE_0);
219 3 prc_ctr_block -> new_old_F = NEW;
220 3 }
221 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -