文档库 最新最全的文档下载
当前位置:文档库 › 关于断电延时和EEPROM数据保存STC掉电保存数据程序

关于断电延时和EEPROM数据保存STC掉电保存数据程序

关于断电延时和EEPROM数据保存STC掉电保存数据程序
关于断电延时和EEPROM数据保存STC掉电保存数据程序

关于断电延时和EEPROM数据保存(申酷!!)

EEPROM, 申酷, 数据, 延时, 断电

原来想用AD检测断电的,做出来测试几遍不行,听了各位的意见。

就花了一个下午完成用一个I/O断电检测电路。把法拉电容改小了,节约开支,一个2200uf的普通电容就足够了。经测试能正常保存数据到EEPROM。

电路见下面的图片链接。

该解决方案的程序:

#include

#include //汇编头文件

#define uchar unsigned char

#define uint unsigned int

sbit p12 = P1^2;

uchar i;

void delay(uint z) //延时ms

{

uint x,y;

for(x=112;x>0;x--)

for(y=z;y>0;y--);

}

void init_232(void) //串口初始化

{

SCON = 0x50;

TMOD |= 0x20;

TH1 = 0xfa; //波特率 9600

TL1 = 0xfa;

PCON |= 0x80;

EA = 1;

ES = 1;

TR1 = 1;

}

void send_char(uchar w) //串口发送一个字符

{

SBUF = w;

while(TI == 0);

TI = 0;

}

void send_string(uchar *s,uint string_length) //串口发送一个字符串{

uint i = 0;

do

{

send_char(*(s + i));

i++;

}

while(i < string_length);

}

/*EEPROM字符读取*/

uchar eeprom_read(uchar x,y)

{

ISP_ADDRH = x;

ISP_ADDRL = y;

ISP_CONTR = 0x9b;

ISP_CMD = 0x01;

ISP_TRIG = 0x46;

ISP_TRIG = 0xb9;

_nop_();

ISP_CONTR=0;

ISP_CMD=0;

ISP_TRIG=0;

return(ISP_DATA);

}

/*EEPROM字符写入*/

void eeprom_write(uchar x,y,z)

{

ISP_DATA = z;

ISP_ADDRH = x;

ISP_ADDRL = y;

ISP_CONTR = 0x9b;

ISP_CMD = 0x02;

ISP_TRIG = 0x46;

ISP_TRIG = 0xb9;

_nop_();

ISP_CONTR=0;

ISP_CMD=0;

ISP_TRIG=0;

/*EEPROM扇区擦除*/

void eeprom_erase(uchar x,y)

{

ISP_ADDRH = x;

ISP_ADDRL = y;

ISP_CONTR = 0x9b;

ISP_CMD = 0x03;

ISP_TRIG = 0x46;

ISP_TRIG = 0xb9;

_nop_();

ISP_CONTR=0;

ISP_CMD=0;

ISP_TRIG=0;

}

void main()

{

init_232();

i = 0;

delay(10);

while(1)

{

if((p12 == 0) && (i == 0))

{

eeprom_erase(0x10,0x00); //擦除第一扇区

delay(1);

eeprom_write(0x10,0x00,0x88); //在第一扇区写入88 delay(1);

i = 1;

}

}

}

/*串口接收中断函数*/

void RS232() interrupt 4

uchar ch = 0;

if(RI)

{

ch = SBUF;

RI = 0;

send_char(ch);

}

switch(ch)

{

case 1: send_char(eeprom_read(0x10,0x00)); //串口助手输入16进制1,读EEPROM第一扇区

break;

case 2: send_char(eeprom_read(0x12,0x00)); //串口助手输入16进制2,读EEPROM第2扇区

break;

case 3: eeprom_write(0x10,0x00,0x55); //串口助手输入16进制3,写EEPROM第一扇区55

break;

case 4: eeprom_write(0x12,0x00,0x66); //串口助手输入16进制4,写EEPROM第2扇区66

break;

case 5: eeprom_erase(0x10,0x00); //串口助手输入16进制5,擦除EEPROM第一扇区

break;

case 6: eeprom_erase(0x12,0x00); //串口助手输入16进制6,擦除EEPROM第2扇区

break;

default: break;

}

}

这是一段stc单片机EEPROM掉电存储程序,麻烦大家帮我看看哈,怎么调用时输出有问题啊,希望给个调用的例子

悬赏分:0 - 提问时间2010-8-21 19:32

#include < reg52.h >

#include < absacc.h >

#include < intrins.h >

#include " ..\h_files\eeprom.h "

/**************************************************************************************************/ void isp_iap_enable ( void )

{

EA = 0 ; /*关中断*/

ISP_CONTR = ISP_CONTR & 0x18 ;

ISP_CONTR = ISP_CONTR | WAIT_TIME ;

ISP_CONTR = ISP_CONTR | 0x80 ; /*ISPEN = 1*/

}

/**************************************************************************************************/ void isp_iap_disable ( void )

{

ISP_CONTR = ISP_CONTR & 0x7f ; /*ISPEN = 0*/

ISP_TRIG = 0x00 ;

EA = 1 ; /*开中断*/

}

/**************************************************************************************************/ void isp_iap_goon ( void )

{

isp_iap_enable ( ) ; /*打开ISP,IAP功能*/

ISP_TRIG = 0x46 ; /*触发ISP,IAP命令字节1*/

ISP_TRIG = 0xb9 ; /*触发ISP,IAP命令字节2*/

_nop_ ( ) ;

}

/**************************************************************************************************/ UINT8 byte_read ( UINT16 byte_addr )

{

ISP_ADDRH = ( UINT8 ) ( byte_addr >> 8 ) ; /*地址赋值*/

ISP_ADDRL = ( UINT8 ) ( byte_addr & 0x00ff ) ;

ISP_COMD = ISP_COMD & 0xf8 ; /*清除低3位*/

ISP_COMD = ISP_COMD | RE_COMMAND ; /*写入读命令*/

isp_iap_goon ( ) ; /*触发执行*/

isp_iap_disable ( ) ; /*关闭ISP,IAP功能*/

return ( ISP_DATA ) ; /*返回读到的数据*/

}

/**************************************************************************************************/ void sector_erase ( UINT16 sector_addr )

{

UINT16 i_sector_addr ;

i_sector_addr = ( sector_addr & 0xfe00 ) ; /*取扇区地址*/

ISP_ADDRH = ( UINT8 ) ( i_sector_addr >> 8 ) ;

ISP_ADDRL = 0x00 ;

ISP_COMD = ISP_COMD & 0xf8 ; /*清空低3位*/

ISP_COMD = ISP_COMD | ER_COMMAND ; /*擦除命令3*/

isp_iap_goon ( ) ; /*触发执行*/

isp_iap_disable ( ) ; /*关闭ISP,IAP功能*/

}

/**************************************************************************************************/ void byte_write ( UINT16 byte_addr , UINT8 original_data )

{

ISP_ADDRH = ( UINT8 ) ( byte_addr >> 8 ) ; /*取地址*/

ISP_ADDRL = ( UINT8 ) ( byte_addr & 0x00ff ) ;

ISP_COMD = ISP_COMD & 0xf8 ; /*清空低3位*/

ISP_COMD = ISP_COMD | PR_COMMAND ; /*写命令2*/

ISP_DATA = original_data ; /*写入数据准备*/

isp_iap_goon ( ) ; /*触发执行*/

isp_iap_disable ( ) ; /*关闭ISP,IAP功能*/

}

提问者:smu_east - 一级

网友推荐答案

/**************************************************************************************************** ********************************/

#include

#include

#include

#include

/**************************************************************************************************** ********************************/

#define Uchar unsigned char

#define Uint unsigned int

#define Ulong unsigned long

//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数

#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值/**************************************************************************************************** ********************************/

sfr IAP_DATA = 0xE2;

sfr IAP_ADDRH = 0xE3;

sfr IAP_ADDRL = 0xE4;

sfr IAP_CMD = 0xE5;

sfr IAP_TRIG = 0xE6;

sfr IAP_CONTR = 0xE7;

/**************************************************************************************************** ********************************/

//全局变量及共用体变量

/**************************************************************************************************** ********************************/

Uchar buff[8];

