STC89C52单片机内部eeprom的应用

发布者:qiuxubiao最新更新时间:2016-11-18 来源: eefocus关键字:STC89C52  单片机  内部eeprom 手机看文章 扫描二维码
随时随地手机看文章

/****说明:结合我手上的板子,显示部分代码没有规律。上班时间没事用了俩小时看芯片资料带改,下班后一试直接成功。用手机看的PDF sheet,可把我累死了!
测试功能:0-60循环计数,断电保护存储最后数值,重启继续。*****/
#include ;gt;
#include ; //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int 
#define RdCommand 0x01 //定义ISP的操作命令
#define PrgCommand 0x02
#define EraseCommand 0x03 
#define Error 1
#define Ok 0
#define WaitTime 0x01 //定义CPU的等待时间
sfr ISP_DATA=0xe2; //寄存器申明
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;
sbit L1=P1^2; 
sbit L2=P1^3; 
sbit L3=P1^4;
sbit L4=P1^5; 
uchar code table[20]={
 0x14,0xf5,0x19,0x51,
 //0 1 2 3
 0xf0,0x52,0x12,0x75,
 // 4 5 6 7 
 0x10,0x50,0x30,0x92,
 // 8 9 a b
 0x1e,0x91,0x1a,0x3a,0x38,0xfb,0xef,0xff};//排列方式: A E C DP D G B F
 //c d e F P - . 熄灭 
 
 
uchar a,b;
uchar num;
 /******延时函数*********/
void delay_led(uint z)
{
 uint i,j;
 for (j=0;j<z;j++)
 for ( i=0;i<125;i++);
}
/********显示函数*********/
void display()

L1=1;
L2=1;
L3=0;
P0=table[a];//十位显示
delay_led(2);
L3=1; 
L4=0;
P0=table; //个位显示 
delay_led(2);
L4=1;
}



