📄 w79exxxnvm.lst
字号:
C51 COMPILER V6.14 W79EXXXNVM 01/09/2009 06:32:08 PAGE 1
C51 COMPILER V6.14, COMPILATION OF MODULE W79EXXXNVM
OBJECT MODULE PLACED IN .\w79exxxNVM.OBJ
COMPILER INVOKED BY: E:\Program Files\keil\C51\BIN\C51.EXE .\w79exxxNVM.c DEBUG OBJECTEXTEND
stmt level source
1 /*---------------------------------------------------*/
2 /* */
3 /* W79E4051/W79E825 NVM通用读写子程序 */
4 /* */
5 /* CPU : W79E4051 */
6 /* 晶振 : 12MHz */
7 /* 作者 : 许意义 */
8 /* 版本 : V1.0 */
9 /* 日期 : 2009.1.6 */
10 /* */
11 /*---------------------------------------------------*/
12 #include "MPU51TYPE.h"
13 #include "W79ExxxNVM.h"
14
15 int NVM_RD_INT(unsigned char ADDR) // 字读出
16 { unsigned int IA;
17 1 byte0(IA) = NVM_RD_CHAR(ADDR++);
18 1 byte1(IA) = NVM_RD_CHAR(ADDR);
19 1 return(IA);
20 1 }
21
22 long NVM_RD_LONG(unsigned char ADDR) // 长字读出
23 { unsigned long LA;
24 1 byte0(LA) = NVM_RD_CHAR(ADDR++);
25 1 byte1(LA) = NVM_RD_CHAR(ADDR++);
26 1 byte2(LA) = NVM_RD_CHAR(ADDR++);
27 1 byte3(LA) = NVM_RD_CHAR(ADDR);
28 1 return(LA);
29 1 }
30
31 void NVM_RD_PAGE(unsigned char PAGE,unsigned char *p) // 页读出
32 {
33 1 unsigned char a, i;
34 1 a = PAGE << NVM_RL;
35 1 for (i=0; i<NVM_PLEN; i++)
36 1 { *p++ = NVM_RD_CHAR(a++);
37 2 }
38 1 }
39
40 void NVM_CLR(unsigned char PAGE) // 页擦除
41 {
42 1 NVMADDR = PAGE << NVM_RL;
43 1 NVMCON = _BV(EER);
44 1 }
45
46 void NVM_WR_CHAR(unsigned char ADDR,unsigned char CA) // 字节写入
47 {
48 1 NVMADDR = ADDR;
49 1 NVMDATA = CA;
50 1 NVMCON = _BV(EWR);
51 1 }
52
53 void NVM_WR_INT(unsigned char ADDR,unsigned int IA) // 字写入
54 {
55 1 NVM_WR_CHAR(ADDR++,byte0(IA));
C51 COMPILER V6.14 W79EXXXNVM 01/09/2009 06:32:08 PAGE 2
56 1 NVM_WR_CHAR(ADDR, byte1(IA));
57 1 }
58
59 void NVM_WR_LONG(unsigned char ADDR,unsigned long LA) // 长字写入
60 {
61 1 NVM_WR_CHAR(ADDR++,byte0(LA));
62 1 NVM_WR_CHAR(ADDR++,byte1(LA));
63 1 NVM_WR_CHAR(ADDR++,byte2(LA));
64 1 NVM_WR_CHAR(ADDR, byte3(LA));
65 1 }
66
67 void NVM_WR_PAGE(unsigned char PAGE,unsigned char *p) // 页写入
68 {
69 1 unsigned char a, i;
70 1 unsigned char *p1;
71 1 a = PAGE << NVM_RL;
72 1 p1 = p;
73 1 for (i=0; i<NVM_PLEN; i++)
74 1 { if ( *p1++ != NVM_RD_CHAR(a++)) // 比较页内容,值相等直接返回。
75 2 { NVM_CLR(PAGE); // 值不等先页擦除。
76 3 a = PAGE << NVM_RL;
77 3 for (i=0; i<NVM_PLEN; i++)
78 3 { NVM_WR_CHAR(a++,*p++); // 再写入。
79 4 }
80 3 goto NVM_WR_PAGE_END;
81 3 }
82 2 }
83 1 NVM_WR_PAGE_END: ; // 页写入成功,返回
84 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 282 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 24
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -