chore(MCU课设): 精简代码,增加EEPROM操作函数
This commit is contained in:
parent
3e5ae0de2d
commit
cc9a66ef00
5 changed files with 168 additions and 26 deletions
|
@ -281,6 +281,18 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>1</GroupNumber>
|
||||||
|
<FileNumber>7</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>.\eeprom.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>eeprom.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -291,7 +303,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>7</FileNumber>
|
<FileNumber>8</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -303,7 +315,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>8</FileNumber>
|
<FileNumber>9</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -315,7 +327,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>9</FileNumber>
|
<FileNumber>10</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -327,7 +339,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>10</FileNumber>
|
<FileNumber>11</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -339,7 +351,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>11</FileNumber>
|
<FileNumber>12</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -351,7 +363,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>12</FileNumber>
|
<FileNumber>13</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -363,7 +375,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>13</FileNumber>
|
<FileNumber>14</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -375,7 +387,7 @@
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>14</FileNumber>
|
<FileNumber>15</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -385,6 +397,18 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>2</GroupNumber>
|
||||||
|
<FileNumber>16</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>.\eeprom.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>eeprom.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
</ProjectOpt>
|
</ProjectOpt>
|
||||||
|
|
|
@ -406,6 +406,11 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>.\block.c</FilePath>
|
<FilePath>.\block.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>eeprom.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>.\eeprom.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -451,6 +456,11 @@
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\MCU_5 _Wave_Generate\delay.h</FilePath>
|
<FilePath>..\MCU_5 _Wave_Generate\delay.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>eeprom.h</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>.\eeprom.h</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
</Groups>
|
</Groups>
|
||||||
|
|
88
MCU/MCU_REAL _FINAL/eeprom.c
Normal file
88
MCU/MCU_REAL _FINAL/eeprom.c
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
/*------------------------------------------------------------------*/
|
||||||
|
/* --- STC MCU Limited ---------------------------------------------*/
|
||||||
|
/* --- STC89-90xx Series MCU ISP/IAP/EEPROM Demo -------------------*/
|
||||||
|
/* --- Mobile: (86)13922805190 -------------------------------------*/
|
||||||
|
/* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/
|
||||||
|
/* --- Tel: 86-0513-55012928,55012929,55012966----------------------*/
|
||||||
|
/* --- Web: www.STCMCU.com -----------------------------------------*/
|
||||||
|
/* --- Web: www.GXWMCU.com -----------------------------------------*/
|
||||||
|
/* If you want to use the program or the program referenced in the */
|
||||||
|
/* article, please specify in which data and procedures from STC */
|
||||||
|
/*------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "reg51.h"
|
||||||
|
#include "intrins.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------
|
||||||
|
Disable ISP/IAP/EEPROM function
|
||||||
|
Make MCU in a safe state
|
||||||
|
----------------------------*/
|
||||||
|
void IapIdle()
|
||||||
|
{
|
||||||
|
IAP_CONTR = 0; //Close IAP function
|
||||||
|
IAP_CMD = 0; //Clear command to standby
|
||||||
|
IAP_TRIG = 0; //Clear trigger register
|
||||||
|
IAP_ADDRH = 0x80; //Data ptr point to non-EEPROM area
|
||||||
|
IAP_ADDRL = 0; //Clear IAP address to prevent misuse
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------
|
||||||
|
Read one byte from ISP/IAP/EEPROM area
|
||||||
|
Input: addr (ISP/IAP/EEPROM address)
|
||||||
|
Output:Flash data
|
||||||
|
----------------------------*/
|
||||||
|
BYTE IapReadByte(WORD addr)
|
||||||
|
{
|
||||||
|
BYTE dat; //Data buffer
|
||||||
|
|
||||||
|
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
|
||||||
|
IAP_CMD = CMD_READ; //Set ISP/IAP/EEPROM READ command
|
||||||
|
IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
|
||||||
|
IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
|
||||||
|
IAP_TRIG = 0x46; //Send trigger command1 (0x46)
|
||||||
|
IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
|
||||||
|
_nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
|
||||||
|
dat = IAP_DATA; //Read ISP/IAP/EEPROM data
|
||||||
|
IapIdle(); //Close ISP/IAP/EEPROM function
|
||||||
|
|
||||||
|
return dat; //Return Flash data
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------
|
||||||
|
Program one byte to ISP/IAP/EEPROM area
|
||||||
|
Input: addr (ISP/IAP/EEPROM address)
|
||||||
|
dat (ISP/IAP/EEPROM data)
|
||||||
|
Output:-
|
||||||
|
----------------------------*/
|
||||||
|
void IapProgramByte(WORD addr, BYTE dat)
|
||||||
|
{
|
||||||
|
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
|
||||||
|
IAP_CMD = CMD_PROGRAM; //Set ISP/IAP/EEPROM PROGRAM command
|
||||||
|
IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
|
||||||
|
IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
|
||||||
|
IAP_DATA = dat; //Write ISP/IAP/EEPROM data
|
||||||
|
IAP_TRIG = 0x46; //Send trigger command1 (0x46)
|
||||||
|
IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
|
||||||
|
_nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
|
||||||
|
IapIdle();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------
|
||||||
|
Erase one sector area
|
||||||
|
Input: addr (ISP/IAP/EEPROM address)
|
||||||
|
Output:-
|
||||||
|
----------------------------*/
|
||||||
|
void IapEraseSector(WORD addr)
|
||||||
|
{
|
||||||
|
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
|
||||||
|
IAP_CMD = CMD_ERASE; //Set ISP/IAP/EEPROM ERASE command
|
||||||
|
IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
|
||||||
|
IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
|
||||||
|
IAP_TRIG = 0x46; //Send trigger command1 (0x46)
|
||||||
|
IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
|
||||||
|
_nop_(); //MCU will hold here until ISP/IAP/EEPROM operation complete
|
||||||
|
IapIdle();
|
||||||
|
}
|
||||||
|
|
36
MCU/MCU_REAL _FINAL/eeprom.h
Normal file
36
MCU/MCU_REAL _FINAL/eeprom.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#ifndef _EEPROM_H_
|
||||||
|
#define _EEPROM_H_
|
||||||
|
|
||||||
|
/*Declare SFR associated with the IAP */
|
||||||
|
sfr IAP_DATA = 0xE2; //Flash寄存器
|
||||||
|
sfr IAP_ADDRH = 0xE3; //Flash 高地址
|
||||||
|
sfr IAP_ADDRL = 0xE4; //Flash 低地址
|
||||||
|
sfr IAP_CMD = 0xE5; //Flash 命令寄存器
|
||||||
|
sfr IAP_TRIG = 0xE6; //Flash 控制触发器
|
||||||
|
sfr IAP_CONTR = 0xE7; //Flash 控制寄存器
|
||||||
|
|
||||||
|
/*Define ISP/IAP/EEPROM command*/
|
||||||
|
#define CMD_IDLE 0 //空闲
|
||||||
|
#define CMD_READ 1 //读
|
||||||
|
#define CMD_PROGRAM 2 //写
|
||||||
|
#define CMD_ERASE 3 //擦除
|
||||||
|
|
||||||
|
/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
|
||||||
|
//#define ENABLE_IAP 0x80 //if SYSCLK<40MHz
|
||||||
|
#define ENABLE_IAP 0x81 //if SYSCLK<20MHz
|
||||||
|
//#define ENABLE_IAP x82 //if SYSCLK<10MHz
|
||||||
|
//#define ENABLE_IAP 0x83 //if SYSCLK<5MHz
|
||||||
|
|
||||||
|
//Start address for STC89C58xx EEPROM
|
||||||
|
#define IAP_ADDRESS 0x08000
|
||||||
|
|
||||||
|
typedef unsigned char BYTE;
|
||||||
|
typedef unsigned int WORD;
|
||||||
|
|
||||||
|
void Delay(BYTE n);
|
||||||
|
void IapIdle();
|
||||||
|
BYTE IapReadByte(WORD addr);
|
||||||
|
void IapProgramByte(WORD addr, BYTE dat);
|
||||||
|
void IapEraseSector(WORD addr);
|
||||||
|
|
||||||
|
#endif
|
|
@ -6,26 +6,10 @@ unsigned char TH, TL;
|
||||||
extern Menu *NOW; //菜单指针
|
extern Menu *NOW; //菜单指针
|
||||||
extern enum OPR opr; //按键状态
|
extern enum OPR opr; //按键状态
|
||||||
|
|
||||||
unsigned char freshScreenTriger = 0;
|
|
||||||
|
|
||||||
void int0() interrupt 0 //外部中断:检测左右旋钮
|
void int0() interrupt 0 //外部中断:检测左右旋钮
|
||||||
{
|
{
|
||||||
// IE0 = 0; //Ïû¶¶
|
|
||||||
// delay(20);
|
|
||||||
// IE0 = 0;
|
|
||||||
//
|
|
||||||
// if(PIN_3 == 0)
|
|
||||||
// {
|
|
||||||
// delay(10);
|
|
||||||
// if(PIN_3 == 0)
|
|
||||||
// opr = left;
|
|
||||||
// }
|
|
||||||
// else if(PIN_3 == 1)
|
|
||||||
// {
|
|
||||||
// delay(10);
|
|
||||||
// if(PIN_3 == 1)
|
|
||||||
// opr = right;
|
|
||||||
// }
|
|
||||||
unsigned char LS, CS, flag = 0;
|
unsigned char LS, CS, flag = 0;
|
||||||
LS = PIN_3;
|
LS = PIN_3;
|
||||||
while(!PIN_1)
|
while(!PIN_1)
|
||||||
|
@ -81,7 +65,7 @@ int main()
|
||||||
displayInit(); //屏幕初始化
|
displayInit(); //屏幕初始化
|
||||||
clear();
|
clear();
|
||||||
menuInit(); //菜单及其他初始化
|
menuInit(); //菜单及其他初始化
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
Reference in a new issue