📄 dataflash.lst
字号:
C51 COMPILER V7.07 DATAFLASH 09/14/2005 15:20:46 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE DATAFLASH
OBJECT MODULE PLACED IN Dataflash.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Dataflash.c LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "Global.h"
2
3 // 全局变量定义
4 extern struct Para
5 {
6 uchar Wiegand_format; // 1、韦根通信1 个字节,3 种选择,1~4
7 uchar Machine_addr; // 2、终端编号1 个字节,1~254
8 uchar Area_addr; // 3、终端区域编号1 个字节,1~240
9 uchar Secu_class; // 4、安全等级1 个字节,1~10
10 uchar Match_mode; // 5、匹配模式1 个字节,1~2
11 uchar Lock_para; // 6、锁控参数1 个字节,1~3
12 uchar Baudrate; // 7、串口速率1 个字节,1~6
13 };
14
15 extern union Para_u
16 {
17 uchar para_dat[7];
18 struct Para Actual_para;
19 }Para_ee; // 控制器参数
20
21
22 ///////////////////////////////////////////////////////////////////////////////
23 // 开启DATAFLASH
24 ///////////////////////////////////////////////////////////////////////////////
25 void ISP_IAP_enable(void)
26 {
27 1 EA = 0; /* 关中断 */
28 1 ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
29 1 ISP_CONTR = ISP_CONTR | WAIT_TIME;
30 1 ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
31 1 }
32
33 ///////////////////////////////////////////////////////////////////////////////
34 // 关闭DATAFLASH
35 ///////////////////////////////////////////////////////////////////////////////
36 void ISP_IAP_disable(void)
37 {
38 1 ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
39 1 ISP_TRIG = 0x00;
40 1 EA = 1; /* 开中断 */
41 1 }
42
43 ///////////////////////////////////////////////////////////////////////////////
44 // 从DATAFLASH读一个字节
45 ///////////////////////////////////////////////////////////////////////////////
46 uchar byte_read(uint byte_addr)
47 {
48 1 ISP_ADDRH=(uchar)(byte_addr>>8); // 地址高字节
49 1 ISP_ADDRL=(uchar)(byte_addr&0x00ff); // 地址低字节
50 1
51 1 ISP_CMD=ISP_CMD&0xf8; // 1111,1000
52 1 ISP_CMD=ISP_CMD|READ_AP_and_Data_Memory_Command; // 0000,0001
53 1
54 1 ISP_IAP_enable(); // 允许ISP
55 1
C51 COMPILER V7.07 DATAFLASH 09/14/2005 15:20:46 PAGE 2
56 1 ISP_TRIG=0x46;
57 1 ISP_TRIG=0xb9;
58 1 _nop_();
59 1
60 1 ISP_IAP_disable(); // 不允许ISP
61 1
62 1 return (ISP_DATA);
63 1 }
64
65 ///////////////////////////////////////////////////////////////////////////////
66 // 擦除DATAFLASH的一个扇区
67 ///////////////////////////////////////////////////////////////////////////////
68 uchar sector_erase(uint sector_addr)
69 {
70 1 uint get_sector_addr=0;
71 1
72 1 get_sector_addr=(sector_addr&0xfe00); // 1111,1110,0000,0000; 取扇区地址
73 1 ISP_ADDRH=(uchar)(get_sector_addr>>8);
74 1 ISP_ADDRL=0x00;
75 1
76 1 ISP_CMD=ISP_CMD&0xf8; // 1111,1000
77 1 ISP_CMD=ISP_CMD|SECTOR_ERASE_AP_and_Data_Memory_Command; // 0000,0011
78 1
79 1 ISP_IAP_enable();
80 1
81 1 ISP_TRIG=0x46; // 触发ISP_IAP命令
82 1 ISP_TRIG=0xb9; // 触发ISP_IAP命令
83 1 _nop_();
84 1
85 1 ISP_IAP_disable();
86 1
87 1 return OK;
88 1 }
89
90 ///////////////////////////////////////////////////////////////////////////////
91 // 向DATAFLASH写一个字节
92 ///////////////////////////////////////////////////////////////////////////////
93 uchar byte_write(uint byte_addr, uchar original_data)
94 {
95 1 ISP_ADDRH=(uchar)(byte_addr>>8); // 地址高字节
96 1 ISP_ADDRL=(uchar)(byte_addr&0x00ff); // 地址低字节
97 1
98 1 ISP_CMD=ISP_CMD&0xf8; // 1111,1000
99 1 ISP_CMD=ISP_CMD|PROGRAM_AP_and_Data_Memory_Command; // 0000,0010
100 1 ISP_DATA=original_data;
101 1
102 1 ISP_IAP_enable();
103 1
104 1 ISP_TRIG=0x46;
105 1 ISP_TRIG=0xb9;
106 1 _nop_();
107 1
108 1 ISP_DATA=0x00; // 读出来校验
109 1
110 1 ISP_CMD=ISP_CMD&0xf8; // 1111,1000
111 1 ISP_CMD=ISP_CMD|READ_AP_and_Data_Memory_Command; // 0000,0001
112 1
113 1 ISP_TRIG=0x46; // 触发ISP_IAP命令
114 1 ISP_TRIG=0xb9; // 触发ISP_IAP命令
115 1 _nop_();
116 1
117 1 ISP_IAP_disable();
C51 COMPILER V7.07 DATAFLASH 09/14/2005 15:20:46 PAGE 3
118 1
119 1 if(ISP_DATA==original_data)
120 1 return OK;
121 1 else
122 1 return ERROR;
123 1 }
124
125 ///////////////////////////////////////////////////////////////////////////////
126 // 读取系统参数
127 ///////////////////////////////////////////////////////////////////////////////
128 void Read_Para()
129 {
130 1 idata uchar i;
131 1
132 1 for(i=0;i<7;i++)
133 1 Para_ee.para_dat[i]=byte_read(0x8000+i); // 逐个读
134 1 }
135
136 ///////////////////////////////////////////////////////////////////////////////
137 // 保存系统参数
138 ///////////////////////////////////////////////////////////////////////////////
139 void Write_Para()
140 {
141 1 idata uchar i;
142 1
143 1 sector_erase(0x8000); // 擦除扇区
144 1
145 1 for(i=0;i<7;i++)
146 1 byte_write(0x8000+i, Para_ee.para_dat[i]); // 逐个写
147 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 217 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- 2
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 + -