单片机掉电易失_单片机掉电失程序 - CSDN
  • 步进电机是将脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一...

    1.步进电机图片

     

    2.步进电机介绍

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用,它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用.因此.用好步进电机也非易事,它涉及机械、电机、电子及计算机等许多专业知识。

    3.步进电机分类

    (1)永磁式(PM)。一般为二相,转矩和体积较小,步距角一般为7.5°或15°。

    (2)反应式(VR)。一般为三相,可实现大转矩输出.步距角一般为1.5°,但噪声和振动都很大。在欧美等发达国家20世纪80年代已经淘汰。

    (3)混合式(HB)。指混合了永磁式和反应式的优点。它又分为二相和五相,二相步距角一般为180°,而五相步距角一般为0.72°。这种步进电机的应用最为广泛。

    4.技术指标

        (1)步进电机的静态指标

        ①相数—电机内部的线圈组数。目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同。一般二相电机的步距角为0.9°/1.8°,三相为0.75°/1.5°、五相为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求.如果使用细分驱动器,则“相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。

        ②步距角—表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可称为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。

        ③拍数—完成一个磁场周期性变化所需脉冲数或导电状态.或指电机转过一个步距角所需脉冲数。以四相电机为例,有四相四拍运行方式,即AB-BC-CD-DA-AB:四相八拍运行方式,即A-AB-B-BC-C-CD-D-DA-A

        ④定位转矩—电机在不通电状态下,转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成).

    ⑥保持转矩—步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成了衡量步进电机最重要参数之一。比如,当人们说2N·m的步进电机时,在没有特殊说明的情况下,是指保持转矩为2N·m的步进电机。

    (2)步进电机的动态指标

    ①步距角精度—步进电机每转过一个步距角的实际值与理论值的误差,用百分比表示:误差/步距角X100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。

    ②失步—电机运转时运转的步数不等于理论上的步数,称为失步。

    ③失调角—转子齿轴线偏移定子齿轴线的角度.电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

    最大空载起动频率—电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。

    最大空载运行频率—电机在某种驱动形式、电压及额定电流下,电机不带负载的最高转速频率。

    运行矩频特性—电机在某种测试条件下,测得运行中输出力矩与频率关系的曲线称为运行矩频特性。它是电机诸多动态曲线中最重要的,也是电机选择的根本依据,如图所示。

    电机一但选定,电机的静力矩确定,而动态力矩却不然.电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大.即电机的频率特性越硬。

      

     

    其中.曲线3电流最大或电压最高;曲线I电流最小或电压最低,曲线与负载的交点为负载的最大速度点。要使平均电流大,尽可能提高驱动电压,或采用小电感大电流的电机。      

    ④电机的共振点—步进电机均有固定的共振区域,其共振区一般在50r/min-80r/min或在180r/min左右。电机驱动电压越高,电机电流越大,负载越轻,电机体积越小。则共振区向上偏移,反之亦然。为使电机输出电矩大、不失步且整个系统的噪声降低,一般工作点均应偏移共振区较多。因此,在使用步进电机时应避开此共振区。     

    5.步进电机工作原理

    步进电机是一种将电脉冲转换成相应角位移或线位移的电磁机械装置。它具有快速启、停能力,在电机的负荷不超过它能提供的动态转矩时,可以通过输入脉冲来控制它在一瞬间的启动或停止。步进电机的步距角和转速只和输入的脉冲频率有关,和环境温度、气压、振动无关,也不受电网电压的波动和负载变化的影响。因此,步进电机多应用在需要精确定位的场合。  

    (1)工作原理

    步进电机有三线式、五线式和六线式,但其控制方式均相同,都要以脉冲信号电流来驱动.假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电机前进1.8°。其旋转角度与脉冲的个数成正比。步进电动机的正、反转由励磁脉冲产生的顺序来控制。六线式四相步进电机是比较常见的,它的控制等效电路如下图所示。它有4条励磁信号引线A,/A,B,/B 通过控制这4条引线上励磁脉冲产生的时刻,即可控制步进电机的转动.每出现一个脉冲信号,步进电机只走一步。因此,只要依序不断送出脉冲信号,步进电机就能实现连续转动。   

     

    (2)励磁方式

    步进电机的励磁方式分为全步励磁和半步励磁两种。其中全步励磁又有一相励磁和二相励磁之分;半步励磁又称一二相励磁。假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电动机前进1.8°。简要介绍如下。

    ①一相励磁—在每一瞬间,步进电机只有一个线圈导通.每送一个励磁信号,步进电机旋转1.8,这是三种励磁方式中最简单的一种。

    其特点是:精确度好、消耗电力小,但输出转矩最小,振动较大。如果以该方式控制步进电机正转,对应的励磁顺序如下表所示。若励磁信号反向传送,则步进电机反转。表中的1和0表示送给电机的高电平和低电平。

     

    ②二相励磁—在每一瞬间,步进电动机有两个线圈同时导通。每送一个励磁信号,步进电机旋转1.8。

    其特点是:输出转矩大,振动小,因而成为目前使用最多的励磁方式。如果以该方式控制步进电机正转,对应的励磁顺序见下表。若励磁信号反向传送,则步进电机反转。

     

      ③一二相励磁—为一相励磁与二相励磁交替导通的方式。每送一个励磁信号,步进电机旋转0.9。

    其特点是:分辨率高,运转平滑,故应用也很广泛。如果以该方式控制步进电机正转,对应的励磁顺序见下表。若励磁信号反向传送,则步进电机反转。

     

    6.步进电机的驱动

    步进电机的驱动可以选用专用的电机驱动模块,如L298, FF5754等,这类驱动模块接口简单,操作方便,它们既可驱动步进电机,也可驱动直流电机。除此之外,还可利用三极管自己搭建驭动电路。不过这样会非常麻烦,可靠性也会降低。另外,还有一种方法就是使用达林顿驱动器ULN2003,该芯片单片最多可一次驱动八线步进电机,当然如果只有四线或六线制的也是没有问题的。

    首先我们看一下电路原理图

     本实验采用四线双极性步进电机,该电机与TC1117连接如上图所示,M_IN为单片机控制口,M_OUT为电机接入口,其中M_IN分别控制步进电机的相序A,B.

    TC1117芯片工作逻辑真值表:

    开发板上使用的 4线双极性步进电机,其有两相A,B,每个绕组有两根线,A+和A-B+和 B-,运行方式可以是A+ —A-—B+—B-,如果想换个方向运行,可以是 A- —A+—B—B+。

    步进电机的四个引脚A+、A-、B+、B-分别连接到OUA、OUTB、OUTC、OUTD四个引脚

     

    实际物理连接图如下:

     

     

    示例程序为:

     

       #include "reg52.h"
       
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       sbit MOTOA = P1^0; //A+引脚
       sbit MOTOB = P1^1; //A-引脚
       sbit MOTOC = P1^2; //B+引脚
       sbit MOTOD = P1^3; //B-引脚
    
       #define SPEED 60000
    
       void delay(u16 i) //延时函数
       {
       while(i --);
       }
    
       void main()
       {
    
       P1 = 0x00; //电机处于待机状态
       while(1)
       {
       MOTOA = 1; //A+状态
       MOTOB = 0;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 0; //A-状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //B+状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 0;
       delay(SPEED); //延时
    
       MOTOA = 1; //B-状态
       MOTOB = 1;
       MOTOC = 0;
       MOTOD = 1;
       delay(SPEED); //延时
    
       }
       }
    
    
    
    
    

     

    上例程序驱动步进电机的方向为: A+ —A-—B+—B-,

    如果想换个方向运行,也就是 A- —A+—B—B+,可以使用以下程序:

       #include "reg52.h"
       
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       sbit MOTOA = P1^0; //A+引脚
       sbit MOTOB = P1^1; //A-引脚
       sbit MOTOC = P1^2; //B+引脚
       sbit MOTOD = P1^3; //B-引脚
    
       #define SPEED 60000
    
       void delay(u16 i) //延时函数
       {
       while(i --);
       }
    
       void main()
       {
    
       P1 = 0x00; //电机处于待机状态
       while(1)
       {
       MOTOA = 0; //A-状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //A+状态
       MOTOB = 0;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //B-状态
       MOTOB = 1;
       MOTOC = 0;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //B+状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 0;
       delay(SPEED); //延时
    
       }
       }
    
    
    
    
    

    如果想两个方向轮流运行,可以将上面两个程序结合在一块使用。

    展开全文
  • RAM上清零操作

    2019-10-08 14:05:12
    我们都知道制造RAM使用的材质是一种掉电易失性存储介质,因此RAM中的数据在电后易失。但是这里要区分两个概念:“掉电易失”和“清零”。 RAM在电失去数据后重新上电时,由于受到外界电磁环境干扰,会产生随机数...
    • 我们都知道制造RAM使用的材质是一种掉电易失性存储介质,因此RAM中的数据在掉电后易失。但是这里要区分两个概念:“掉电易失”和“清零”。
    • RAM在掉电失去数据后重新上电时,由于受到外界电磁环境干扰,会产生随机数
    • 不同的IDE的编译器针对这一特点会有不同的操作,有的会在程序启动(即执行main)之前自动加入一段初始代码(如下图),不勾选NoInit选项时自动执行对RAM区所有的单元赋值为0(清零操作);还有的对此不进行任何操作,这时就要依靠用户自己动手清零操作或者在对声明每个变量后立即对其初始化,以防止出现随机数现象。
    • 在这里插入图片描述
      总结:为了保险起见,建议大家养成在上电后写代码手动清零RAM区的习惯(针对裸机,OS的内存管理有完善的管理机制),然后再对需要的变量进行赋值使用操作。
    展开全文
  • 关注【电子开发圈】微信公众号,一起学习吧!...电子DIY、Arduino、51单片机、STM32单片机、FPGA…… 电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机…… 点击链接,免费下载100G+电子设计学习资料! ...

    关注【电子开发圈】微信公众号,一起学习吧!

    电子DIY、Arduino、51单片机、STM32单片机、FPGA……
    电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机……

    点击链接,免费下载100G+电子设计学习资料!

    http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect

    -----------------------------------------------------------------------------------------------------------------------------

     

    本设计采用AT89S52单片机作为主控芯片,利用数字式温度传感器DS18B20作为温度采集装置采集温度,将温度信号传送给单片机后通过一片液晶显示屏显示出来。

    系统工作的温度可以通过电路板上的按键自主进行设定。

    系统采用了一个继电器,用单片机为主的控制系统控制继电器触电的吸合,来控制交流电加热电路,达到以弱电控制强电的目的。

    系统必须设置温度报警系统,即达到设定温度的上限时扬声器报警,系统自动断电,当温度恢复时,系统重新恢复工作。

     

    系统主要实现功能

    系统主要功能如下:

    1)测量热水器内的温度,并通过显示屏实时显示温度值,显示范围为0℃~70℃。

    2)正常状态下显示系统时钟。

    3)可手动设定时钟时间即对时钟进行校准。

    4)可以人工设定热水器内的烧水温度,范围在20℃~70℃之间,也可以无需设定,打开后自动烧水,温度上限为70℃。

    5)具备定时功能,限定烧水时间。

    6)可以立即开机或在24小时内任意设定开机时间。

    7)当热水器内没有水时,有报警提示,并开关自动关闭,即有防止干烧功能。

    8)要求热水器有一定的抗干扰的功能。

     

    系统整体设计方案

    电热水器控制系统的整体设计方案包括硬件设计与软件设计方案,硬件方案主要是指以单片机为核心,包括外接的温度采集电路,实时时钟电路,键盘,热水器加热开关,液晶显示电路,报警电路以及复位电路。具体硬件框图如图2.1所示

     

     

    方案论证

    按照前面的课题要求,我们首先确定运用单片机AT89S52作为本次设计的核心部件。

    在温度采集方面有多种选择,常见的温度传感器分为以下几种:热敏电阻式温度传感器、热电阻式温度传感器、热电偶式温度传感器、模拟集成温度传感器、智能温度传感器。本次设计原本选择的是pt1000铂电阻温度传感器,其作为高精度的温度敏感元件,具有测温范围大,测温精度高,稳定性好,示值复现性高与耐氧化等特点,常被用作0℃~926℃温度区间内的标准温度计,其特性曲线为:-200°C~0°C时,Rt=R0[1+At+Bt2+c(t-100)t3];0°C~650°C时,Rt=R0[1+At+Bt2]。(Rt为温度为t°C时热电阻的阻值,R0为0°C时的阻值,A、B、C为实验测定的常数,A=3.90802×10-2,B=5.802×10-7,C=-4.22×10-7)本系统使用的R0为1000Ω。而要将pt1000作为本次设计的元件,还需要语气配套的传感器测量电路与放大电路两部分,具体电路如图2.2所示。[12]

    但是在实际购买时发现pt1000电阻由于价格过高,所以在最终设计中并没有采用pt1000作为测温元件来使用,同时,在同组同学推荐下采用了另一种集成式温度传感器DS18B20作为测温元件,DS18B20虽然测温范围比pt1000小,但是在满足本设计要求的基础上,其价格不到pt1000的一半,并且其硬件电路由于舍去了普通传感器所需附带的A/D电路的设计,所以其硬件电路的设计更加简单,所以采用了DS18B20作为最终设计中的测温元件。[11]

     

     

    本次设计的要求是选择51单片机作为核心的处理器,但是市场上做51单片机的厂商有很多家,其中比较著名的有STC公司、MICROCHIP公司、德州仪器公司、Intel公司、ATMEL公司、Philips公司、Siemens公司。[9]

    其中STC公司的STC单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强。

    还有MICROCHIP公司的PIC单片机,其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片.

    PHILIPS公司的PHLIPIS 51LPC系列单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求。

    ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫AVR单片机。

    而作为第一次使用单片机做独立设计,我选用的是ATMEL公司的AT89S52单片机,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 储存器。使用Atmel 公司高密度非易失性储存器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序编程器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。

     

    众所周知,单片机的程序写入过程不是一帆风顺的,其常常需要多次的写入与调试的过程,这里采用AT89S52的优点就是AT89S52额外添加了8k在系统可编程(即ISP)Flash存储器,特意设计为方便在线编程,使得其下载线电路简单,且可实现并行和或者串行模式的在线编程,使得每一次的程序下载与调试不必将单片机从PCB板上拔下,这样不仅使程序调试变得更加方便,其次还会大大延长单片机与PCB板的寿命。

    由于本次设计需要有定时开关机的功能,而单片机其内部时钟只能作为其内部程序运行的基准而不能满足设计的要求,所以外接了一个时钟芯片来满足本次设计的要求。[10]

    市面上的主流的时钟芯片有DS1302、 DS1307、PCF8485、SB2068等等。这些芯片结构简单,价格低廉,而实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。

    在显示方面采用一个液晶显示屏来显示主要的参数,液晶显示屏相对于LED数码管虽然编程方面更加繁琐,但是相对的其还具有更多的优点,其除了可以顺利的显示数字之外,还可以对显示的数字进行简单的注释,使得人机操作界面变得更加友好,其次在有关网站上也可以顺利的查找到有关DS1302的信号显示程序,本次显示界面除了有温度的显示还需要有时间的显示,定时操作信号的显示,采用LCD显示屏使操作显得更加方便。[6]

    在键盘的选择上,有两种选择:一是采用独立式按键键盘,第二种是采用矩阵式键盘。矩阵式一般键盘采用4*4式键盘,而本次设计中并不需要如此多的功能按键,所以本次设计,选择了独立式按键,本次总共使用了6个按键。其中按键1的功能是系统的复位,按键2的功能是实现实时时钟的时间校准功能,按键3实现的功能是实现烧水温度的设置功能,按键4实现的功能是烧水定时功能的设置,按键5与按键6分别是“+”“—”功能键。

    然后本次设计中还加入了一个发光二极管与蜂鸣器。

    发光二极管用来显示继电器的闭合状况,使得加热电路的通断能够被更直接的观察。

    而加入蜂鸣器的作用是在进行某项操作时进行指示作用,还有在达到烧水温度或者定时时间到的时候起到报警作用。

     

    单片机系统模块介绍

     

    AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在线可编程Flash 存储器,使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在线可编程,亦适于常规编程器。在一个芯片上,拥有灵巧的8 位CPU 和在线可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。[1]

    AT89S52具有以下标准功能:8K字节的Flash,256字节的RAM,32 位I/O 口,看门狗定时器,2个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件,可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作;掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

    3.1.1 AT89S52单片机的主要性能

    与MCS-51单片机产品兼容

    8K字节在系统可编程Flash存储器

    1000次擦写周期

    全静态操作:0Hz~33Hz

    三级加密程序存储器

    32个可编程I/O口线

    三个16位定时器/计数器

    八个中断源

    全双工UART串行通道

    低功耗空闲和掉电模式

    掉电后中断可唤醒

    看门狗定时器

    双数据指针

    掉电标识符

    3.1.2 AT89S52管脚功能说明

     

    VCC :电源

    GND : 接地

    P0口: P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用,在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节,在程序校验时,输出指令字节。程序校验时,P0口需要外部上拉电阻。

     

    P1口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表3.1所示。在flash编程和校验时,P1口接收低8位地址字节。

    P2口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

    P3口:P3 口是一个有内部上拉电阻的8 位双向I/O 口,P3 输出缓冲器能驱动4个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如表3.2所示。在flash编程和校验时,P3口也接收一些控制信号。

    表3.2  P3口第二功能

     

    RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。

    ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

    PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

    EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND.为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12V的VPP电压。

    XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。

    XTAL2:振荡器反相放大器的输出端。[7]

     

    3.1.3单片机的最小系统

    单片机的最小系统是指运用最少的元件使单片机运行的系统,一般包括一下的几个部分:晶振电路、复位电路、电源电路和串口电路。

    晶振是电路中常用用的时钟元件,全称是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。[2]

    晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。

    而晶振由于会与单片机的XTAL1与XTAL2脚构成的振荡电路中会产生谐波,从而降低电路时钟振荡器的稳定性,所以一般会匹配两个30pf的电容来消减谐波对于电路稳定性的影响。

    晶振电路如图3.2所示:,XTAL1 和XTAL2 分别是放大器的输入、输出端

    系统复位有两种方式:上电复位与手动复位。[3]

    上电复位:上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端为低电平,程序正常运行。

    高电平形成复位,同时电解电容被短路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,正常工作。[5]

    一般采用手动复位,其对于上电复位方式更加方便,不需要切断电源便可对系统进行复位,复位电路如图3.3所示

     

    3.2温度检测模块

    3.2.1 DS18B20的主要功能及特点

    DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。[8]

    DS18B20具有以下特性:

    独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线。

    每个设备都有一个唯一的64位序列码,存储在ROM中。

    简单的多点分布式测温应用。

    在使用中不需要任何外围元件。

    可以从数据线供电。电源范围为3.0V~ 5.5V。

    测温范围 -55℃~+125℃。

    在—10℃~+85℃间,测温分辨率为0.5℃。

    温度计分辨率可由用户选择,9至12位之间。

    在750毫秒内将温度转换为12位字。

    用户可自定义非易失性报警的设置。

    报警搜索命令定义和存储的设备,其温度不收程序限制(温度报警状态)。

    采用8引脚SOP和3引脚TO- 92封装。

    软件与DS1822兼容。

    其引脚如图3.4所示:

     

    图3.4 DS18B20引脚图

     

    引脚说明:

    GND - 接地

    DQ  - 输入/输出数据

    VDD - 电源电压

    NC  - 无连接

     

    DS18B20的极限使用条件

    各引脚对地电压: -0.5V~+0.6V

    工作温度:  -55℃~125℃

    储存温度:  -55℃~+125℃

    焊接温度参见J-STD-020A的规格

    *以上指出的器件在进行正常焊接操作时所需要的环境条件,可能还有部分为能说明但是在操作规格中已经暗示器件可正常运行的环境。长期工作在极限条件下可能会影响器件的可靠性。

     

    3.2.2DS18B20的内部结构

    DS18B20的内部存储资源分为8个字节的ROM,9个字节的高速暂存器RAM,3个字节的EEPROM。如图3.5所示。

    图3.5  DS18B20内部结构图

     

    每只DS18B20都有一个唯一存储在ROM中的64位编码。最前面8位是单线系列编码,接着的49位是唯一的序列号,最后8位是以上56位的CRC编码。当一条总线上皆有多个DS18B20时,就通过序列号对其加以区分。

    主机操作ROM的指令有5种:

    33H——读ROM。读DS18B20温度传感器ROM中的编码。

    55H——匹配ROM。发出此命令后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20并使之做出响应,为下一步对该DS18B20的读写做准备。

    F0H——搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,位操作各期间做好准备。

    CCH——跳过ROM。忽略64位ROM地址,直接向18B20发温度变换命令。

    ECH——告警搜索命令。执行后只有温度超过设定值上限或下限的芯片才做出响应。

    高速暂存器RAM由9个字节组成。其组成如图3.8所示。包括两个温度显示位,两个复制的TH和TL,一个配置寄存器和三个保留位,一个CRC校验值。可电擦E2PROM又包括温度触发器TH和TL,以及一个配置寄存器。

     

    表3.3  高速暂存器RAM组成

    寄存器内容

    字节地址

    温度值地位(LSB)

    0

    温度值高位(MSB)

    1

    高温限值(TH)

    2

    低温限值(TL)

    3

    配置寄存器

    4

    保留

    5

    保留

    6

    保留

    7

    CRC校验值

    8

     

    操作RAM的指令主要有:

    44H——温度转换。启动DS18B20进行温度转换,结果存入RAM。

    BEH——读暂存器。读内部RAM中的温度数据。

    4EH——写暂存器。发出像内部RAM写上、下限温度数据指令,紧跟该命令之后传送2字节的数据。

    48H——复制暂存器。将RAM中的TH、TL复制到E2PROM中。

    B8H——重调E2PROM。将E2PROM中内容恢复到中。

    B4H——读供电方式。寄生供电时,DS18B20发送0,外界电源供电时,DS18B20发送1。

    3.2.3 DS18B20的工作时序

    DS18B20需要严格的单总线协议以确保数据的完整性,主要包括初始化系列,读序列,写序列,所有时序都是讲主机作为主设备,单总线设备作为从设备。每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件会送数据,在进行写命令后,主机需启动读时序写完数据将接受。数据和命令的传输都是地位在先。

    初始化时序:

    1)先将数据线置高电平1。

    2)延时(该时间要求不是很严格,但是要尽可能短一点)。

    3)数据线拉到低电平0。

    4)延时750us(该时间范围可以在480~960us)。

    5)数据线拉到高电平。

    6)延时等待。如果初始化成功,则在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。

    7)若CPU读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起至少要480us.

    8)将数据线再次拉到高电平1后结束。如图3.6所示。

     

     

    写时序:

    1)数据线先置低电平0。

    2)延时确定的时间为15us。

    3)按从低位到高位的顺序发送数据。

    4)延时时间为45us。

    5)将数据线拉到高电平1。

    6)重复1)~5)步骤,直到发送完整个字节。

    7)最后将数据线拉高到1。如图3.7所示。

     

    图3.7  写数据时序图

     

    读时序:

    1)将数据线拉高到1。

    2)延时2us。

    3)将数据线拉低到0。

    4)延时6 us。

    5)将数据线拉高到1。

    6)延时4 us。

    7)读数据线的状态得到一个状态位,并进行数据处理。

    8)延时30us。

    9)重复1~7步骤,直到读取完一个字节。如图3.8所示。

     

    图3.8  读数据时序图


    硬件模块的设计

     

    在第二章已经提到硬件件模块的设计主要是指以单片机为核心,包括外接的温度采集电路,实时时钟电路,键盘,热水器加热开关,液晶显示电路,报警电路以及复位电路的设计。

     

    4.1 温度采集模块

    首先我们选择DS18B20作为本次设计的测温元件。

    由第三章有关内容可知DS18B20温度传感器可以将温度这一模拟信号转化为数字信号供处理器进行处理,从而省去了电阻电感式传统温度传感器的信号运放模块与A/D转换模块。

    DS18B20只有三根外引线:单线数据传输总线端口DQ (2),外供电源线VDD(3),共用地线GND(1)。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉。另一种是外部供电方式(VDD接+5V),相应的完成温度测量的时间较短。


    在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接,具体的接口电路如图4.2所示。

     

    4.2实时时钟电路模块

    本次设计采用的外接时钟模块芯片是美国DALLAS公司的DS1302时钟芯片。

    4.2.1 DS1302的介绍

    其作为一款高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

    各引脚的功能为:

    Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2DS1302供电,当Vcc2< Vcc1时,由Vcc1DS1302供电。

    SCLK:串行时钟,输入,控制数据的输入与输出;

    I/O:三线接口时的双向数据线;

    CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,

    CE提供结束单字节或多字节数据传输的方法。

    具体引脚图如图4.3所示

     

     

    4.2.2实时时钟模块原理图

    电路原理图如图4.5所示,DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接12MHz晶振,为芯片提供计时脉冲。

     

    图4.5 DS1302实时时钟电路接线电路

     

    4.3键盘输入模块

    键盘输入原理图如图4.6所示:

    P3.3~P3.7分别接按键S1~S6

    按键的功能分别是:

    S1时间调整按钮

    S3烧水开始按钮与烧水温度调整按钮

    S4烧水时间设定按钮

    S5“+”功能键

    S6“—”功能键

     

    图4.6键盘输入模块原理图

     

    4.4继电器加热模块

    继电器的定义是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器,它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

    本设计所用的为型号SRD-05VDC-SL-C的继电器。线圈电压为直流5V,为一单刀双掷继电器,其引脚结构如图4.7所示。

     

    图4.7 继电器引脚图

     

    除线圈外,另三个引脚构成一个单刀双掷开关,当线圈通电时,开关达到另一边,原来的开触点吸和,闭触点断开。本设计中,目的是用继电器吸和,接通外接的以加热设备,从而起到温度控制的作用,只需用到一组常开触点,则另一端空置。

    图4.8 继电器设计原理图

     

    4.5 LCD显示模块设计

    4.5.1 LCD模块概述

    本次设计采用的是一块1602LCD液晶模块,其共可以显示2 行×16 个字符,每个字符是由5×8点阵组成的字符块集。字符型液晶显示模块由字符型液晶显示屏(LCD),控制驱动主芯片SPLC780C 及其扩展驱动芯片SPLC1OO,配以少量外围阻﹑容元件结构件等装配在PCB 板上而成。YB1602A 采用COB 工艺制作,结构稳定,使用寿命长。

    其主要特性如下:

    8位并行数据串口,适配M6800系列时序;

    可选为并行数据方式;

    具有字符发生器ROM,含10880位;

    192中5*8点字符

    64种5*10点字体字符

    低功耗,高可靠性;

    4.5.2 LCD模块硬件说明

    1)接口说明

    表4.1 LCD1602接口说明

    管脚序

    名称

    电平

    功能描述

    1

    VSS

    0V

    电源地

    2

    VCC

    5.0V

    电源输入

    3

    V0

    LCD驱动电压输入

    4

    RS

    H/L

    RS=H,表示DB0-DB7 为显示数据

    RS=L,表示DB0-DB7 为指令

    5

    R/W

    H,H→L

    R/W=H,数据被读到DB9-DB7

    R/W=L, 数据被写到DB9-DB7

    6

    E

    H/L

    使能信号

    7

    DB0

    H/L

    数据线

    8

    DB1

    H/L

    数据线

    9

    DB2

    H/L

    数据线

    10

    DB3

    H/L

    数据线

    11

    DB4

    H/L

    数据线

    12

    DB5

    H/L

    数据线

    13

    DB6

    H/L

    数据线

    14

    DB7

    H/L

    数据线

    15

    BLA

    5.0V

    背光正极(LEDK﹑BLK)

    16

    BLK

    0V

    背光负极(LEDA﹑BLA)

     

    备注:第3 脚V0 用来调节对比度,LCD 的驱动电压Vop=VDD-V0,YB1602 的Vop是4.8V,此时显示最佳对比度,故在5.0V 供电模式下,可以在V0 与电源地(0V)之间接一个10K 的可调电位器来调节对比度。

    2)最大工作范围

    逻辑工作电压(VDD):4.5V~5.5V

    电源地(VSS):0V

    LCD驱动电压(Vop):-0.2V~+0.3V

    4.5.3 内部控制指令

    表4.2 LCD内部指令表

    序号

    指令

    RS

    R/W

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    1

    清显示

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    2

    光标返回

    0

    0

    0

    0

    0

    0

    0

    0

    1

    *

    3

    置输入模式

    0

    0

    0

    0

    0

    0

    0

    1

    I/D

    S

    4

    显示开/关控制

    0

    0

    0

    0

    0

    0

    1

    D

    C

    B

    5

    光标或字符移位

    0

    0

    0

    0

    0

    1

    S/C

    R/L

    *

    *

    6

    置功能

    0

    0

    0

    0

    1

    DL

    N

    F

    *

    *

    7

    置字符发生存贮器地址

    0

    0

    0

    1

    字符发生存贮器地址

    8

    置数据存贮器地址

    0

    0

    1

    显示数据存贮器地址

    9

    读忙标志或地址

    0

    1

    BF

    计数器地址

    10

    写数到CGRAM或DDRAM)

    1

    0

    要写的数据内容

    11

    从CGRAM或DDRAM读数

    1

    1

    读出的数据内容

     

    4.5.4显示硬件设计原理图


    根据设计要求与液晶控制方式,采用并行工作方式,将单片机的P0口作为数据传输口,而又由于单片机的P0口内部没有上拉功能,P0口作为I/O口输出的时候时 输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态)。也就是说P0 口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻[4](即外接一排阻连接到VCC上,如图4-8所示)。其硬件显示模块如图4.9所示。[16]

     

    图4.9 液晶显示模块原理图

     

    4.6其余硬件模块设计

     

     

    蜂鸣器电路在输入为低电平时导通,作为某些按键按下的指示音。

    LED灯在继电器断开即加热工作时亮,在加热电路断开时,LED灯熄灭。


    系统软件设计

     

    根据系统所需要实现的功能,软件设计主要分为如下的几个模块:主程序、温度读取模块设计、实时时钟模块设计、LCD显示模块设计、键盘扫描程序以及按键消抖程序。

    本系统的工作流程是:系统上电后,对电路板上的各部分初始化;然后按下按键2,对时间进行设定;按下按键3之后,对烧水温度进行设定;按下按键4后,对烧水时间进行设定,当温度超过设定的温度之后,蜂鸣器工作,系统停止工作;在系统受到较强干扰时,按下按键1可以对单片机进行复位。

     

    5.1主程序模块

    主程序主要完成的是对个全局变量进行定义,对时钟与时间的初始化,调用子函数功能。

    具体流程图如图5.1所示。

    主程序清单如下:

    void main()
    
    {
    
                  bit bz=0;
    
                  float ttt;         
    
                  char we[6];
    
                  unsigned int i;
    
                  int te;
    
                  delayms(1);
    
                  chushishizhong();                //初始时钟
    
                  chushishijian();                 //初始时间
    
     
    
                  //writetime();
    
    kaishi:
    
        writecom(0x01);      //清零
    
                  while(1)
    
                  {
    
                                readtime();              //读取时间
    
                                t[0]=shijian[4]/10+0x30;              //时间数据处理
    
                                t[1]=shijian[4]%10+0x30;

     

     

    5.2 DS18B20测温模块

    此模块主要任务是对DS18B20进行初始化,然后再进行读字节、写字节的工作,最后将读得的16进制温度传送到处理器内进行处理。

    DS18B20测温流程图如图5.2所示


    5.3实时时钟模块

    实时时钟模块完成时间的设定与时间的读取,包括年、月、日、时、分、秒。

    具体流程图如图5.3所示

     

    具体程序如下:

    #define uchar unsigned char
    
     
    
    sbit res=P2^0;   //数据命令口选择
    
    sbit clo=P2^2;   //脉冲信号口选择
    
    sbit io=P2^1;    //数据口选择
    
     
    
    #define miao   0x80//秒

     

    5.4 LCD显示模块

    LCD显示模块主要实现各个数据的显示功能,包括时间的显示与温度以及提示字的显示。

    显示模块的流程图如图5.4所示。

     

    具体程序如下:

    #define port P0
    
    #define uchar unsigned char
    
    #define uint unsigned int
    
     
    
    sbit rs=P2^7;   //将P2.0设置为数据选择口
    
    sbit rw=P2^6;   //将P2.6设置为读写选择口
    
    sbit en=P2^5;   //将P2.5设置为使能信号口

     

    5.5键址返回程序

    键盘扫描程序的功能是逐个扫描各个功能键和“+”“—”键是否被按下,若按下某个按键,则返回相应的键址。

    其按键扫描程序如下:

    sbit k1=P3^3;    //定义每个按键的数据口 P3.3为S1按键
    
    sbit k2=P3^4;    //P3.4对应S2按键
    
    sbit k3=P3^5;    //P3.5对应S3按键
    
    sbit k4=P3^6;    //P3.6对应S4按键
    
    sbit k5=P3^7;   //P3.7对应S5按键
    
     
    
    unsigned char keyscan()    //定义键址返回程序
    
    {
    
        if(k1==0)     //当按键1按下
    
                     {
    
                     delayms(10);   //消抖 延时
    
                       if(k1==0)  
    
                                {
    
                                while(k1==0);
    
                                return 1;    //返回键址1
    
                                }
    
                     }
    
        else if(k2==0)  //当按键2按下
    
                     {
    
                     delayms(10);
    
                       if(k2==0)
    
                                {
    
                                while(k2==0);
    
                                return 2;   //返回键址2
    
                                }
    
                     }
    
        else if(k3==0)    //当按键3按下
    
                     {
    
                     delayms(10);
    
                       if(k3==0)
    
                                {
    
                                while(k3==0);
    
                                return 3;      //返回键址3
    
                                }
    
                     }
    
        else if(k4==0)    //当按键4按下
    
                     {
    
                     delayms(10);
    
                       if(k4==0)
    
                                {
    
                                while(k4==0);
    
                                return 4;      //返回键址4
    
                                }
    
                     }
    
        else if(k5==0)    //当按键5按下
    
                     {
    
                     delayms(10);
    
                       if(k5==0)
    
                                {
    
                                while(k5==0);
    
                                return 5;       //返回键址5
    
                                }
    
                     }
    
                     else
    
                  return 0;        //若没有按键按下则返回
    
    }

     

    5.6测试及性能分析

    实际硬件测试图如下:

    1)接通电源,系统正常显示时钟,如图5.5所示

    图5.5 时时钟显示

     

    2)按下按键2,,光标闪烁,进入时钟校准模式,如图5.6所示

    图5.6 时钟校准

     

    3)按下按键3,系统显示当前温度,按下按键5,按键6调节烧水温度,当水箱内温度低于目标温度时,LED灯亮,表示继电器断开,加热电路工作。,如图5.7所示。

    图5 .7加热模式

     

    4)当水箱内温度达到加热温度时,LED灯熄灭,加热电路停止工作,在温度降到设定温度以下,继电器断开,继续加热。如图5.8所示

    图5.8 继续烧水

     

    5)按下按键4,进入加热时间设定,再按下按键4则进入定时烧水模式。如图5.9所示

    图5.9 定时烧水

     

    6)按下按键1,则对系统进行复位操作,系统初始化到时间显示画面,如图5.10所示

    图5.10 复位操作

     

    结论:成品经实际测试,基本达到本次设计的各项要求。

    展开全文
  • 作为单片机内部一个重要组成部分,存储器占有很重要的地位,...按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以...

    作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解。

    1、先聊聊存储器

    存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有记忆功能。按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。

    在这里插入图片描述

    2、单片机的存储器

    如下图所示是STM32F103RB系列单片机所使用的存储器大小,Flash为128KB,RAM为20KB,这里的RAM是指SRAM。

    在这里插入图片描述
    这两个存储器的寄存器输入输出端口被组织在同一个4GB的虚拟线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。Flash用来存储编译好的程序文件,SRAM用来存储运行程序时所创建的临时数据。所以如果不加入外置存储器,那么程序里的东西就会出现在这两个存储器中。

    下图为STM32F103RB单片机的内存映射图(部分),可以看到画红圈的两个就是SRAM和Flash存储器。不知道大家有没有注意,当使用J-Flash软件给stm32下载bin文件的时候需要填写起始地址,那个0x08000000其实就是Flash存储器的起始地址。

    在这里插入图片描述

    3、关于编译器生成的文件

    如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用Keil编译后的编译信息。

    在这里插入图片描述
    很多人并不一定知道Program Size的含义,我来给大家解释一下。

    Code:是程序中代码所占字节大小;

    RO-data:程序只读的变量,也就是带const的,和已初始化的字符串等;

    RW-data:已初始化的可读写全局/静态变量;

    ZI-data:未初始化的可读写全局/静态变量;

    那么这个程序占用的Flash存储器的空间大小是多少呢?程序所占Flash空间大小=Code+RO data+RW data=生成的bin文件大小。

    那么这个程序占用的SRAM存储器的空间大小是多少呢?程序固定占用RAM大小=RW data+ZI data。

    这些信息除了在编译器下方的信息栏里面看到,也可以在项目文件里的.map文件的最下面找到,如下图:

    在这里插入图片描述

    4、数据在存储器上的存储结构

    程序在Flash上的存储结构如下图所示,通过阅读hex文件和MDK下调试综合提炼出来的。其中,ZI-data对应未初始化数据段,RW-data对应已初始化数据段,Code对应代码段。
    在这里插入图片描述

    数据在SRAM上的结构,如下图所示。这部分大家可以参考上面的内存映射图来理解。

    STM32的SRAM存储结构

    5、总结

    至此我相信大家应该对stm32单片机的内部存储有了更进一步的认识。其实如果想更深入的了解单片机的运行轨迹,我建议大家来详细研究一下stm32单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。

    展开全文
  • 越来越多的单片机是一个关键因素在这些智能电源和实现大范围的控制,传感和管理功能。看一些更先进的单片机的硬件特性和方式简化智能电源的设计将是有用的任何硬件设计师和嵌入式系统一起工作。 本文将介绍一些关键...
  • 网上转载:用光电式转速传感器检测转速的脉冲信息,在脉冲状态下,将转速的变化转换成光通量的变化,再通过...并且该电子式里程表累积的里程数字存储在非易失性的EEPROM存储器内,在无电状态下数据也能保存。 这个主...
  • AT89C51单片机:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable ...该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
  • 伺服电机(servo motor ) ... 伺服电机转子转速受输入信号控制,并能快速反应,在自动控制系统中,用作执行元件,且具有机电时间常数小、线性度高、始动电压等特性,可把所收到的信号转换成电动机轴...
  • 按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类,易失和非易失是指存储器断电后,里面存储的内容是否会丢失,另一边的速度而言呢,易失性存储器的速度要快于非易失性存储器。 1.1 易失性...
  • 单片机对步进电机的控制(一)——步进电机的基本原理 步进电机也叫步进器,它利用电磁学的原理,将电能转换为机械能。人们早在20世纪20年代就开始使用这种电机,随着嵌入式系统的日益流行,步进电机的使用也开始暴增...
  • 来源:单片机及嵌入式系统应用 作者:攀枝花学院...整个掉电保护实现的基本思路是:产生掉电信号,捕捉掉电信号和处理掉电信号。重点介绍这个过程的具体实现。 关键词 掉电保护 嵌入式系统 管道通信 原子操作 ...
  • 1.什么是80C51单片机 8051是Intel公司MCS-51系列的典型品种,采用HMOS工艺。而以8051为基核的CMOS产品统称为80C51系列,与原来工艺相比,特点是低功耗。 2.80C51单片机的基本结构 这些部分都是通过内部总线进行数据...
  • PWM控制直流电机(单片机实验) 有问题欢迎私信哦 一.题目 设计电路,使用定时器实现PWM对直流电机的转速控制,并且实现按键切换转动方向。并进行软件仿真,做出实物。 二.基本要求 1.设置按键控制直流电机的开关 2....
  • Nand-Flash/eMMC(带有Flash控制器的Nand-Flash)作为一种非线性宏单元模式存储器,为固态大容量存储的实现提供了廉价有效的解决方案。Nand-Flash存储器具有容量大,改写速度快等优点,适用于大量数据的存储,因而...
  • 常见存储器概念:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失...
  • 2.1 新一代非易失性记忆元件--闪烁存储器 2.2 Flash存储器及应用 2.3 随机静态存储器HM628128及应用 2.4 非挥发性随机存储器NOVRAM 2.5 ASIC的设计方法和设计工具 2.6 GAL器件的编程方法及其应用 2.7 第三代可编程...
  • 单片机的运行需要执行程序,...在单片机的瞬间,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的main之前,还有一系列其他的的初始化
  • 单片机运行时数据都存储在RAM中,在掉电后RAM的数据是无法保留的,那么怎么使得在掉电后数据不丢失呢?这就需要使用EEPROM或FLASHROM等存储器来实现。 ROM最初不能编程,出厂什么内容就永远什么内容,不灵活。后来...
  • 科博达面试题

    2019-07-26 11:04:05
    需要闭卷试题,请私我qq864961443 第一部分 判断题(No.1-...关键字volatile的作用是把该数据存储在非易失存储器中,使该数据在掉电后能够保持。(×) 如果一个变量在使用前未被定义,将被默认为整型数据。( ) 数...
  • 单片机上知道,在上的那一刻,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的 main之前,还有一系列其他的的初始化要做,如堆栈的...
1 2 3 4 5 ... 20
收藏数 1,322
精华内容 528
关键字:

单片机掉电易失