/* ================ 打开 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void)
{
EA = 0; /* 关中断 */
ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */
ISP_CONTR = ISP_CONTR | 0x80; /* ISPEN=1 */
}
/* =============== 关闭 ISP,IAP 功能 ================== */
void ISP_IAP_disable(void)
{
ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
ISP_TRIG = 0x00;
ISP_CMD=0X00;
ISP_ADDRH=0xFF;
ISP_ADDRL=0xff;
EA = 1; /* 开中断 */
}
/* ================ 公用的触发代码 ==================== */
void ISPgoon(void)
{
ISP_IAP_enable(); /* 打开 ISP,IAP 功能 */
ISP_TRIG = 0x46; /* 触发ISP_IAP命令字节1 */
ISP_TRIG = 0xb9; /* 触发ISP_IAP命令字节2 */
_nop_();
}
/* ==================== 字节读 ======================== */
unsigned char byte_read(unsigned int byte_addr)
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址赋值 */
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 清除低3位 */
ISP_CMD = ISP_CMD | RdCommand; /* 写入读命令 */
ISPgoon(); /* 触发执行 */
ISP_IAP_disable(); /* 关闭ISP,IAP功能 */
return (ISP_DATA); /* 返回读到的数据 */
}
/* ================== 扇区擦除 ======================== */
void SectorErase(unsigned int sector_addr)
{
unsigned int iSectorAddr;
iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */
ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8; /* 清空低3位 */
ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3 */
ISPgoon(); /* 触发执行 */
ISP_IAP_disable(); /* 关闭ISP,IAP功能 */
}
/* ==================== 字节写 ======================== */
void byte_write(unsigned int byte_addr, unsigned char original_data)
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8); /* 取地址 */
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 清低3位 */
ISP_CMD = ISP_CMD | PrgCommand; /* 写命令2 */
ISP_DATA = original_data; /* 写入数据准备 */
ISPgoon(); /* 触发执行 */
ISP_IAP_disable(); /* 关闭IAP功能 */
}
void main()
{
uchar num1;
TMOD=0x01; //设置定时器0为工作方式1(0000 0001)
TH0=(65536-50000)/256; 
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
num1=byte_read(0x2000);//程序开始时读取EEPROM中数据 
if(num1>=60) //防止首次上电时读取出错 
 num1=0;
while(1) 
{
 if(num>=20)
 {
 num=0;
 num1++;
 SectorErase(0x2000);//擦除扇区
 byte_write(0x2000,num1);//重新写入数据 
 if(num1==60)
 {
 num1=0;
 }
 a=num1/10;
 b=num1%10;
 }
 display();
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++; 
}

关键字:STC89C52  单片机  内部eeprom 引用地址:STC89C52单片机内部eeprom的应用

上一篇:关于单片机I/0口置低的引脚不能拉高的问题
下一篇:可以改密码的单片机电子密码锁

推荐阅读最新更新时间:2024-03-16 15:21

基于AVR单片机的博物馆防盗保护器系统设计
引言 博物馆内的藏品常常受到人为盗窃的威胁,周围环境的变化也会对其造成破坏,因此需要极为可靠的防盗系统及完善的空调系统,本设计的目的就是实现对馆藏品的智能化防盗和保护。博物馆关闭时便可将此防盗保护器启动,通过CMOS传感器对博物馆进行扫描,图像信号在微处理器中进行处理筛选压缩,并与被监控信号(人形信号)进行比较,一旦出现类人形信号,便将数据进行存储(这样可以大大节省存储空间),并进行报警。被监控信号可以增加,可以是其它任何可能对馆藏品造成损害的动物,只不过在进行筛选比较处理时要复杂一些。另外,通过温度传感器对温度信号进行采集监控,通过控制馆内空调来达到调节温度的效果,以避免馆内文物因为温度的变化而造成损害。 图1 系统功能框
[单片机]
基于AVR<font color='red'>单片机</font>的博物馆防盗保护器系统设计
如何学习使用单片机?学习单片机的八个步骤总结
学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 第一步:数字I/O的使用 使用按钮输入信号,发光二极管显示输出电平,就可以学习引脚的数字I/O功能,在按下某个按钮后,某发光二极管发亮,这就是数字电路中组合逻辑的功能,虽然很简单,但是可以学习一般的单片机编程思想,例如,必须设置很多寄存器对引脚进行初始化处理,才能使引脚具备有数字输入和输出输出功能。每使用单片机的一个功能,就要对控制该功能的寄存器进行设置,这就是单片机编程的特点,千万不要怕麻烦,所有的单片机都是这样 第二步:定时器的使用 学会定时器的使用,就可以用单片机实现时序电路,时序电路的功
[单片机]
实验九 定时、记数、显示(80C51单片机汇编语言编程)
设计一个带有控制功能的脉冲发生器/计数器系统,脉冲发生器发出周期为2秒的方波(提示:可由P3.0口输出,用发光二极管显示);被计数脉冲由T0口输入,所记录的脉冲数以十进制形式在数码管显示(至少应可记录256个脉冲);设两个按键,一个启动脉冲发生器,一个启动记数,(按一次启动,再按一次停止),不启动时,发光管灭,数码管显示学号。 伟福:数码管为共阴极; KEY/LED_CS与CS0连线,则段地址为:8004H,位地址为:8002H ORG 0000H AJMP MAIN ORG 0003H AJMP INT0 ORG 0013H AJMP INT1 ORG 001BH AJMP T1 ORG 0030H MAIN:MOV TMOD
[单片机]
汽车驾驶模拟器单片机系统的设计与研究
汽车驾驶模拟器是一种能正确模拟汽车的驾驶操纵动作,获得实车驾驶感觉的仿真系统。目前的汽车驾驶模拟器集合了传感器、计算机三维实时动画、计算机接口、人工智能、数据通信、网络、多媒体等多种先进技术,主要用于驾驶员的培训,也可以对微观交通进行仿真,对汽车的控制特性进行研究。汽车驾驶模拟器具有安全性高、再现性好的特点。利用驾驶模拟器来进行研究和训练,可方便地模拟各种道路环境、天气状况,分析汽车的技术性能指标,从而可以节省大量的自然资源,具有很高的经济价值。 在汽车驾驶模拟器中,传感控制系统的性能直接影响到整个汽车驾驶模拟系统的交互性和实时性,是衡量汽车驾驶模拟器实用性能的重要指标。传感控制系统主要由各种传感器、数据采集和处理系统、以及接口电
[单片机]
汽车驾驶模拟器<font color='red'>单片机</font>系统的设计与研究
如何在mcu上使用printf使串口输出
#ifdef __GNUC__ //另外GNU还有一些公用的扩展出来的宏 比如__GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /** *
[单片机]
基于51开发的D/A&A/D 与单片机接口原理2
D/A :的操作我们最关心的是,串行还是并行,接口的说明,然后是转换位数和转换速率,完了看操作时序,看接法,DAC0832有好几种,但是一般芯片只有一种接法,接法不同当然操作方法也不同。 上图为D/A 接口图 就从操作2个管脚 P5 的2脚和3脚有个跳线帽 短路了 灯会根据D/A 亮到灭变化 写个程序代码更好理解 #include sbit csda = P3^2; sbit wr = P3^6; void main(){ csda =0; //根据管脚说明操作时序都是低电平有效 wr =0;//根据管脚说明 操作时序都是低电平有效 P0 = 0xff; //单片机输出全
[单片机]
基于51开发的D/A&A/D 与<font color='red'>单片机</font>接口原理2
C51单片机编程技巧:LCD1602编程经验分享
简介:先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。 这次我来分享一下我的LCD1602的编程经验: 先说明一下,我下面要说的LCD1602的芯片驱动是HD44780,如果你们的LCD1602驱动芯片不是HD44780,那么下面的内容是不适用的。 我对LCD1602的整体理解 这里说一下我对LCD1602的整体理解哈,LCD1602是一个可以显示两行字符的LCD显示器,每一行可以都写入40个字符,但是每行都只有前16个字符可以显示,每行后面的24个字符无法立即显示,只说不容易明白,下面看一下示意图: 另外LCD1602
[单片机]
C51<font color='red'>单片机</font>编程技巧:LCD1602编程经验分享
沁恒股份USB单片机CH554概述
概 述 CH554是一款兼容MCS51的增强型E8051内核单片机,79%的指令是单字节单周期指令,内置24MHz时钟源,内置1K+256B RAM,16KB iFlash-ROM。CH554提供丰富的接口资源,包括ADC模数转换、3组定时器和信号捕捉及PWM、双异步串口、SPI等。 CH554提供6通道电容检测模块,互电容方式支持最多15个触摸按键。 CH554内嵌全速USB控制器,支持USB HOST主机模式和USB DEVICE设备模式。 系统框图 特 点 》 增强型E8051内核CPU,速度比标准MCS51快8-15倍,特有XRAM数据快速复制指令; 》 内置14KB Code Flash、2KB BootLoad
[单片机]
沁恒股份USB<font color='red'>单片机</font>CH554概述
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved