51单片机内部EEPROM的应用

合集下载

实验八 51系列单片机IIC

实验八 51系列单片机IIC
8.3 I2C总线器件的寻址方式
I2C总线上的所有器件连接在一个公共的总线上,因此,主器件在进行数据传输前选择需要通信的从器件,即进行总线寻址。 I2C总线上所有外围器件都需要有惟一的地址,由器件地址和引脚地址两部分组成,共7位。器件地址是I2C器件固有的地址编码,器件出厂时就已经给定,不可更改。引脚地址是由I2C总线外围器件的地址引脚(A2,A1,A0)决定,根据其在电路中接电源正极、接地或悬空的不同,形成不同的地址代码。引脚地址数也决定了同一种器件可接入总线的最大数目。 地址位与一个方向位共同构成I2C总线器件寻址字节。寻址字节的格式如表所示。方向位(R/)规定了总线上的主器件与外围器件(从器件)的数据传输送方向。当方向位R/=1,表示主器件读取从器件中的数据;R/=0,表示主器件向从器件发送数据。
从地址中读取一个字节的数据
INT8U read_random(INT8U RomAddress) { INT8U Read_data; I_Start(); I_Write8Bit(WriteDeviceAddress); I_TestAck(); I_Write8Bit(RomAddress); I_TestAck(); I_Start(); I_Write8Bit(ReadDeviceAddress); I_TestAck(); Read_data=I_Read8Bit(); I_NoAck(); I_Stop(); return (Read_data); }
8.4.1 串行EEPROM存储器简介
串行EEPROM存储器是一种采用串行总线的存储器,这类存储器具有体积小、功耗低、允许工作电压范围宽等特点。目前,单片机系统中使用较多的EEPROM芯片是24系列串行EEPROM。其具有型号多、容量大、支持I2C总线协议、占用单片机I/O端口少,芯片扩展方便、读写简单等优点。 目前,Atmel、MicroChip、National等公司均提供各种型号的I2C总线接口的串行EEPROM存储器。下面以Atmel公司的产品为例进行介绍。 AT24C01/02/04/08系列是Atmel公司典型的I2C串行总线的EEPROM。这里以AT24C08为例介绍。AT24C08具有1024×8位的存储容量,工作于从器件模式,可重复擦写100万次,数据可以掉电保存100年。8引脚DIP封装的AT24C08的封装结构,如图所示。

51单片机 原理

51单片机 原理

51单片机原理
51单片机,又称作8051单片机,是一种微控制器,广泛应用
于嵌入式系统中。

它是由英特尔公司在1980年推出的,并成
为了应用最广泛的单片机架构之一。

51单片机采用哈佛架构,具有8位数据总线和16位地址总线。

它内部集成了CPU、RAM、ROM、I/O口等组成部分。

在工
作时,通过外部时钟源供给给单片机提供时钟信号。

CPU是51单片机的核心部件,用于执行程序指令。

51单片机
的指令集支持多种操作,包括算术、逻辑、移位、跳转等。

数据的存储和处理则在RAM中进行,程序的存储则在ROM中。

RAM是51单片机的临时存储器,用于存储程序中的变量和计算结果。

ROM则是只读存储器,用于存储程序指令。

在单片
机启动时,ROM中的程序会被加载到RAM中,并由CPU执行。

I/O口是51单片机与外部设备进行交互的接口。

它可以被配置为输入或输出,用于连接各种传感器、执行器、显示器等外围设备。

通过I/O口,51单片机可以与外部世界进行数据交换和控制。

为了编程和调试51单片机,我们通常使用专用软件和编程器。

这些工具可以将用户编写的程序烧录到51单片机的ROM中,并通过与单片机的通信接口进行通信。

总的来说,51单片机是一种功能强大且应用广泛的微控制器。

它可以用于控制各种嵌入式系统,如家用电器、车辆电子、工业自动化等领域,为我们的生活和工作提供了便利。

三线制Microware同步串行EEPROM在MCS—51单片机上的运用

三线制Microware同步串行EEPROM在MCS—51单片机上的运用
厦 门 大 学机 电工 程 系 扈宏毅 游 龙 翔
Th p ia i n o e Ap l to fEEPROM 、ih M ir wa e S —a l n M CS一5 c v t c o r e lBl o s 1
Si gl -Chi ir c m put r n e- pM co o e
C S
S K DI D O
V CC N C
OR G GN D
E P O 之 间通 信 的 同步 信 号 ,数 据 在 它 的上 升 沿 ER M
锁定有效 ;
D : 据输入 ; I数 D 数据输 出 ; O: O G:Mi ohp公 司 产 品 特 有 引 脚 。 该 引脚 接 R c ci r V c时 ,器 件 的 内部 存 储 组 织 结 构 以 1 位 为 一 个 单 c 6
分 类 号 :P 7 T 23
文 献 标 识 码 : B
文 章 编 号 :0 6—6 7 ( 0 2 0 —0 0 10 9 7 2 0 ) 8 0 9—0 3
1 三 线 制 Mirwae串 行 总 线 co r
三 线 制 Mi o ae同 步 串 行 总线 接 口是 N t n l c wr r ai a o S m cn uo 公 司 在 其 生 产 的 C P系 列 和 H C 系 列 e iod t r O P 微 控 制 器 上 采 用 的 一 种 串行 总线 ,它 使 用 的 三 根 信 号线 分 别 为 数 据 输 入 线 S 、数 据 输 出线 S I 0和 时 钟 信 号线 S K。由 于 三 线 制 Mi o a c wr r e总线 只 需 3 ~4根 数 据 线 和 控 制 线 即 可 扩 展 具 有 三 线 制 Mir ae总 co r w 线 的 各 种 I 0器 件 ,而并 行 总 线 扩 展 方 法 却 需 要 8 / 根 数 据 线 、8~1 6根 地 址 线 和 2~3位 的 控 制 线 ,因

51内部eeprom读写,实现掉电存储

51内部eeprom读写,实现掉电存储

主函数:#include<reg52.h>#include"EEPROM.h"#include"smg.h"void main(){num=byte_read(DEBUG_Data_Memory_Begin_Sector_addr);//字节读(程序开始时读取EEPROM中数据)if(num>=60)num=0;//防止首次上电时读取出错??while(1){if(num<60){display(num);num++;delay(5);delay1(DELAY_CONST);sector_erase(DEBUG_Data_Memory_Begin_Sector_addr);//擦出扇区byte_program (DEBUG_Data_Memory_Begin_Sector_addr,num);//字节编程}if(num==60)num=0;}}EEPROM.h:/*STC89C51RC,STC89LE51RC 0x2000 共八个扇区STC89C52RC,STC89LE52RC 0x2000 共八个扇区STC89C54RD+,STC89LE54RD+ 0x8000 共五十八个扇区STC89C55RD+,STC89LE55RD+ 0x8000 共五十八个扇区STC89C58RD+,STC89LE58RD+ 0x8000 共五十八个扇区*/#include<reg52.h>#include<intrins.h>//sfr定义特殊功能寄存器sfr ISP_DATA =0xe2;//ISP/IAP 操作时的数据寄存器,从Flash 读出的数据放在此处,向Flash 写的数据也需放在此处sfr ISP_ADDRH =0xe3;//ISP/IAP 操作时的地址寄存器高八位sfr ISP_ADDRL =0xe4;//ISP/IAP 操作时的地址寄存器低八位sfr ISP_CMD =0xe5;//ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效sfr ISP_TRIG =0xe6;//ISP/IAP 操作时的命令触发寄存器sfr ISP_CONTR =0xe7;//ISP/IAP 控制寄存器/* 定义命令*/#define uchar unsigned char /*8bit无符号整型*/#define uint unsigned int /*16bit无符号整型*/#define READ_AP_and_Data_Memory_Command 0x01 /*字节读数据存储区*/#define PROGRAM_AP_and_Data_Memory_Command 0x02 /*字节编程数据存储区*/#define SECTOR_ERASE_AP_and_Data_Memory_Command 0x03 /*扇区擦除数据存储*/#define DEBUG_Data_Memory_Begin_Sector_addr 0x2000//扇区地址#define DELAY_CONST 60000//延时#define WAIT_TIME 0x01uchar num;/* 打开ISP,IAP 功能*/void ISP_IAP_enable(void){EA=0;/* 关中断*/ISP_CONTR=ISP_CONTR & 0x18; /* 0001,1000 */ISP_CONTR=ISP_CONTR|WAIT_TIME;ISP_CONTR=ISP_CONTR|0x80; /* 1000,0000 */}/* 关闭ISP,IAP 功能*/void ISP_IAP_disable(void){ISP_CONTR=ISP_CONTR&0x7f;/* 0111,1111 */ISP_TRIG=0x00;EA=1;/* 开中断*/}/* 字节读*/uchar byte_read(uint byte_addr){ISP_ADDRH = (uchar)(byte_addr >> 8);ISP_ADDRL = (uchar)(byte_addr & 0x00ff);ISP_CMD = ISP_CMD&0xf8;/* 1111,1000 */ISP_CMD = ISP_CMD|READ_AP_and_Data_Memory_Command;/* 0000,0001 */ISP_IAP_enable();ISP_TRIG = 0x46;ISP_TRIG = 0xb9;_nop_();ISP_IAP_disable();return (ISP_DATA);}/* 扇区擦除*/void sector_erase(uint sector_addr){uint get_sector_addr=0;get_sector_addr=(sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址*/ ISP_ADDRH = (uchar)(get_sector_addr >> 8);ISP_ADDRL = 0x00;ISP_CMD = ISP_CMD&0xf8;/* 1111,1000 */ISP_CMD =ISP_CMD|SECTOR_ERASE_AP_and_Data_Memory_Command;/* 0000,0011 */ ISP_IAP_enable();ISP_TRIG = 0x46;/* 触发ISP_IAP命令*/ISP_TRIG = 0xb9;/* 触发ISP_IAP命令*/_nop_();ISP_IAP_disable();}/* 字节编程*/void byte_program(uint byte_addr, uchar original_data){ISP_ADDRH = (uchar)(byte_addr >> 8);ISP_ADDRL = (uchar)(byte_addr & 0x00ff);ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */ISP_CMD = ISP_CMD |PROGRAM_AP_and_Data_Memory_Command; /* 0000,0010 */ISP_DATA = original_data;ISP_IAP_enable();ISP_TRIG = 0x46; /* 触发ISP_IAP命令*/ISP_TRIG = 0xb9; /* 触发ISP_IAP命令*/_nop_();ISP_IAP_disable();}void delay1(uint counter){uint temp=0;for(temp=counter;temp>0;temp--){_nop_();_nop_();_nop_();}}Smg.h:/****************************************************************************** ***** 标题: 试验数码管上显示数字( 单片机直接实现位选共阴极) ** 用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管******************************************************************************** ****/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar code smg_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码0-9.uchar code smg_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制查表的方法控制void delay(uint i){uchar j;for(i;i>0;i--)for(j=200;j>0;j--);}void display(uint dat)//数码管显示函数{uint i;uint LedOut[10];LedOut[0]=smg_duan[dat%10000/1000];//(若要显示小数点,则|0x80)LedOut[1]=smg_duan[dat%1000/100];LedOut[2]=smg_duan[dat%100/10];LedOut[3]=smg_duan[dat%10];for( i=0; i<4; i++){P0=LedOut[i];P2=smg_wei[i];//使用查表法进行位选delay(10);//扫描间隔时间,数码管每位显示的时间,太长会数码管会有闪烁感}}。

用EEPROM扩展单片机ROM实验

用EEPROM扩展单片机ROM实验

实验九用EEPROM扩展单片机ROM实验一、实验目的1.用EEPROM 27C64扩展51单片机ROM(27C64为外ROM)。

2.用proteus设计、仿真基于AT89C51单片机ROM的扩展实验。

3.借助proteus VSM的虚拟逻辑分析仪,观测单片机访问外ROM(即27C64)时地址、数据和控制总线的信号状态。

二、电路设计1.从PROTEUS库中选取元件①AT89C51.BUS:总线式的单片机;②RES:电阻;③7SEG-BCD- GRN:带BCD译码七段绿光数码管;④CAP、CAP-ELEC:电容、电解电容;⑤CRYSTAL:晶振;⑥74LS373:8D锁存器;⑦27C64:EEPROM存储器。

2.放置元器件3.放置电源和地4.连线5.元器件属性设置6.电气检测三、源程序设计、生成目标代码文件1.流程图2.源程序设计(1)通过菜单“sourc e→Build All”编译汇编源程序,生成目标代码文件。

若编译失败,可对程序进行修改调试直至汇编成功。

(1)加载单片机目标代码文件对AT89C51单片机先右击后左击,打开其属性编辑窗口,在“Program File”栏中添加目标代码文件2764.HEX;在“Clock Frequency”栏中输入晶振频率为120HZ。

(2)加载27C64目标代码文件对2764先右击后左击,打开其属性编辑窗口,在映像文件“Image File”栏中输入外ROM程序的目标代码文件P2764.HEX。

四、PROTEUS仿真1.加载目标代码文件2.仿真单击按钮,启动仿真。

启动仿真后,因单片机的EA脚接电源,从单片机内ROM地址0H开始执行指令LJMP 1000H。

因内ROM的最大地址为0FFFH,而外ROM 27C64的地址从0H到1FFFH,当指令地址大于0FFFH时就自动转到外ROM中去执行程序,所以执行LJMP 1000H是跳转到外ROM 27C64的地址1000H处执行外ROM 27C64中的程序。

51单片机的组成

51单片机的组成

51单片机的组成51单片机的组成51单片机是一种非常普及的单片机,其名字来源于其指令集中的51条指令。

51单片机的组成主要包括芯片内部逻辑设计、存储、外设及与外部器件通信等几个部分。

1. 芯片内部逻辑设计51单片机内部逻辑设计是由微控制器内核、地址总线、数据总线、控制总线、时钟电路等几部分构成的。

微控制器内核是整个51单片机的核心。

它包含一个CPU及其指令集、寄存器、标志寄存器以及一些特殊功能寄存器。

地址总线用于指定程序和数据在存储器中的位置,地址总线的宽度为16位,最大抵达到2^16=65536,即可以对64K的存储空间进行寻址。

数据总线用于CPU与其他器件之间的数据传送,数据总线的宽度为8位,即每次可以传送一个字节大小的数据。

控制总线用于传送指南信号,包括读写控制信号、中断控制信号等。

时钟电路为51单片机提供了一个系统时钟,时钟的频率可以通过输入时钟信号的频率分频器来调节。

2. 存储51单片机中有很多存储器,比如程序存储器(ROM)、数据存储器(RAM)和非易失性存储器(EEPROM)等。

ROM是51单片机存储程序的地方,用于存放CPU指令和程序数据。

ROM一般是只读存储器,无法在运行中写入和修改。

程序存储器的大小为2K到64K。

RAM是51单片机存储数据的地方,用于存放程序运行中的数据、变量和寄存器的值等。

RAM的大小一般在128字节到8K之间,一般只存储运行时的数据。

EEPROM是一种非易失性存储器,用于持久存储用户程序和数据。

EEPROM可以使用电子擦除或编程器写入,而且数据不会因为断电而丢失。

3. 外设51单片机的外设包括IO口、定时器、串口、中断控制器、ADC、DAC等。

它们扩展了51单片机的应用。

IO口(Input Output Port)是外设中最简单也是最常用的一种外设,通过IO口,51单片机可以与外部器件进行交互,比如控制电器或读取传感器的值等。

定时器是一种定时功能外设,可以实现定时、计数和PWM等功能,用于控制系统时间和各种周期性动作。

STC单片机内部EEPROM的应用

STC单片机内部EEPROM的应用

ISP_IAP_enable()?/* 打开IAP 功能*/
for(i=0?i<len?i++)
{
/* 写一个字节*/
ISP_ADDRH=(unsigned char)(in_addr >> 8)?
ISP_TRIG=0xb9?/* 触发ISP_IAP 命令字节2 */
_nop_()?
}
/*
字节读
*/
unsigned char byte_read(unsigned int byte_addr)
{
ISP_ADDRH=(unsigned char)(byte_addr>>8)? /* 地址赋值*/
stc单片机EEPROM读写(一)
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)
D7 D6 D5 D4 D3 D2 D1 D0
ISPEN SWBS SWRST - - WT2 WT1 WT0
启动到ISP 区或用户程序区,这在“STC 单片机自动下载”一节,亦有所应用。
如:
ISP_CONTR=0x60? 则可以实现从用户应用程序区软件复位到ISP 程序区开始运行

常用串行EEPROM的编程应用

常用串行EEPROM的编程应用

常⽤串⾏EEPROM的编程应⽤常⽤串⾏EEPROM的编程应⽤(⼀)作者:温正伟原载:⽆线电本⽂所提供的实例程序:cdle070002.rarEEPROM是"Electrically Erasable Programmable Read-only"(电可擦写可编程只读存储器)的缩写,EEPROM 在正常情况下和EPROM⼀样,可以在掉电的情况下保存数据,所不同的是它可以在特定引脚上施加特定电压或使⽤特定的总线擦写命令就可以在在线的情况下⽅便完成数据的擦除和写⼊,这使EEPROM被⽤于⼴阔的的消费者范围,如:汽车、电信、医疗、⼯业和个⼈计算机相关的市场,主要⽤于存储个⼈数据和配置/调整数据。

EEPROM⼜分并⾏EEPROM和串⾏EEPROM,并⾏EEPROM器件虽然有很快的读写的速度,但要使⽤很多的电路引脚。

串⾏EEPROM器件功能上和并⾏EEPROM基本相同,提供更少的引脚数、更⼩的封装、更低的电压和更低的功耗,是现在使⽤的⾮易失性存储器中灵活性最⾼的类型。

串⾏EEPROM按总线分,常⽤的有I2C,SPI,Microwire总线。

本⽂将介绍这三种总线连接单⽚机的编程⽅法。

I2C总线I2C总线(Inter Integrated Circuit内部集成电路总线)是两线式串⾏总线,仅需要时钟和数据两根线就可以进⾏数据传输,仅需要占⽤微处理器的2个IO引脚,使⽤时⼗分⽅便。

I2C总线还可以在同⼀总线上挂多个器件,每个器件可以有⾃⼰的器件地址,读写操作时需要先发送器件地址,该地址的器件得到确认后便执⾏相应的操作,⽽在同⼀总线上的其它器件不做响应,称之为器件寻址,这个原理就像我们打电话的原理相当。

I2C总线产⽣80年代,由PHLIPS公司开发,早期多⽤于⾳频和视频设备,如今I2C总线的器件和设备已多不胜数。

最常见的采⽤I2C总线的EEPROM也已被⼴泛使⽤于各种家电、⼯业及通信设备中,主要⽤于保存设备所需要的配置数据、采集数据及程序等。

51单片机内部EEPROM读写

51单片机内部EEPROM读写

51单⽚机内部EEPROM读写#include <reg52.h>#include <intrins.h>//定义类型,⽅便代码移植typedef unsigned char UINT8;typedef unsigned int UINT16;typedef unsigned long UINT32;typedef char INT8;typedef int INT16;typedef long INT32;static UINT8 i=0;/*定义寄存器 ISP*/sfr ISP_DATA= 0xe2; // Flash数据寄存器sfr ISP_ADDRH= 0xe3;// Flash⾼字节地址寄存器sfr ISP_ADDRL= 0xe4;// Flash低字节地址寄存器sfr ISP_CMD= 0xe5;// Flash命令模式寄存器sfr ISP_TRIG= 0xe6;// Flash命令触发寄存器sfr ISP_CONTR= 0xe7;// ISP/IAP 控制寄存器#define NOP() _nop_()#define EEPROM_START_ADDRESS 0X2000#define LED_PORT P2//微秒级延时void DelayNus(UINT16 t){UINT16 d=0;d=t;do{NOP();}while(--d > 0);}//毫秒级延时void DelayNms(UINT16 t){do{DelayNus(1000);}while(--t > 0);}//EEPROM使能void EEPROMEnable(void){ISP_CONTR=0x81;//使能并设置好等待时间}//EEPROM禁⽤void EEPROMDisable(void){ISP_CONTR=0x00;//禁⽌EEPROMISP_CMD = 0X00;//⽆ISP操作ISP_TRIG = 0X00;//清零ISP_ADDRH = 0X00;//清零ISP_ADDRL = 0X00;//清零}//eeprom 设置读写地址(相对地址)void EEPROMSetAddress(UINT16 addr){addr+=EEPROM_START_ADDRESS;//初始化地址ISP_ADDRH=(UINT8)(addr>>8);//设置读写地址⾼字节ISP_ADDRL=(UINT8) addr; //设置读写地址低字节}//EEPROM启动void EEPROMStart(void){ISP_TRIG=0x46;ISP_TRIG=0xB9;}//EEPROM读取单个字节UINT8 EEPROMReadByte(UINT16 addr){ISP_DATA=0X00;ISP_CMD=0X01;EEPROMEnable();EEPROMSetAddress(addr);EEPROMStart();DelayNus(10);//读取⼀个字节需要10usEEPROMDisable();return (ISP_DATA);}//EEPROM写⼊单个字节UINT8 EEPROMWriteByte(UINT16 addr,UINT8 byte) {EEPROMEnable();ISP_CMD=0X02;EEPROMSetAddress(addr);ISP_DATA=byte;EEPROMStart();DelayNus(60);EEPROMDisable();}//EEPROM扇区擦除UINT8 EEPROMSectorErase(UINT16 addr){ISP_CMD=0X03;EEPROMEnable();EEPROMSetAddress(addr);EEPROMStart();DelayNus(10);//EEPROMDisable();}void main(void){EEPROMSectorErase(0);EEPROMWriteByte(0,0x0f);i=EEPROMReadByte(0);LED_PORT = i;while(1);}现象:。

51单片机原理及应用

51单片机原理及应用

51单片机原理及应用51单片机是一种常见的微控制器,以其高性能和广泛应用而受到广大工程师的青睐。

本文将介绍51单片机的原理和应用。

51单片机的原理可以从其硬件结构和工作流程两方面来讲解。

首先是硬件结构。

51单片机包括中央处理器(CPU),存储器(包括存储器管理单元、内部RAM和ROM),输入/输出端口(I/O口),定时器/计数器,串行通信接口等。

CPU是整个系统的核心,负责指令的执行和数据的处理。

存储器用于存储程序和数据,其中ROM存储程序代码,RAM用于暂存数据。

I/O口用于与外部设备进行信息交互。

定时器/计数器用于产生精确的时间延迟和计数操作。

串行通信接口用于与其他设备进行数据传输。

其次是工作流程。

51单片机的工作流程一般包括初始化、输入/输出控制和运算处理三个阶段。

初始化阶段主要是对各个模块的配置和初始化,例如设置时钟频率、串口波特率等。

输入/输出控制阶段通过读取输入设备(如按键、传感器等)的状态,控制外部设备(如LED灯、马达等)的状态。

运算处理阶段通过执行指令,对数据进行处理和计算。

至于应用方面,51单片机具有广泛的应用领域。

主要应用包括控制系统、嵌入式系统、通信系统、工业自动化等。

在控制系统中,51单片机可以用于控制家电、机器人、机械设备等。

在嵌入式系统中,51单片机可以应用于智能家居、智能交通、智能仪表等。

在通信系统中,51单片机可以用于电话、网络和无线通信设备等。

在工业自动化中,51单片机可以用于工厂生产线控制、仪器仪表控制等。

总结起来,51单片机的原理和应用都是非常重要的。

通过了解其硬件结构和工作流程,可以更好地理解其工作原理。

而了解其应用领域,则可以为工程师在实际项目中的选择和设计提供参考。

51单片机的基本参数

51单片机的基本参数

51单片机的基本参数单片机是一种集成电路芯片,其中包含了微处理器、存储器、输入输出接口等功能模块。

51单片机作为一种广泛应用于嵌入式系统开发的芯片,其基本参数对于开发者而言具有重要意义。

本文将介绍51单片机的基本参数,帮助读者更好地了解和应用该芯片。

1. 集成的微处理器51单片机,又称为8051单片机,其集成了一颗8位的微处理器,采用哈佛体系结构。

该微处理器具备高效的指令集和强大的运算能力,适用于各种嵌入式应用场景。

2. 存储器容量51单片机内部集成了多种类型的存储器,包括ROM、RAM和EEPROM。

其中,ROM用于存储程序代码,RAM用于存储数据,EEPROM用于存储不易丢失的配置信息。

具体的容量因型号而异,可以有2KB、4KB、8KB、16KB等不同的选项。

3. 时钟频率51单片机的工作频率对于其性能和响应速度至关重要。

不同型号的51单片机有不同的工作频率范围,常见的有12MHz、16MHz、20MHz等选项,开发者可以根据实际需求选择适合的时钟频率。

4. 输入输出接口51单片机内部集成了丰富的IO口,用于实现与外部设备的数据交互。

其中,一部分IO口可配置为输入模式,另一部分可配置为输出模式。

这些输入输出接口的数量和类型因型号而异,可以根据具体需求进行选择和配置。

5. 通信接口为了满足与其他设备的通信需求,51单片机通常支持多种通信接口,如串口、SPI和I2C等。

这些接口可以通过配置使用不同的通信协议,方便与其他设备进行数据交换和通信。

6. 中断系统中断是51单片机实现多任务处理和异步事件响应的关键机制。

51单片机具备灵活的中断系统,支持多级中断和外部中断。

开发者可以通过编程设置中断优先级和中断响应函数,实现对外部事件的快速响应。

7. 电压和功耗51单片机通常工作在3.3V或5V的电压下,不同型号的芯片可能有略微差异。

此外,功耗也是需要考虑的因素,低功耗设计可以延长系统的使用寿命和电池续航时间。

第1章 MCS-51单片机结构

第1章  MCS-51单片机结构

