久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STC單片機內部EEPROM的使用-記錄上電次數
[打印本頁]
作者:
dabing89
時間:
2018-10-12 09:28
標題:
STC單片機內部EEPROM的使用-記錄上電次數
大多數情況下,大家存儲掉電的數據都是用的24C02,在一些需要考慮成本的場合,內部的EEPROM也是可以考慮使用的,這個程序介紹一下,STC內部的EEPROM的使用,程序的功能是記錄上電次數,然后加1,在數碼管上顯示出來。源碼
006 內部EEPROM使用.rar
(47.73 KB, 下載次數: 173)
2018-10-12 09:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
/*******************************************************************************
* 文件名: 數碼管顯示上電計數值
* 描 述: 上電計數
* 功 能:數碼管的使用 11.0592MHZ
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
#include "stc15w.h"//頭文件
#include "intrins.h"
/*******************************************************************************
* 文件名: 重定義
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
/*******************************************************************************
* 文件名:共陽數碼管真值表
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2015.03.03)
*******************************************************************************/
code uint8 LedChar[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
uint16 counter;
/*******************************************************************************
* 文件名:單獨位定義
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
sbit LED0 = P1^0;//第1組LED
sbit LED1 = P1^1;//第2組LED
sbit LED2 = P1^2;//第3組LED
sbit LED3 = P1^3;//第4組LED
sbit LED4 = P1^4;//第5組LED
sbit LED5 = P3^2;//第6組LED
sbit LED6 = P0^0;//第7組LED
sbit LED7 = P0^1;//第8組LED
sbit LEDS1 = P3^3;//數碼管1
sbit LEDS2 = P3^4;//數碼管2
sbit LEDS3 = P3^6;//數碼管3
sbit LEDS4 = P3^7;//數碼管4
/*******************************************************************************
* 文件名:全局變量定義區域
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
#define CMD_IDLE 0 //空閑模式
#define CMD_READ 1 //IAP字節讀命令
#define CMD_PROGRAM 2 //IAP字節編程命令
#define CMD_ERASE 3 //IAP扇區擦除命令
#define ENABLE_IAP 0x82 //if SYSCLK<20MHz
/*******************************************************************************
* 文件名:函數前置聲明
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Mcu_Port_Init();
void LedScan();
void Delay500ms(); //24MHZ
void Time0_Init();//定時器0
void IapIdle();
uint8 IapReadByte(uint16 addr);
void IapProgramByte(uint16 addr, uint8 dat);
void IapEraseSector(uint16 addr);
#define Delay() {_nop_();_nop_();_nop_();_nop_();}
/*******************************************************************************
* 文件名
* 描 述: 主函數
* 功 能:入口
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void main(void)
{
counter = IapReadByte(0x0000);//讀取數據
counter++;//寫
Mcu_Port_Init();//IO上電初始化
Time0_Init();
IapEraseSector(0x0000);//擦除數據
IapProgramByte(0x0000, counter);//寫入數據
LED0 = 0;//第1組LED,如果使能請置為1
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
while(1);
}
/*******************************************************************************
* 文件名:void LedScan()
* 描 述: LED刷新
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void LedScan()
{
static uint8 i = 0;
P2 = 0Xff;
switch(i)
{
case 0: LEDS4 = 0;LEDS1 = 1;P2 = LedChar[counter / 1000 % 10];i++;break;
case 1: LEDS1 = 0;LEDS2 = 1;P2 = LedChar[counter / 100 % 10];i++;break;
case 2: LEDS2 = 0;LEDS3 = 1;P2 = LedChar[counter / 10 % 10];i++;break;
case 3: LEDS3 = 0;LEDS4 = 1;P2 = LedChar[counter % 10];i = 0;break;
default:break;
}
}
/*******************************************************************************
* 文件名:void Time0_Init()
* 描 述: 定時器0初始化
* 功 能:1毫秒@11.0592MHz 1T
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Time0_Init(void)
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TL0 = 0xCD; //設置定時初值
TH0 = 0xD4; //設置定時初值
ET0 = 1;
TR0 = 1; //定時器0開始計時
EA = 1;
}
/*******************************************************************************
* 文件名:
* 描 述: 中斷函數
* 功 能:1毫秒@11.0592MHz
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void ET0_IRQHandler() interrupt 1
{
LedScan();
}
/*******************************************************************************
* 文件名:void Mcu_Port_Init()
* 描 述: io初始化
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Mcu_Port_Init()
{
//將P0口低二位配置為推挽輸出
//234567位配置位高阻輸入
P0M1 = 0xFC;//1111 1100
P0M0 = 0X03;//0000 0011
//P0 = 0X01;//第6個
//P0 = 0X02;//第7個
//高3位配置高阻輸入,用作模擬口
//其他配置推挽輸出,驅動LED
P1M1 = 0xE0;//1110 0000
P1M0 = 0X1F;//0001 1111
//P2口配置準雙向口
P2M1 = 0X00;
P2M0 = 0X00;
P2 = 0Xff; //上電為1111 1111
// //P54,P55口為推挽輸出
P5M1 = 0X00;
P5M0 = 0X00;
P5 = 0xFF;
//P37,P36,3.2,P3.3 P3.4口為推挽輸出
P3M1 = 0X00;
P3M0 = 0XFC;
P3 = 0X23; //0010 0111//第5個LED端口
}
/*******************************************************************************
* 文件名:void Delay500ms() //@24.000MHz
* 描 述:Y5內核延時
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Delay500ms() //@24.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 46;
j = 153;
k = 245;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/*******************************************************************************
* 文件名:void IapIdle()
* 描 述:關閉IAP
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void IapIdle()
{
IAP_CONTR = 0; //關閉IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除觸發寄存器
IAP_ADDRH = 0x80; //將地址設置到非IAP區域
IAP_ADDRL = 0;
}
/*******************************************************************************
* 文件名:uint8 IapReadByte(uint16 addr)
* 描 述:從ISP/IAP/EEPROM區域讀取一字節
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
uint8 IapReadByte(uint16 addr)
{
uint8 dat; //數據緩沖區
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_READ; //設置IAP命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_TRIG = 0x5a; //寫觸發命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = IAP_DATA; //讀ISP/IAP/EEPROM數據
IapIdle(); //關閉IAP功能
return dat; //返回
}
/*******************************************************************************
* 文件名:void IapProgramByte(uint16 addr, uint8 dat)
* 描 述: 寫一字節數據到ISP/IAP/EEPROM區域
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void IapProgramByte(uint16 addr, uint8 dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //設置IAP命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_DATA = dat; //寫ISP/IAP/EEPROM數據
IAP_TRIG = 0x5a; //寫觸發命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*******************************************************************************
* 文件名:void IapEraseSector(uint16 addr)
* 描 述: 扇區擦除
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void IapEraseSector(uint16 addr)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_ERASE; //設置IAP命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_TRIG = 0x5a; //寫觸發命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
復制代碼
作者:
盛世游龍
時間:
2019-4-16 16:27
謝謝樓主分享!
作者:
飛豬俠
時間:
2019-7-14 01:04
謝謝樓主分享
作者:
hhttwwbb
時間:
2019-7-26 13:17
謝謝樓主分享
作者:
songzhige
時間:
2019-10-8 22:09
謝謝樓主分享
作者:
frank123098
時間:
2019-11-15 15:24
謝謝樓主分享
作者:
lsqtzj
時間:
2020-2-5 13:25
謝謝樓主分享
作者:
愛好電子30年
時間:
2020-10-11 08:22
剛學習 請問一下 這個程序使用的芯片是STC15W什么型號的 謝謝
作者:
apple_01
時間:
2021-3-25 14:20
STC的內部EEPROM,擦除是整個扇區的操作,比較郁悶。
作者:
wyl138
時間:
2022-10-31 20:41
樓主的帖子都看了下,很多都還沒詳細研究,先收藏了,真是寶貝。
作者:
robter
時間:
2023-2-19 11:01
很好的例子,EEPROM編程學習了
作者:
pluto1000
時間:
2023-12-31 21:55
very nice!
作者:
liqingyundmtech
時間:
2024-12-29 22:59
謝謝樓主分享!辛苦了
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩一二区在线
|
欧美久久久久久
|
91av在线视频观看
|
亚洲国产精品精华素
|
久久91
|
凹凸日日摸日日碰夜夜
|
亚洲社区在线
|
天天久久
|
国产精品小视频在线观看
|
人人鲁人人莫人人爱精品
|
国产二区在线播放
|
午夜免费网站
|
欧美成人h版在线观看
|
日韩精品成人一区二区三区视频
|
亚洲成人免费av
|
亚洲视频在线看
|
成人av免费
|
色婷婷精品国产一区二区三区
|
欧美综合一区
|
一区二区三区中文
|
久久一二区
|
五月激情综合网
|
国产精品大片在线观看
|
欧美日韩在线观看一区
|
亚洲性视频
|
日韩精品视频一区二区三区
|
国产无套一区二区三区久久
|
日韩在线欧美
|
dy天堂
|
国产免费让你躁在线视频
|
韩国精品在线
|
久久99一区二区
|
97色伦网
|
亚洲www啪成人一区二区麻豆
|
91在线色视频
|
亚洲人在线
|
精品九九
|
免费三级网站
|
青青草综合
|
午夜a区
|
国产95在线
|