📄 eeprom.lst
字号:
C51 COMPILER V7.06 EEPROM 03/16/2009 19:12:50 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: G:\Keil\C51\BIN\C51.EXE eeprom.c OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "global.h"
2 #include "eeprom.h"
3
4 //****************** 关闭 ISP,IAP 功能 **************
5 void ISP_IAP_Disable(void)
6 {
7 1 ISP_CONTR = 0x00;
8 1 ISP_CMD = 0X00;
9 1 ISP_TRIG = 0x00;
10 1 EA = 1; //开中断
11 1 }
12
13 //*******************字节读***************************
14
15 uchar Byte_read(uint byte_addr)
16 {
17 1
18 1 ISP_CONTR = En_Wait_TIME; //开启ISP/IAP;并送等待时间
19 1 ISP_CMD = Read_COM; //送字节读命令字
20 1 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节
21 1 ISP_ADDRL = (uchar)(byte_addr & 0X00FF); //送地址低字节
22 1 EA = 0; //关中断
23 1 ISP_TRIG = 0X46; //送触发命令字 0X46、0XB9
24 1 ISP_TRIG = 0XB9;
25 1 _nop_();
26 1 ISP_IAP_Disable(); //关闭ISP/IAP功能
27 1 EA = 1; //开中断
28 1 return ((unsigned char)ISP_DATA);
29 1 }
30
31
32
33 //********************字节编程***********************
34
35 void Byte_program(uint byte_addr, uchar isp_iap_data)
36 {
37 1
38 1 ISP_CONTR = En_Wait_TIME; //开启ISP/IAP;并送等待时间
39 1 ISP_CMD = Prog_COM; //送字节编程命令字
40 1 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节
41 1 ISP_ADDRL = (uchar)(byte_addr & 0X00FF); //送地址低字节
42 1 ISP_DATA = isp_iap_data; //送数据进ISP_DATA
43 1 EA = 0; //关中断
44 1 ISP_TRIG = 0X46; //送触发命令字 0X46、0XB9
45 1 ISP_TRIG = 0XB9;
46 1 _nop_();
47 1 ISP_IAP_Disable(); //关闭ISP/IAP功能
48 1 EA = 1; //开中断
49 1 }
50
51 //********************* 扇区擦除*********************
52 void Sector_erase(uint sector_addr)
53 {
54 1
55 1 ISP_CONTR = En_Wait_TIME; //开启ISP/IAP;并送等待时间
C51 COMPILER V7.06 EEPROM 03/16/2009 19:12:50 PAGE 2
56 1 // ISP_CONTR=0xc1;
57 1 ISP_CMD = Dele_COM; //送扇区擦除命令字
58 1 ISP_ADDRH = (uchar)(sector_addr >> 8); //送地址高字节
59 1 ISP_ADDRL = (uchar)(sector_addr & 0X00FF); //送地址低字节
60 1 EA = 0; //关中断
61 1 ISP_TRIG = 0X46; //送触发命令字 0X46、0XB9
62 1 ISP_TRIG = 0XB9;
63 1 _nop_();
64 1 ISP_IAP_Disable(); //关闭ISP/IAP功能
65 1 EA = 1;
66 1 }
67
68 //EEPROM写数据程序
69 void Eeprom_WriteData(void)
70 {
71 1 if(Save_Can==1)//如果关键数据有改变了,保存关键数据
72 1 {
73 2 // if(Erase_Flag==0)
74 2 // {
75 2 // Erase_Flag=1;//使能擦除扇区功能计数时间
76 2 Sector_erase(0X2000); //扇区擦除,第一个扇区
77 2 // }
78 2 // else
79 2 // {
80 2 // if(Erase_Count>5)//大于20ms了,说明已经擦除成功了
81 2 // {
82 2 // Erase_Flag=0;//关闭擦除扇区功能计数
83 2 // Erase_Count=0;
84 2 WatchDog; //喂狗
85 2 Byte_program(0X2000,Volume);//音量
86 2 Byte_program(0X2001,Delay_s);//延时
87 2 Byte_program(0X2002,District);//区位
88 2 Byte_program(0X2003,Node);//结点
89 2 Byte_program(0X2004,Frequency_BCD[0]);//频率百位
90 2 Byte_program(0X2005,Frequency_BCD[1]);//频率十位
91 2 Byte_program(0X2006,Frequency_BCD[2]);//频率个位
92 2 Byte_program(0X2007,Frequency_BCD[3]);//频率十分位
93 2 Byte_program(0X2008,Frequency_BCD[4]);//频率百分位
94 2 Byte_program(0X2009,Band_Data);//波段
95 2 Save_Can=0;//清关键数据改变标志
96 2 // }
97 2 // }
98 2
99 2 }
100 1 }
101
102
103
104 void Start_Process(void)//开机检测掉电前的重要数据
105 {
106 1 unsigned char Code;
107 1 unsigned char Frequency_B,Frequency_S,Frequency_G,Frequency_SF,Frequency_BF;//频率的百十个,十分位的数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -