156 lines
7.9 KiB
Plaintext
156 lines
7.9 KiB
Plaintext
C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE EEPROM
|
||
OBJECT MODULE PLACED IN .\Objects\EEPROM.obj
|
||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\EEPROM.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT
|
||
-END PRINT(.\Listings\EEPROM.lst) TABS(2) OBJECT(.\Objects\EEPROM.obj)
|
||
|
||
line level source
|
||
|
||
1 /*---------------------------------------------------------------------*/
|
||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||
11 /*---------------------------------------------------------------------*/
|
||
12
|
||
13 /*************** 功能说明 ****************
|
||
14
|
||
15 本文件为STC8系列的内置EEPROM读写程序,用户几乎可以不修改这个程序.
|
||
16
|
||
17 ******************************************/
|
||
18
|
||
19 #include "config.h"
|
||
20 #include "eeprom.h"
|
||
21
|
||
22 //========================================================================
|
||
23 // 函数: void ISP_Disable(void)
|
||
24 // 描述: 禁止访问ISP/IAP.
|
||
25 // 参数: non.
|
||
26 // 返回: non.
|
||
27 // 版本: V1.0, 2012-10-22
|
||
28 //========================================================================
|
||
29 void DisableEEPROM(void)
|
||
30 {
|
||
31 1 IAP_CONTR = 0; //禁止IAP操作
|
||
32 1 IAP_CMD = 0; //去除IAP命令
|
||
33 1 IAP_TRIG = 0; //防止IAP命令误触发
|
||
34 1 IAP_ADDRH = 0xff; //清0地址高字节
|
||
35 1 IAP_ADDRL = 0xff; //清0地址低字节,指向非EEPROM区,防止误操作
|
||
36 1 }
|
||
37
|
||
38 //========================================================================
|
||
39 // 函数: void EEPROM_Trig(void)
|
||
40 // 描述: 触发EEPROM操作.
|
||
41 // 参数: none.
|
||
42 // 返回: none.
|
||
43 // 版本: V1.0, 2014-6-30
|
||
44 //========================================================================
|
||
45 void EEPROM_Trig(void)
|
||
46 {
|
||
47 1 F0 = EA; //保存全局中断
|
||
48 1 EA = 0; //禁止中断, 避免触发命令无效
|
||
49 1 IAP_TRIG = 0x5A;
|
||
50 1 IAP_TRIG = 0xA5; //先送5AH,再送A5H到IAP触发寄存器,每次都需要如此
|
||
51 1 //送完A5H后,IAP命令立即被触发启动
|
||
52 1 //CPU等待IAP完成后,才会继续执行程序。
|
||
53 1 _nop_();
|
||
54 1 _nop_();
|
||
C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 2
|
||
|
||
55 1 EA = F0; //恢复全局中断
|
||
56 1 }
|
||
57
|
||
58 //========================================================================
|
||
59 // 函数: void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||
60 // 描述: 从指定EEPROM首地址读出n个字节放指定的缓冲.
|
||
61 // 参数: EE_address: 读出EEPROM的首地址.
|
||
62 // DataAddress: 读出数据放缓冲的首地址.
|
||
63 // number: 读出的字节长度.
|
||
64 // 返回: non.
|
||
65 // 版本: V1.0, 2012-10-22
|
||
66 //========================================================================
|
||
67 void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||
68 {
|
||
69 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||
70 1 IAP_READ(); //送字节读命令,命令不需改变时,不需重新送命令
|
||
71 1 do
|
||
72 1 {
|
||
73 2 IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
|
||
74 2 IAP_ADDRL = EE_address % 256; //送地址低字节
|
||
75 2 EEPROM_Trig(); //触发EEPROM操作
|
||
76 2 *DataAddress = IAP_DATA; //读出的数据送往
|
||
77 2 EE_address++;
|
||
78 2 DataAddress++;
|
||
79 2 }while(--number);
|
||
80 1
|
||
81 1 DisableEEPROM();
|
||
82 1 }
|
||
83
|
||
84 //========================================================================
|
||
85 // 函数: void EEPROM_SectorErase(u16 EE_address)
|
||
86 // 描述: 把指定地址的EEPROM扇区擦除.
|
||
87 // 参数: EE_address: 要擦除的扇区EEPROM的地址.
|
||
88 // 返回: non.
|
||
89 // 版本: V1.0, 2013-5-10
|
||
90 //========================================================================
|
||
91 void EEPROM_SectorErase(u16 EE_address)
|
||
92 {
|
||
93 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||
94 1 IAP_ERASE(); //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令
|
||
95 1 //只有扇区擦除,没有字节擦除,512字节/扇区。
|
||
96 1 //扇区中任意一个字节地址都是扇区地址。
|
||
97 1 IAP_ADDRH = EE_address / 256; //送扇区地址高字节(地址需要改变时才需重新送地址)
|
||
98 1 IAP_ADDRL = EE_address % 256; //送扇区地址低字节
|
||
99 1 EEPROM_Trig(); //触发EEPROM操作
|
||
100 1 DisableEEPROM(); //禁止EEPROM操作
|
||
101 1 }
|
||
102
|
||
103 //========================================================================
|
||
104 // 函数: void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||
105 // 描述: 把缓冲的n个字节写入指定首地址的EEPROM.
|
||
106 // 参数: EE_address: 写入EEPROM的首地址.
|
||
107 // DataAddress: 写入源数据的缓冲的首地址.
|
||
108 // number: 写入的字节长度.
|
||
109 // 返回: non.
|
||
110 // 版本: V1.0, 2012-10-22
|
||
111 //========================================================================
|
||
112 void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number)
|
||
113 {
|
||
114 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够
|
||
115 1 IAP_WRITE(); //宏调用, 送字节写命令
|
||
116 1 do
|
||
C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 3
|
||
|
||
117 1 {
|
||
118 2 IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
|
||
119 2 IAP_ADDRL = EE_address % 256; //送地址低字节
|
||
120 2 IAP_DATA = *DataAddress; //送数据到IAP_DATA,只有数据改变时才需重新送
|
||
121 2 EEPROM_Trig(); //触发EEPROM操作
|
||
122 2 EE_address++; //下一个地址
|
||
123 2 DataAddress++; //下一个数据
|
||
124 2 }while(--number); //直到结束
|
||
125 1 DisableEEPROM();
|
||
126 1 }
|
||
127
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 162 ----
|
||
CONSTANT SIZE = ---- ----
|
||
XDATA SIZE = ---- ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = ---- 14
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- ----
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|