第1章 MCS-51单片机结构
1.2.2
外部数据存储器
用于存放随机读写的数据。 外部I/O口地址影像区。 MCS-51单片机的外部数据存储器和外部I/O口实行统一编址 , 并使用相同的RD WR作选通控制信号,均使用 MOVX 指令访 问。 MCS-51 单片机最多可扩展64KB外部数据存储器
1.2.3 内部数据储存器
MCS-51仅能实现两个8位二进 制数的算术逻辑运算!
第1章 MCS-51单片机结构
2. 控制器
(1)组成: 定时与控制部件,复位电路,程序计数器 (PC),指令寄存器、指令译码器,数据指针 (DPTR),堆栈指针(SP)等 (2)作用:产生计算机所需的时序,控制程序自动执行。
外RAM, EPROM, 外I/O CPU
第1章 MCS-51单片机结构
程序存储器中的几个特殊地址的使用:
地址
0000H 0003H 000BH 0013H 001BH 0023H
用途
复位操作后的程序入口 外部中断0服务程序入口 定时器0中断服务程序入口 外部中断1服务程序入口 定时器1中断服务程序入口 串行口中断服务程序入口
串行口中断入口 T1中断入口 T0中断入口 中断入口 INT1
在8051/8751/89C51 片内,分别内置最低地 址空间的4KB ROM/EPROM程序储存器(内部程序储 存器),而在8031片内,则无内部程序储存器, 必须外部扩展EPROM。MCS-51单片机中64KB内、外 程序储存器的地址是统一编排的。
第1章 MCS-51单片机结构
8031单片机无内部程序存储器,地址从0000H~ EA 应始终接地, FFFFH都是外部程序存储空间。 对于内部有ROM的单片机(51、52系列) , EA 引脚接高电平,使程序从内部ROM开始执行。当PC 值超出内部ROM的容量时,会自动转向外部程序存 储器空间。外部程序存储器地址空间为1000H~ FFFFH。 访问程序存储器使用MOVC指令。 单片机执行程序时由PC 指示地址, 复位时PC内 容为0000H, 由此, 程序必须从0号单元开始存放.

单片机课程设计-IIC总线式EEPROM存储器应用设计

单片机课程设计-IIC总线式EEPROM存储器应用设计

目录1 设计要求 (2)2 设计目的 (2)3 器件EEPROM的介绍 (2)3.1 EEPROM简介 (2)3.2 EEPROM24XX系列功能概述 (3)4 IIC协议的介绍 (3)4.1 IIC协议总线特征 (3)4.2 IIC协议工作原理 (3)4.3 IIC协议总线基本状态 (3)4.4 寻址约定 (5)5 EEPROM读写功能实现 (5)5.1写操作 (5)5.1.1 字节写操作 (6)5.1.2 页写入操作 (6)5.2 确认查询 (7)5.3 读操作 (7)5.3.1 当前地址的读操作 (8)5.3.2 随机读操作 (8)5.3.3 连续读操作 (9)6 具体设计过程 (10)6.1 程序流程设计 (10)6.2执行结果 (13)6.3 系统组成模块结构及功能 (15)6.3.1 函数定义 (15)6.3.2 主函数设计 (17)6.3.3 源程序 (19)7 设计心得体会 (27)8 参考文献 (28)IIC总线式EEPROM存储器应用设计1 设计要求利用51单片机和IIC总线式EEPROM芯片24C02进行存储器设计。

按下KEYWRITE1键,向24C02存储器写入数据1和2;按下KEYWRITE2键,向24C02存储器写入数据3和4;按下KEYREAD键,从24C02存储器读出刚写入的数据数据;写入数据显示在左两位,读出数据显示在右两位。

如图1.1所示。

图1.1 系统仿真运行图2 设计目的通过设计,了解IIC协议的基本原理,并对EEPROM读写功能的实现有个系统的概念,对其实现过程比较清楚。

同时,在设计中,巩固我们所学的理论知识。

3 器件EEPROM的介绍3.1 EEPROM简介EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。

EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。

51单片机读写内部EEPROM详解

