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>
|
||||
<bShared>0</bShared>
|
||||
</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>
|
||||
|
@ -291,7 +303,7 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -303,7 +315,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -315,7 +327,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -327,7 +339,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -339,7 +351,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -351,7 +363,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -363,7 +375,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -375,7 +387,7 @@
|
|||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -385,6 +397,18 @@
|
|||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</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>
|
||||
|
||||
</ProjectOpt>
|
||||
|
|
|
@ -406,6 +406,11 @@
|
|||
<FileType>1</FileType>
|
||||
<FilePath>.\block.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>eeprom.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\eeprom.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
@ -451,6 +456,11 @@
|
|||
<FileType>5</FileType>
|
||||
<FilePath>..\MCU_5 _Wave_Generate\delay.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>eeprom.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\eeprom.h</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
</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 enum OPR opr; //按键状态
|
||||
|
||||
unsigned char freshScreenTriger = 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;
|
||||
LS = PIN_3;
|
||||
while(!PIN_1)
|
||||
|
@ -81,7 +65,7 @@ int main()
|
|||
displayInit(); //屏幕初始化
|
||||
clear();
|
||||
menuInit(); //菜单及其他初始化
|
||||
|
||||
|
||||
while(1)
|
||||
{
|
||||
|
||||
|
|
Reference in a new issue