Uchar buff1[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

union union_temp16{ Uint un_temp16;Uchar un_temp8[2];}my_unTemp16;//定义共用体,给存储eeprom使用

/**************************************************************************************************** ********************************/

//函数声明区

/**************************************************************************************************** ********************************/

void Read_8byte(Uchar *buf,Uint add,Uchar bitt); //读多个字节,调用前需打开IAP 功能

void Program_8byte(Uchar *buf,Uint add,Uchar bitt);//写多个字节,调用前需打开IAP 功能

void Sector_Erase(Uint add); //擦除扇区

void IAP_Disable(); //关闭IAP 功能

void Delay(); //延时函数

void mcu_ini(void);//mcu初始化函数

/**************************************************************************************************** ********************************/

//主函数区

/**************************************************************************************************** ********************************/

void main (void)

{

Uchar i;

P1 = 0xF0; //演示程序开始,让P1[3:0] 控制的灯亮Delay(); //延时

P1 = 0x0F; //演示程序开始,让P1[7:4] 控制的灯亮Delay() ; //延时

Sector_Erase(0x4000); //擦除整个扇区

Program_8byte(buff1,0x4000,8);

P2 = 0x55;//P2.7亮

Read_8byte(buff,0x4000,8);

while (1)//CPU 在此无限循环执行此句

{

P0 = ~buff[i];

Delay(); //延时

i++;

if(i==8){i=0;P2 ^= 0xff;Delay();}

//延时

}

}

/**************************************************************************************************** ****************************/

//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节

/**************************************************************************************************** ****************************/

Uchar Byte_Read(Uint add)

{

IAP_DATA = 0x00;

IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令

my_unTemp16.un_temp16 = add;

IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址

//EA = 0;

IAP_TRIG = 0x46; //先送5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动

_nop_();

//EA = 1;

return (IAP_DATA);

}

/**************************************************************************************************** ****************************/

//读多个字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节

/**************************************************************************************************** ****************************/

void Read_8byte(Uchar *buf,Uint add,Uchar bitt)

{ Uchar i;

for (i=0;i

{

buf[i]= Byte_Read(add+i);

}

IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,

//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关

}

/**************************************************************************************************** ****************************/

//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据

/**************************************************************************************************** ****************************/

void Byte_Program(Uint add, Uchar ch)

{

IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令

my_unTemp16.un_temp16 = add;

IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器

//EA = 0;

IAP_TRIG = 0x46; //先送5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动

_nop_();

//EA = 1;

}

/**************************************************************************************************** ****************************/

//多字节写入函数

/**************************************************************************************************** ****************************/

void Program_8byte(Uchar *buf,Uint add,Uchar bitt)

{ Uchar i;

for (i=0;i

{

Byte_Program(add+i, buf[i]);

}

IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,

//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关

}

/**************************************************************************************************** ***********************************/

//扇区擦除, 入口:DPTR = 扇区地址

/**************************************************************************************************** ***********************************/

void Sector_Erase(Uint add)

{

IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令

my_unTemp16.un_temp16 = add;

IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址//EA = 0;

IAP_TRIG = 0x46; //先送5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动

_nop_();

//EA = 1;

IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,

//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关}

/**************************************************************************************************** ***********************************/

//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,

//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关

/**************************************************************************************************** ***********************************/

void IAP_Disable()

{

IAP_CONTR = 0; //关闭IAP 功能

IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用

IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用

IAP_ADDRH = 0;

IAP_ADDRL = 0;

}

/**************************************************************************************************** ***********************************/

//延时函数

/**************************************************************************************************** ***********************************/

void Delay()

{

Uchar i;

Uint d=100;

while (d--)

{

i=255;

while (i--);

}

}

你这个是STC89系列的EPROM代码

要是STC12C系列就不一样了

回答者:yoya0303 - 八级2010-8-24 20:06

这个是连续读写8个字节的程序

我调试过了,直接ctrl+c,ctrl+v,主程序调用就可以了

#define IAP_BYTE_READ 1

#define IAP_BYTE_WRITE 2

#define IAP_BYTE_ERASE 3

#define ENABLE_IAP 0x84

#define EEPROM_DATA_ADDR 0x00

UCHAR EEPROM_data[8];

UCHAR EEPROM_num;

UCHAR EEPROM_addr;

void read_EEPROM_DATA()

{

EEPROM_addr=25;

for(EEPROM_num=0;EEPROM_num<8;EEPROM_num++)

{

IAP_ADDRH=0x00;

IAP_ADDRL=EEPROM_addr;

IAP_CONTR=ENABLE_IAP;

IAP_CMD=IAP_BYTE_READ;

IAP_TRIG=0x5a;

IAP_TRIG=0xa5;

nop();

EEPROM_data[EEPROM_num]=IAP_DATA;

IAP_CONTR=0x00;

IAP_CMD=0x00;

EEPROM_addr++;

}

IAP_TRIG=0xff;

IAP_ADDRH=0xff;

IAP_ADDRL=0xff;

}

void write_EEPROM_DATA()

{

EEPROM_addr=25;

for(EEPROM_num=0;EEPROM_num<8;EEPROM_num++) {

IAP_DATA=EEPROM_data[EEPROM_num];

IAP_ADDRH=0x00;

IAP_ADDRL=EEPROM_addr;

IAP_CONTR=ENABLE_IAP;

IAP_CMD=IAP_BYTE_WRITE;

IAP_TRIG=0x5a;

IAP_TRIG=0xa5;

nop();

nop();

nop();

nop();

IAP_CONTR=0x00;

IAP_CMD=0x00;

EEPROM_addr++;

Delay_10ms();

}

IAP_TRIG=0x00;

IAP_ADDRH=0xff;

IAP_ADDRL=0xff;

}

STC单片机内部EEPROM的应用

ISPEN:ISP/IAP功能允许位。0:禁止ISP/IAP编程改变Flash,1:允许编程改变Flash SWBS:软件选择从用户主程序区启动(0),还是从ISP程序区启动(1)。 SWRST:0:不操作,1:产生软件系统复位,硬件自动清零。 ISP_CONTR中的SWBS与SWRST这两个功能位,可以实现单片机的软件启动,并启动到ISP区或用户程序区,这在“STC单片机自动下载”一节,亦有所应用。 如: ISP_CONTR=0x60; 则可以实现从用户应用程序区软件复位到ISP程序区开始运行程序。 ISP_CONTR=0x20; 则可以实现从ISP程序区软件复位到用户应用程序区开始运行程序。

(以上的建议时钟是(WT2、WT1、WT0)取不同的值时的标称时钟,用户系统中的时钟不要过高,否则可能使操作不稳定。) 以下是具体的实现代码: EEPROM操作函数: #define RdCommand 0x01 #define PrgCommand 0x02 #define EraseCommand 0x03 #define Error 1 #define Ok 0 #define WaitTime 0x01

#define PerSector 512 unsigned char xdata Ttotal[512]; /* ---------------------------------------------------------------------打开 ISP,IAP 功能 ---------------------------------------------------------------------*/ void ISP_IAP_enable(void) { EA=0;/* 关中断*/ ISP_CONTR|=0x18;/*0001,1000*/ ISP_CONTR|=WaitTime;/*写入硬件延时*/ ISP_CONTR|=0x80;/*ISPEN=1*/ } /* ---------------------------------------------------------------------关闭 ISP,IAP 功能 ---------------------------------------------------------------------*/ void ISP_IAP_disable(void) { ISP_CONTR&=0x7f;/* ISPEN = 0 */ ISP_TRIG=0x00; EA=1;/* 开中断 */ } /* ----------------------------------------------------------------------公用的触发代码 ----------------------------------------------------------------------*/ void ISPgoon(void) { ISP_IAP_enable();/* 打开 ISP,IAP 功能 */ ISP_TRIG=0x46;/* 触发ISP_IAP命令字节1 */ ISP_TRIG=0xb9;/* 触发ISP_IAP命令字节2 */ _nop_(); }

基于单片机的智能电饭煲的控制毕业设计

华北水利水电学院 North China Institute of Water Conservancy and Hydroelectric Power 毕业设计 题目:基于单片机的电饭煲智能控制系统的设计

华北水利水电学院 毕业设计任务书 题目:基于单片机的电饭煲智能控制系统的设计 专业:电子信息工程 班级学号:200915512 姓名: 李玉平 指导教师:郑辉 设计期限:2011 年2 月21日开始 2011年5 月27日结束 院、系:信息工程学院 2011年2月21 日

一、毕业设计的目的 通过本次设计掌握产品设计的流程,能熟练的使用AT89C51单片机,并根据设计要求选择合适的元器件,充分理解相关软件,对整个产品设计时的调试等必要的环节有更深刻的体会。 本设计通过选认元件、连线焊接、调试检测等过程,培养了搜集资料和调查研究的能力,方案论证选择的能力,理论分析与设计运算的能力,巩固了计算机软硬件和应用系统设计方面的能力。 二、主要设计内容及基本要求 1.本设计包含以下部分:按键电路、上电复位电路、晶振电路、电源电路、显示电路、MCU系统部分、机械控制电路等部分。 2.基本要求: (1)要求定时工作时间和实时时间对比达到长时间精确地定时功能。 (2)要求定时时间和实时时间相同时通过51单片机控制光耦驱动电路来控制电饭煲的工作。 三、重点研究问题 1.单片机的内部结构,显示电路的调试。 2.部分功能电路的软件设计:键盘显示电路、报警电路、工作指示电路。 四、主要技术指标或主要设计参数 根据模块电路,设计出完整的电路原理图,焊接出实物,并对产品进行调试。电源部分为单片机系统提供的电压为5V,为光耦提供的电压为12V。 五、设计成果 拟做出一个基于AT89C51单片机对电饭煲的智能控制系统的设计,设计出整体原理图,并做出实物,同时做出一份符合要求的毕业论文。

基于单片机的电热水器温度控制系统设计

摘要 随着科学技术和生产的快速发展,在生活中,温度成为了频繁出现的词汇。温度测量与控制也成为了生活生产中重要的一部分。在化工、石油、冶金等生产领域的物理过程和化学反应中,温度往往是一个很重要的量,需要准确地加以控制。除了这些部门之外,温度控制系统还广泛应用于其他领域,是用途很广的一类工业控制系统。 本文所设计的电热水器温度控制系统就采用AT89C51单片机为控制核心,利用AT89C51现有的接口来连接外围硬件模块,并通过DS18B20温度传感器准确的检测出当前的温度、DS1302实时时钟芯片实现显示时间的功能,并将所测到的温度数据传送给单片机进行分析处理。并由LCD1602液晶屏显示温度值及实时时间。其中,系统软件设计中,分别预先设计好所需温度的上下限数值,并通过该上下限控制蜂鸣器的报警,再通过继电器的通断来决定电热丝是否加热,实现对温度的简单控制,达到预先设置范围内。 关键词:AT89C51单片机,温度控制,LCD显示

Abstract With the rapid development of science and technology and production, andin life, the temperature has become a frequently occurring words. Temperature measurement and control of production has also become an important part of life. Physical processes and chemical reactions in the chemical, petroleum, metallurgy and other production areas, the temperature is often a very important quantity that needs to be controlled accurately. In addition to these sectors, the temperature control system is also widely used in other areas, is a very versatile class of industrial control systems. In this paper, the design of the electric water heater temperature control system using AT89C51 microcontroller core, use AT89C51 existing interfaces to connect peripheral hardware module, and through DS18B20 temperature sensor accurately detects the current temperature, DS1302 real-time clock chip display function, and the measured temperature data to the microcontroller for analysis. By LCD1602 display and real-time temperature. Among them, the system software design, pre-designed upper and lower limit values were good the desired temperature, and through the upper and lower control buzzer alarm, and then through the relay off to determine whether the heating wire heating, simple control of the temperature reach the pre-set range. Keywords: AT89C51 microcontroller, temperature control, LCD display

单片机掉电保护)总结

单片机应用系统断电时的数据保护方法 在测量、控制等领域的应用中,常要求单片机内部和外部RAM中的数据在电源掉电时不丢失,重新加电时,RAM中的数据能够保存完好,这就要求对单片机系统加接掉电保护电路。掉电保护通常可采用以下三种方法:一是加接不间断电源,让整个系统在掉电时继续工作,二是采用备份电源,掉电后保护系统中全部或部分数据存储单元的内容;三是采用EEPROM来保存数据。由于第一种方法体积大、成本高,对单片机系统来说,不宜采用。第二种方法是根据实际需要,掉电时保存一些必要的数据,使系统在电源恢复后,能够继续执行程序,因而经济实用,故大量采用[1]。EEPROM既具有ROM掉电不丢失数据的特点,又有RAM随机读写的特点。但由于其读写速度与读写次数的限制,使得EEPROM不能完全代替RAM。下面将介绍最常用的一些掉电保护的处理方法,希望能对相关设计人员在实际工 作中有所帮助。 1 简单的RAM数据掉电保护电路 在具有掉电保护功能的单片机系统中,一般采用CMOS单片机和CMOS RAM。CMOS型RAM存储器静态电源小,在正常工作状态下一般由电源向片外RAM供电,而在断电状态下由小型蓄电池向片外RAM供电,以保存有用数据,采用这种方法保存数据,时间一般在3-5个月[2]。然而,系统在上电及断电过程中,总线状态的不确定性往往导致RAM内某些数据的变化,即数据受到冲失。因此对于断电保护数据用的RAM存储器,除了配置供电切换电路外,还要采取数据防冲失措施,当电源突然断电时,电压下降有个过程,CPU在此过程中会失控,可能会误发出写信而冲失RAM中的数据,仅有电池是不能有效完成数据保护的,还需要对片选信号加以控制,保证整个切换过程中CS引脚的信号一直保持接近VCC。通常,采用在RAM的CS和VCC引脚之间接一个电阻来实现COMS RAM的电源切换,然而,如果在掉电时,译码器的输出出现低电平,就可能出现问题,图1给出一种简单的电路设计,它能够避免上述问题的产生。 图1中,4060开关电路起到对CS控制的作用。当电压小于等于4.5V时就使开关断开,CS线上拉至"1",这样,RAM中的数据就不会冲失;当电 压大于4.5V时,4060开关接通,使RAM能正常进行读写。 2 可靠的RAM掉电保护电路

基于单片机的电饭煲设计

控制系统综合实训报告 学院计算机与控制工程学院 专业班级自动化115 学生姓名马洪星 指导教师朱玲 成绩

单片机在智能电饭煲控制系统中的应 用 摘要 随着新科技时代的到来,越来越多的新型智能化家电融入了我们的生活。而电饭煲作为与人们生活息息相关的家电,其功能也向着智能化的方向发展。本文基于单片微处理器PICl6F872研制成功了YZ系列微电脑电饭煲智能控制器,阐述了工作原理,并给出了硬件电路。精度高、稳定性高、易操作是本系统的重要特性,中断嵌套是设计软件的难点,温度控制是本系统的重点。 关键词 PIC单片机智能电饭煲硬件分析 YZ系列微机电脑电饭煲系统,是应用美国著名芯片Microchip公司合作开发的新一代模糊、逻辑控制智能电饭煲。采用日本National模糊控制技术原理,能自动根据米饭量的多少。利用“煮饭专家”的工艺技术,对吸水、加热、沸腾、焖饭、膨胀、保温等六个阶段的工艺自动进行火力调节,从而煮出比一般电脑电饭煲更加松软可口的米饭同时拥有快速煮饭、精确煮饭、一小时粥汤、二小时粥汤、三小时粥汤保温以及预约定时煮饭等功能。本系统硬件结构简单,运行稳定可靠,软硬兼备,具有完善的控制功能和抗干扰能力。 一、工作电气图

图1工作电气图 二、工作原理 YZ系列微机电脑电饭煲控制器电路包括如下几个部分:单片机,电源及稳压电路,键盘输入电路,蜂鸣报警电路,LED显示电路,温度检测电路及加热控制电路。其中单片机控制采用PICl6F872封装,它能满足电饭煲的控制需要。电源及稳压电路由高压器、整流电路和稳压电路组成;键盘输入电路由K1、R13、K2、R14组成;即在A/D输入端键入键盘信号,蜂鸣报警电路由晶体管Q2、SP1及电阻R12组成;LED显示电路由两部分组成。一部分是7段数码管用于显示预置定时时问,另一部分是6个LED指示灯,用于显示煮饭、快煮、l小时粥汤、2小时粥汤、3小时粥汤及保温。温度检测电路十分简单,由偏置电阻R10、R1l 和热敏电阻RT1、KT2组成。控制器电路如图2所示 图2控制器电路框图

基于单片机的即热式电热水器的设计

基于单片机 即热式电热水器设计 摘要 即热式电热水器与普通电热水器最大的区别在于它取消了储水罐,热水随开随用,无须预热,减少了电能浪费。另外,它还具有体积小,使用安全,安装方便等特点。热水器的种类很多,但即热式热水器也有很多种。 要想设计出较好的即热式电热水器必须要以较强的单片机作为基础,而单片机的发展正好为热水器的开发奠定了前提条件。但也必须有一定的编程能力才能设计出较好的系统来,此设计的综合性也比较强,它不但需要主要学科的支持,也需要其他辅助学科的支持,正体验了一个设计者的综合能力。 本设计的即热式家用电热水器系统采用电源电路、单片机控制器、温度检测电路、按键输入电路、LED数码管及指示灯电路、报警电路和加热控制电路还采用了热敏电阻、放大电路以及转换电路等。并给出了信号流程图并介绍了即热式家用电热水器软件系统。 关键词:即热式电热水器;测温传感器;二分查找算法

目录 一引言 (1) 二总体方案设计 (2) 1 硬件方案论证 (2) 2 系统总体设计 (5) 3 系统控制算法的设计 (5) 三系统硬件单元电路的设计 (6) 1单片机晶振电路 (6) 2 温度传感器及放大电路设计 (9) 3过零检测电路图的设计 (10) 4 驱动电路的设计 (10) 5显示电路的设计 (12) 四系统的软件设计 (12) 1主程序流程图 (12) 2显示扫描子程序 (13) 3加热控制子程序 (14) 4按键扫描处理子程序 (15) 5温度检测子程序 (16) 五总结 (18) 参考文献........................................................................................................... 错误!未定义书签。附录:系统硬件总原理图. (19)

用法拉电容从容实现单片机掉电数据保存.703

用法拉电容从容实现单片机掉电数据保存 2009-05-25 21:49 今天,因为MCU内部一般都带FLASH ROM和伴随着法拉级电容的出现,事实上已经宣布背掉电电池或者用达拉斯DS存储器实现掉电数据保存的传统的思维和电路已经成为历史! 以下的电路,是一个可靠的简单的掉电检测、法拉电容能量储存等完整硬件电路和相应的软件细节,是笔者在产品上一个成熟的可靠的自诩经典电路和心血,在这里完全公开地提供给二姨爱社(21IC)下的全体表兄表弟表姐表妹们以供大家一起来批判赏析借鉴和改进. 首先提请老表们别一看电路繁琐就不想继续看下去,事实是:大电容储存实现掉电保护并非人们想象的那么容易做. 我们往往突然萌发一个跳跃灵感闪烁一丝思想火花,但最终都没幻化为现实结果而最终不了了之,在我们遗憾叹息之于我们是否思考过常常并不是我们思维"太过创新"需求和愿望大大超越了现实(我们能超越我国的现实的器件工业和材料工业水平吗)最后我们总不得不以理论不完全等同于实践来为自己无奈和熄灭的灵感作排解!其真正原因我们作过真正思考吗?! 事实上一个理论成立,现实上完全具备可实现性的一个电路单元,到最后我们并未达到预想效果,甚至以失败了告终,原因何在??----细节..细节..还是细节...永远的细节!!!!细节为 王!!!!! 所以敬请大家耐心地静静地留意这里的每个电路技巧和对细节,事实上你会发现这里每个细节都充满着技巧智慧体贴人性和柔情.每处都让我们感悟了一种做事就是做人和精益求精的思想和行动境界,即使你是表弟表兄级男性电子工程师对你的设计和实现都应具备女性的细腻周到和柔情. 电路见下:这里首先用6V供电(如7806),为什么用6V不用5V是显而易见的.这里的二极管们一般都起两个作用,一是利用单向导电性保证向储能电容0.47F/5.5V单向冲电;二是起钳位作用,钳去0.6V,保证使大多数51系列的单片机都能在4.5V--5.5V之间的标称工作电压下工作.而4.5-5.5间这1V电压在0.47F电容的电荷流失时间就是我们将来在掉电报警后我们可以规划的预警回旋时间. 两只47欧电阻也有两个作用: 1:和47UF和0.01UF电容一起用于加强电源滤波. 2.对单片机供电限流 一般电子工程师都喜欢把单片机电源直接接7805上,这是个非常不好的习惯,为什么?7805可提供高达2A的供电电流,异常时足够把单片机芯片内部烧毁.有这个电阻47欧姆电阻挡即使把芯片插反或者电源极性颠倒也不会烧单片机和三端稳压器,但这限流电阻也不能太大,上限不要超过220欧为益,否则对单片机内部编程时,计算机会告警提示"编程失败"(其实是电源不足).

51单片机内部EEPROM的应用

用51hei-5板子学习单片机内部EEPROM的应用 STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPRO M,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下ISP与IAP的区别和特点。 ISP:In System Programable 是指在系统编程,通俗的讲,就是片子已经焊板子上,不用取下,就可以简单而方便地对其进行编程。比如我们通过电脑给STC单片机下载程序,或给AT89S51单片机下载程序,这就是利用了ISP技术。 IAP:In Application Programable 是指在应用编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。通俗点讲,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。大家要注意千万不要尝试去擦除这段ISP引导程序,否则恐怕以后再也下载不了程序了。STC单片机内部有几个专门的特殊功能寄存器负责管理ISP/IAP 功能的,见表1。 表1 ISP/IAP相关寄存器列表 名称地址功能描述D7D6D5D4D3D2D1D0复位值ISP_DATA E2h Flash数据寄存器1111 1111 ISP_ADDRH E3h Flash高字节地址寄 存器0000 0000 ISP_ADDRL E4h Flash低字节地址寄 存器0000 0000 ISP_CMD E5h Flash命令模式寄存 器 ----------MS2MS1MS0xxxx x000 ISP_TRIG E6h Flash命令触发寄存 器 xxxx xxxx ISP_CONTR E7h ISP/IAP 控制寄存器ISPEN SWBS SWRST----WT2WT1WT0000x x000 ISP_DATA:ISP/IAP操作时的数据寄存器。

单片机内的Flash与EEPROM作用及区别(精)

单片机内的 Flash 与 EEPROM 作用及区别 单片机运行时的数据都存在于 RAM (随机存储器中, 在掉电后 RAM 中的数据是无 法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用 EEPROM 或FLASHROM 等 存储器来实现。在传统的单片机系统中, 一般是在片外扩展存储器, 单片机与存储器之间通 过 IIC 或 SPI 等接口来进行数据通信。这样不光会增加开发成本,同时在程序开发上也要花 更多的心思。在 STC 单片机中内置了 EEPROM (其实是采用 IAP 技术读写内部 FLASH 来 实现 EEPROM ,这样就节省了片外资源,使用起来也更加方便。下面就详细介绍 STC 单 片机内置 EEPROM 及其使用方法。 flash 是用来放程序的,可以称之为程序存储器,可以擦出写入但是基本都是整个扇区进行的 . 一般来说单片机里的 flash 都用于存放运行代码,在运行过程中不能改; EEPROM 是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时 间初始化设定为 12:00,后来在运行中改为 6:00,这是保存在 EEPROM 里, 不怕掉电,就算重新上电也不需要重新调整到 6:00 下面是网上详细的说法,感觉不错:

FLASH 和 EEPROM 的最大区别是 FLASH 按扇区操作, EEPROM 则按字节操作, 二者寻址方法不同,存储单元的结构也不同, FLASH 的电路结构较简单,同样容量占芯片面积较小,成本自然比 EEPROM 低,因而适合用作程序存储器, EEPROM 则更多的用作非易失的数据存储器。当然用 FLASH 做数据存储器也行, 但操作比EEPROM 麻烦的多,所以更“人性化”的 MCU 设计会集成 FLASH 和 EEPROM 两种非易失性存储器,而廉价型设计往往只有 FLASH ,早期可电擦写型 MCU 则都是EEPRM 结构,现在已基本上停产了。 在芯片的内电路中, FLASH 和 EEPROM 不仅电路不同,地址空间也不同,操作方法和指令自然也不同, 不论冯诺伊曼结构还是哈佛结构都是这样。技术上, 程序存储器和非易失数据存储器都可以只用 FALSH 结构或 EEPROM 结构, 甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区” ,但就算如此,概念上二者依然不同,这是基本常识问题。 EEPROM :电可擦除可编程只读存储器, Flash 的操作特性完全符合 EEPROM 的定义,属 EEPROM 无疑,首款 Flash 推出时其数据手册上也清楚的标明是EEPROM ,现在的多数 Flash 手册上也是这么标明的,二者的关系是“白马”和 “马” 。至于为什么业界要区分二者, 主要的原因是 Flash EEPROM 的操作方法和传统 EEPROM 截然不同,次要的原因是为了语言的简练,非正式文件和口语中Flash EEPROM 就简称为 Flash , 这里要强调的是白马的“白” 属性而非其“马” 属性以区别 Flash 和传统 EEPROM 。 Flash 的特点是结构简单, 同样工艺和同样晶元面积下可以得到更高容量且大数据量 下的操作速度更快,但缺点是操作过程麻烦,特别是在小数据量反复重写时, 所以在 MCU 中 Flash 结构适于不需频繁改写的程序存储器。 很多应用中,需要频繁的改写某些小量数据且需掉电非易失,传统结构的EEPROM 在此非常适合, 所以很多 MCU 内部设计了两种 EEPROM 结构, FLASH

电饭煲课程设计+程序

课程设计任务书 专业年级班 一、设计题目 电饭煲控制器 二、主要内容 电饭煲控制器有预约功能,有烹饪大米饭、粥、保温、冷饭加热等功能 三、具体要求 1.具体功能 大米饭:当达到105°时,停止加热,并在15分钟后通过蜂鸣器提示用户。 粥:开始加热后,通过测温元件监视锅底温度,使锅底温度保持在99°~100.5°之间(100°时停止加热、99°时开始加热),此种状态持续20分钟,之后通过蜂鸣器提示用户过程结束。

保温:使锅底温度维持在50°~60°之间。 冷饭加热:锅底加热至100°,使锅底温度保持在99°~100.5°之间(100°时停止加热、99°时开始加热),此种状态持续5分钟,之后通过蜂鸣器提示用户过程结束。 2.定时 用户可以是电饭煲在预约时间(倒计时方式)开始工作,最长预约时长为12小时。 3.控制面板 四个发光管分别与大米饭、粥、保温、冷饭加热相对应,另一发光管用于区分工作与预约,两位数码管用于预约时间及倒计时。按键有:开始键、功能键、加键、减键。 四、进度安排 1、了解任务要求,确定具体方案 2、lcd12864液晶屏子程序设计 3、DS18B20温度传子程序感器设计 4、设计单片机按键功能程序 5、根据任务要求编写程序,设计按键电路

6、检验设计效果,完善功能 五、完成后应上交的材料 电饭煲控制器论文 六、总评成绩 指导教师签名日期年月日 系主任审核日期年月日

摘要 电饭煲控制器有预约功能,有烹饪大米饭、粥、保温、冷饭加热等功能.。基于stc89c52单片机控制的电饭煲控制器,有lcd液晶屏显示和ds18b20温度检测功能,还有定时工作选择功能。 关键字:电饭煲温度控制 DS18B20 LCD12864 键盘按键

单片机掉电保护电路设计方案简介

单片机掉电保护电路设计方案简介 在数字钟、某些定时器和日历钟等类型的单片机系统中.当主电源DC5V 失去时,称之为掉电。掉电后,单片机停止工作,时钟也会停止,这种结果在 许多场合是不希望的,为了保证单片机在主电压失去时仍然能够保持运行,通 常就利用干电池对单片机系统继续进行供电的办法加以解决。应该感谢单片机 芯片的工程技术设计师,是他们首先提供了单片机系统能够顺利实施掉电保护 的内部条件。这就是:单片机允许在电压低至2V 甚至更低的电压供电时,仍能保证其最基本运行( 对外部输入输出功能将会失效或停止) 。外配电池在主电源失去时,对单片机的继续运行提供能源,此时的电池能源是非常宝贵的,往往都是以uA 级进行计算。而且还有一个不能避免的结果,就是随着保护时 间的延长,电池的电量也会用完的。所以,保护电路有一个最长保护时间的参数。使用中不能超过,否则,保护就会失效。 当电池经过保护时间的使用之后,就需要补充电能,以便下一次保护时能够 以充足的电能投入保护工作。所以,又有一个如何给电池充电的问题。也就是 电池在主电源正常供电时,需要由主电源对其进行充电:当主电源失去时,又 由电池放电以保持单片机系统的运行。下面介绍一款标准的掉电保护电路。(Vcc=6V) 。当主电源正常时,单片机由’Vcc 5V 电源供电,此时.Vcc 5V 电源通过D1 和R1 ,对保护用电池进行充电,以保证电池电量的充足。适当选择R1 的大小,可以保证充电电流和充电时间都比较合理。例如:需要对 3 .6V /60mAh 的电池充电,充电时间选择在8 小时左右,就选择充电电流为8 mA .R1 :(6V-0 .6V) /8(0 .6V 是串连二极管的导通压降) 。与电池并联的稳压二极管是防止电池过充电用的。放电路径是:电池通过

51单片机内部EEPROM的应用

STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下ISP与IAP的区别和特点。 知识点:ISP与IAP介绍 ISP:In System Programable 是指在系统编程,通俗的讲,就是片子已经焊板子上,不用取下,就可以简单而方便地对其进行编程。比如我们通过电脑给STC单片机下载程序,或给AT89S51单片机下载程序,这就是利用了ISP技术。 IAP:In Application Programable 是指在应用编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。通俗点讲,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。大家要注意千万不要尝试去擦除这段ISP引导程序,否则恐怕以后再也下载不了程序了。 STC单片机内部有几个专门的特殊功能寄存器负责管理ISP/IAP功能的,见表1。 表1 ISP/IAP相关寄存器列表 名称地址功能描述D7 D6 D5 D4 D3 D2 D1 D0 复位值 ISP_DATA E2h Flash数据寄存 器1111 1111 ISP_ADDRH E3h Flash高字节地址寄存 器0000 0000 ISP_ADDRL E4h Flash低字节地址寄存 器0000 0000 ISP_CMD E5h Flash命令模式寄存器-- -- -- -- -- MS2 MS1 MS0 xxxx x000 ISP_TRIG E6h Flash命令触发寄存 器xxxx xxxx ISP_CONTR E7h ISP/IAP 控制寄存器ISPEN SWBS SWRST -- -- WT2 WT1 WT0 000x x000 ISP_DATA:ISP/IAP操作时的数据寄存器。ISP/IAP从Flash读出的数据放在此处,向Flash写入的数据也需放在此处。 ISP_ADDRH:ISP/IAP操作时的地址寄存器高八位。 ISP_ADDRL:ISP/IAP操作时的地址寄存器低八位。 ISP_CMD:ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效。命令模式如表2所示。 表2 ISP_CMD寄存器模式设置 D7 D6 D5 D4 D3 D2 D1 D0 模式选择 保留命令选择 -- -- -- -- -- 0 0 0 待机模式,无ISP操作 -- -- -- -- -- 0 0 1 对用户的应用程序flash区及数据flash区字节读 -- -- -- -- -- 0 1 0 对用户的应用程序flash区及数据flash区字节编程 -- -- -- -- -- 0 1 1 对用户的应用程序flash区及数据flash区扇区擦除 程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM)进行字节读/字节

单片机STC89C52RC 内部EEPROM

单片机STC89C52RC 内部EEPROM 2011-09-06 12:15 单片机运行时的数据都存在于R A M(随机存储器)中,在掉电后R A M 中的数据是 无法保留的,那么怎 样使数据在掉电后不丢失呢?这就需要使用EEP R O M 或FL A S HR O M 等存储器来实现。在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过I I C或S P I等接口来进行数据通信 这样不光会增加开发成本,同时在程序开发上也要花更多的心思。在S T C单片机中内置了E E P R O M(其实是采用I S P/I A P技术读写内部F L A S H来实现E E P R O M),这样就节省了片外资源,使用起来也更加方便。下面 就详细介绍S T C单片机内置E E P R O M及其使用方法 S T C各型号单片机内置的E E P R O M的容量最小有2K,最大有16K,基本上很好地满足项目的需要,更 方便之处就是节省了周边的E E P R O M器件,达到节省成本的目的,而且内部E E P R O M的速度比外部的 E E P R O M的速度快很多。 S T C各型号单片机内置的E E P R O M是以512字节为一个扇区,E E P R O M的起始地址=F A L S H容量值+1, 那么S T C89C52R C的起始地址为0x2000,第一扇区的起始地址和结束地址0x2000~0x21F F,第二扇区 的起始地址和结束地址0x2200~0x23F F,其他扇区如此类推。 深入重点: ?传统的E E P R O M是电可擦可编程只读存储一种掉电后数据不丢失的存储芯片。 ?S T C89C52R C的E E P R O M是通过I S P/I A P技术读写内部F L A S H来实现E E P R O M。 ?S T C89C52R C的E E P R O M起始地址为0x2000,以512字节为一个扇区,E E R P O M的大小为2K字节STC89C52RC 与EEPORM 实现的寄存器有6 个,分别是ISP_D AT A、

基于单片机的家电远程控制系统设计

目录 第一章绪论 (1) 第二章远程控制的内容 (1) 2.1 智能家用电器主要的特点 (1) 2.2 智能家电具备的基本功能 (2) 第三章系统设计的原理 (2) 3.1 总体设计原理 (2) 3.2 硬件模块分析 (4) 3.3 软件模块分析 (5) 第四章系统软件设计分析 (5) 4.1 软件设计原理 (5) 4.2 系统程序设计流程图 (6) 第五章系统的应用 (7) 5.1 系统的应用前景 (7) 5.2 系统的使用说明 (8) 第六章小结 (9) 后记 (10) 参考文献 (11) 附录电路总体设计图 (12)

基于单片机的家电远程控制系统设计 第一章绪论 随着新型科技电子产品日益发达和人们生活水平的不断提高,受到潜移默化的影响,人们对生活质量以及家居环境的要求也在与日俱增,人们开始追求家庭生活现代换,舒适化,以及安全性等问题,特别是家电的选择和使用上,智能家居的出现正好满足了人们的需求。随着电话通信网络的出现,利用电话实现远程控制已经在智能小区的管理中得到了广泛的应用,而移动通信技术的发展刚好为家电的远程控制奠定了基础。 本文介绍了一种电话远程控制技术。本系统采用单片机控制家用电器的远程控制、远程电话,用户可以通过手机、电话到家用电器(如太阳能、冰箱)远程控制其工作状态,以满足用户需求为各种各样的家用电器,不仅如此,用户也可以根据你的需求和基于住宅需求不同的家用电器控制,达到了用户自己的家庭住宅最好的国家规定。 本次作品所使用到元器件都选择性价比较高的,这就可以在节约电器成本的前提下创造出更大的利用价值。智能家居的优点主要体现在它不受时间和空间的限制,这就可以为人们节约大量的时间。不仅如此,我们也可以在各路终端接上传感器从而实现对周围环境的监听,这就达到了一个对家居电器进行安全性的监护作用,也避免了很多不必要的麻烦。远程监控还可以应用到企业的自动化控制的系统领域中去,可以为企业节约很多的资本,也可以应用到家庭医疗保健中,不仅降低了医疗保健成本,而且还有益于身心更加健康,我们把测量的结果直接传给医生,可以省去去医院排队等候的麻烦,也可以应用于网络家庭教育,帮助学生能够更好的学习。 第二章远程控制的内容 有了这些智能家用电器,我们不难建造一个拥有智能家居的环境,有了智能家居,我们就可以节约大量的时间做更多的事情。例如,我们可以在回家的路上可以提前打开家里的电饭煲,把空调打开调到合适的温度,这样回家以后我们就可以舒适地吃上香喷喷的米饭了,但是,这在以前是不可能实现的。就目前而言,我们大多数家庭使用的还是传统的家用电器,本次课题主要设计了一款利用单片机控制家用电器的原理进行远程的电话控制系统。 2.1 智能家用电器主要的特点 一、网络化功能:将智能家电通过家庭局域网连接到一起,然后同互联网相连,以实现信息的共享。 二、智能化:智能家电利用传感器来感知周围的环境,然后根据环境的不同自动改变参数。 三、开放性:兼容性。生产智能家电平台具有相同的开放和兼容标准。 四、节能化:智能家电可以根据周围环境自动调整自己的工作状态。

毕业设计(论文)-基于单片机的智能电热水器(硬件)

摘要 这次的设计采用ATEML公司生产的AT89S51单片机为核心来设计智能电热水器。本设计也对单片机控制电热水器实现智能化的可能性进行了分析,利用温度传感器、水位检测装置、等来完成本设计。 设计分成两个部分,在硬件设计方面,主要对单片机最小系统及其扩展、电源电路、键盘显示及接口电路、LED显示电路、水温检测电路、加热电路等进行了详细介绍。还详细介绍了设计中应用到的主要芯片的性能和特点,包括AT89S51、74LS240、DS18B20、74HC245等。在软件设计方面,采用汇编语言编程,是由于其易于为单片机所识别,执行速度快。 该智能电热水器设计完善,实现方案简单易行。采用软件设计来控制,可以实现智能检测水位及水温,智能加热,并且提高了整机的可靠性及准确性。 关键词:单片机; 电热水器; 智能; I

ABSTRACT This design USES ATEML company produces the AT89S51 as the core to design intelligent electric water heater. The design of single-chip microcomputer control and the possibility of electric water heater realize intelligent analyzed, using temperature sensors, water level detection equipment, etc to complete the design. Design is divided into two parts, in terms of hardware design, mainly to the single chip minimize system and its extension, power supply circuit, keyboard display and interface circuit, the LED display circuit, water temperature detection circuit, heating circuit described in detail. Also introduces the main application to design characteristics and properties of the chip, including AT89S51, 74LS240, DS18B20, 74HC245 etc. In software design, use assembly language programming, is due to its easy to identify, execution by MCU fast speed. This intelligent electric water heater design perfect, the implementation scheme is simple. Using software designed to control, can realize intelligent detection levels and water temperature, intelligent heating, and improve the machine's reliability and accuracy. Keywords: single-chip microcomputer; Electric water heater; intelligence; II

单片机程序存储空间和数据存储空间详解教材

单片机程序程序存储空间(ROM)和数据 存储空间(RAM)详解 问题:STC89C52RC单片机:8K字节程序存储空间,512字节数据存储空间,内带2K字节EEPROM存储空间;它们分别存的是什么? 8K的程序存储空间是存储代码,也就是你写的程序生成的HEX文件的,相当于电脑系统的C盘。 512字节相当于内存,存储空间存储变量,像u8 x,y,z,u32 a之类的临时变量掉电后数据丢失。 2K eeprom相当于电脑系统的硬盘,数据写入后掉电不丢失。主要是单片机在运行的过程中写入数据或者读取数据。像设置的闹铃值,设置好了就不用每次都去设置了,保存在单片机里面,即使掉电了,设置的数据也不会丢失,只需单片机上电再读取就好了。 单片机原理及系统结构 在此先详细分析51单片的存储器结构和寻址方法,再分析片外存储器的扩展,最后给出设计原理并分析系统结构。 图一:存储空间分布

51单片机存储器结构分析 8051单片机的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个存储空间:片内程序存储器、片外程序存储器以及片内数据存储器、片外数据存储器空间。 这种程序存储和数据存储分开的结构形式被称为哈佛结构。MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。 MCS-51单片机存储器的配置特点 ①内部集成了4K的程序存储器ROM; ②内部具有256B的数据存储器RAM(用户空间+SFR空间); ③可以外接64K的程序存储器ROM和数据存储器RAM。 从物理结构的角度讲,51单片机的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、RAM。 从逻辑结构上看(既编程的角度),可以分为三个不同的空间: (1)片内、片外统一编址的64KB的程序存储器地址空间:0000H~FFFFH(用16位地址);,其中0000H~0FFFH为片内4KB的ROM地址空间,1000H~FFFFH为外部ROM 地址空间; (2)256B的内部数据存储器地址空间(用8位地址),00H~FFH,分为两大部分,其中00H~7FH(共128B单元)为内部静态RAM的地址空间,80H~FFH为特殊功能寄存器的地址空间,21个特殊功能寄存器离散地分布在这个区域; (3)64KB的外部数据存储器地址空间(用16位地址):0000H~FFFFH,包括扩展I/O地址空间。 上述4个存储空间地址是重叠的,如图1所示。8051的指令系统设计了不同的数据传送指令以区别这4个不同的逻辑空间:CPU访问片内、片外ROM指令用MOVC,访问片外RAM指令用MOVX,访问片内RAM指令用MOV。 程序存储器用于存放编好的程序和表格常数。程序通过16位程序计数器寻址,寻址能力为64KB。这使得指令能在64KB的地址空间内任意跳转,但不能使程序从程序存储器空间转移到数据存储器空间。

相关文档
相关文档 最新文档