51单片机读写内部EEPROM详解
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
特殊功能寄存器声明****************
sfr ISP_DATA=0xe2;
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
uchar dat;
ISP_CONTR=0x81;
ISP_CMD= 0x01;/用户可以对"Data Flash/EEPROM区"进行字节读ISP_ADDRL = addr;
ISP_ADDRH=addr>>8;
EA= 0;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
dat=ISP_DATA;
uchar dcx(uint addr);
voidQ0();
/*
*/
/*
void main(void)
uchar V;
V = dcx(0x2002);//开机读取EEPROM区2002h数据,还原关电前LED的亮灭 状况
if(V==2){LED1=0;LED2=1;}
else if(V==6){LED1=0;LED2=0;}
验证第二、第三个程序时需按程序内主程序中的操作说明进行烧录单片
机,以验证是否成功操作单片机内部EEPROM。
程序1:
/***************************************************************
作品:EEP ROM实验,开机还原关电前LED的亮灭状况
ISP_ADDRH=addr>>8;

51单片机IO口应用详解

51单片机IO口应用详解

51单片机IO口应用详解MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照单片机引脚图:这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。

P0口有三个功能:1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:其内部有上拉电阻。

P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

ALE 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。

参见图2(8051扩展2KB EEPROM电路,在图中ALE与4LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。

由于ALE是以晶振六分之一的固定频率输出的正脉冲,当系统中未使用外部存储器时,ALE脚也会有六分之一的固定频率输出,因此可作为外部时钟或外部定时脉冲使用。

51单片机的基本结构及其主要组成部分

51单片机的基本结构及其主要组成部分

51单片机的基本结构及其主要组成部分51单片机是一种非常常见的嵌入式微控制器芯片,其被广泛应用于各种电子设备中。

其基本结构及其主要组成部分既是设计开发嵌入式系统的基础,也是学习51单片机的关键。

一、51单片机基本结构51单片机的基本结构主要包括存储器、CPU、输入输出接口以及时钟电路四个部分。

1. 存储器存储器是51单片机系统的一个重要组成部分。

其中包括的存储器主要有ROM、RAM和EEPROM,ROM用来存储程序代码,RAM用来存储变量和中间结果,EEPROM则可实现数据的存储。

2. CPUCPU是整个51单片机系统的核心部分,其主要功能是执行指令,负责程序的控制和各种数据的处理。

在51单片机中,CPU主要通过时钟信号不断地获取并执行程序指令。

3. 输入输出接口输入输出接口是将51单片机与外界连接的一个重要部分,也是实现嵌入式系统功能的关键。

其中包括并口、串口、SPI接口、I2C接口等等,用于处理外设的输入和输出信号。

4. 时钟电路51单片机的时钟电路用来提供时钟信号给CPU,并且用于控制各种外围设备和CPU执行指令的同步。

二、51单片机主要组成部分1. 程序存储器程序存储器是指ROM,其存储了单片机的程序代码。

在51单片机中,程序存储器可以分为两种类型:OTP(一次可编程)ROM和Flash ROM (可被反复擦写)。

在OTP ROM中,编程后的程序无法修改,而Flash ROM则可被反复擦写。

2. 数据存储器数据存储器是指RAM和EEPROM,用来存储程序中的变量和中间结果。

其中RAM用来存储临时数据,EEPROM则用于数据的存储,这些数据在掉电情况下也不会丢失。

3. 中央处理器中央处理器(CPU)是单片机最核心的部分,它负责执行程序中的指令并且控制其它硬件设备的工作。

4. 输入输出接口输入输出接口是将单片机与外部设备相互连接的途径。

在这些接口中,包括并口、串口、SPI、I2C等。

这些接口是为特定的设备开发的,包括LCD显示器、键盘及调制解调器等。

51单片机原理及应用

51单片机原理及应用

51单片机原理及应用51单片机(AT89C51)是一种高性能、低功耗的CMOS8位微控制器,它集成了CPU核心、ROM、RAM、I/O端口、定时器/计数器、串行通信接口等功能模块。

它是基于哈佛结构的架构,具有较高的运行速度和强大的功能。

1.CPU核心:51单片机采用了8051型CPU核心,其指令集丰富,包括基本的算数逻辑操作、数据传输操作、位操作以及控制操作等。

2.存储器:51单片机内部带有4KB的可编程ROM,用于存放程序代码;同时还有128字节的RAM用于存放数据。

3.I/O端口:51单片机共有四组I/O端口,分别为P0、P1、P2和P3,每个端口都是8位的双向口。

4. 定时器/计数器:51单片机内部带有两个独立定时器/计数器,分别为Timer 0和Timer 1,它们可以用于计时、定时和外部计数等操作。

5.串行通信接口:51单片机内部带有一个串行通信接口(UART),可以实现串行数据的收发操作。

1.嵌入式系统开发:51单片机具有强大的IO口和丰富的功能模块,可用于开发各种嵌入式系统,如家电控制、电子锁、智能家居等。

2.工业自动化:51单片机广泛应用于工业领域,可以实现各种传感器的数据采集、控制执行器动作、工业过程监控等功能。

3.车载电子:51单片机可以用于车辆电子系统的设计与控制,如车载仪表盘、车内电子设备控制、车载导航系统等。

4.家庭电子:51单片机可以用于各种家庭电子产品的设计与控制,如电视、音响、游戏机等。

5.学术研究:51单片机常用于电子、计算机等相关专业的教学与研究,学生可以通过对其原理及应用的学习,提高自己的电子设计与开发能力。

需要注意的是,由于51单片机已经推出多年,技术相对较老,目前市场逐渐被更先进的32位单片机所取代。

但由于其成熟可靠、易学易用的特点,仍然在一些特定领域得到广泛应用。

总之,51单片机具有强大的功能和广泛的应用领域,熟悉其原理及应用对于掌握嵌入式系统的设计和开发具有重要意义。

MCS51单片机的引脚及内部结构

MCS51单片机的引脚及内部结构
﹡P3口(P3.0~P3.7) :8位准双向并行I/O接口。 P3口除 了具有通用I/O口的功能外,同时它的每一个引脚还具有第 二功能。
P3口各引脚对应的第二功能
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
RXD TXD /INT0 /INT1 T0 T1
/WR /RD
PSW各位定义
D7H D6H D5H D4H D3H D2H D1H D0H CY AC F0 RS1 RS0 OV — P
(1)CY(PSW.7):进位标志位 (2)AC(PSW.6):辅助进位标志位。 (3)F0 (PSW.5):用户标志位。 (4)RS1、RS0(PSW.4、PSW.3):工作寄存器组选择位。 用于选择CPU当前使用寄存器组。
(二)内部数据存储器低128字节
内部数据存储器低128字节按其用途划分为三个区 •工作寄存器区 •位寻址区 •用户RAM区
片内RAM低128字节的配置
30H~7FH 20H~2FH 18H~1FH 10H~17H 08H~0FH 00H~07H
用户RAM区(数据缓冲区) 位寻址区(00H~7FH) 工作寄存器区3区(R7~R0) 工作寄存器区2区(R7~R0) 工作寄存器区1区(R7~R0) 工作寄存器区0区(R7~R0)
单片机硬件系统
一、MCS-51单片机的引脚及内部结构
(一)89C51单片机的引脚
1、电源引脚: VCC:外接+5V;GND:电源地线。 2、时钟引脚 XTAL1、XTAL2为内部振荡器的两条引出线. 3、控制引脚 (1)ALE/PROG:地址锁存控制信号/编程脉冲输 入端 ﹡ ALE:在系统扩展时,ALE用于控制P0口输出的低 8位地址锁存,以实现低8为地址和数据的隔离。 ﹡ PROG:在EEPROM或EPROM编程期间,该引脚 用来输入一个编程脉冲。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用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数据寄存器11111111ISP_ADDRH E3h Flash高字节地址寄存器0000 0000ISP_ADDRL E4h Flash低字节地址寄存器0000 0000ISP_CMD E5h Flash命令模式寄存器----------MS2MS1MS0xxxx x000ISP_TRIG E6h Flash命令触发寄存器xxxx xxxx ISP_CONTR E7h ISP/IAP 控制寄存器ISPEN SWBS SWRST----WT2WT1WT0000x 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寄存器模式设置D7D6D5D4D3D2D1D0模式选择保留命令选择----------000待机模式,无ISP操作----------001对用户的应用程序flash区及数据flash区字节读----------010对用户的应用程序flash区及数据flash区字节编程----------011对用户的应用程序flash区及数据flash区扇区擦除程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除;程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除。

STC89C51RC/RD+系列单片机出厂时已经固化有ISP引导码,并设置为上电复位进入I SP程序区,并且出厂时就已完全加密。

ISP_TRIG:ISP/IAP操作时的命令触发寄存器。

在ISPEN(ISP_CONTR.7) =1时,对ISP_TRIG 先写入46h,再写入B9h,ISP/IAP命令才会生效。

STC89C52RC,STC89LE52RC单片机内部可用Data Flash(EEPROM)的地址如表3所示,其它型号单片机请查阅相关资料。

表3 STC89C52RC、STC89LE52RC单片机内部EEPROM地址表第一扇区第二扇区第三扇区第四扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH 第五扇区第六扇区第七扇区第八扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH 每个扇区为512字节,建议大家在写程序时,将同一次修改的数据放在同一个扇区,方便修改,因为在执行擦除命令时,一次最少要擦除一个扇区的数据,每次在更新数据前都必须要擦除原数据方可重新写入新数据,不能直接在原来数据基础上更新内容。

下面通过一个例子来讲解STC系列单片机EEPROM的具体用法。

【例】:在实验板上实现如下描述,操作STC单片机自带的EEPROM,存储一组按秒递增的二位数据,并且将数据实时显示在数码管上,数据每变化一次就往EEPROM中写入一次,当关闭实验板电源,再次开启电源时,从EEPROM中读取先前存储的数据,接着递增显示。

#include <intrins.h>#include <reg52.h>//52系列单片机头文件#define uchar unsigned char#define uint unsigned int#define RdCommand 0x01 //定义ISP的操作命令#define PrgCommand 0x02#define EraseCommand0x03#define Error 1#define Ok 0#define WaitTime 0x01 //定义CPU的等待时间sfr ISP_DA TA=0xe2; //寄存器申明sfr ISP_ADDRH=0xe3;sfr ISP_ADDRL=0xe4;sfr ISP_CMD=0xe5;sfr ISP_TRIG=0xe6;sfr ISP_CONTR=0xe7;sbit dula=P2^6; //申明U1锁存器的锁存端sbit wela=P2^7; //申明U2锁存器的锁存端uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar num;void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)//i=xms即延时约xms毫秒for(j=110;j>0;j--);}void display(uchar shi,ucharge) //显示子函数{dula=1;P0=table[shi]; //送十位段选数据dula=0;P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时wela=1; //原来段选数据通过位选锁存器造成混乱P0=0xfe; //送位选数据wela=0;delayms(5); //延时dula=1;P0=table[ge]; //送个位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);}/* ================ 打开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;EA = 1; /* 开中断*/}/* ================ 公用的触发代码==================== */void ISPgoon(void){ISP_IAP_enable(); /*打开ISP,IAP 功能*/ISP_TRIG = 0x46; /* 触发ISP_IAP命令字节1 */ISP_TRIG = 0xb9; /* 触发ISP_IAP命令字节2 */_nop_();}/*==================== 字节读========================*/unsigned charbyte_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_DA TA); /* 返回读到的数据*/}/* ================== 扇区擦除======================== */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 intbyte_addr, unsigned charoriginal_data){ISP_ADDRH = (unsignedchar)(byte_addr >> 8); /* 取地址*/ISP_ADDRL = (unsignedchar)(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 a,b,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(a,b);}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;}分析:程序中关健部分已经用注释加以说明,请读者编译程序下载后观察实际演示效果。

相关文档
最新文档