导航:首页 > 操作系统 > 51单片机读写实例

51单片机读写实例

发布时间:2025-03-08 14:27:07

⑴ 51单片机怎么使用内部EEPROM,上电次数、断电记忆,怎么实现计到最大值6千次。

STC 很多都有内部EEPROM,如11或12系列的STC单片机,读写内部EEPROM有一定限制,比如写,必须先擦除再写,而且一次必须擦除一个扇区,所以还是很麻烦的,只能覆盖。

要实兆袜现你的功能,一点问题没有,上电后先读取上次的计数值,再加1重新写进去就可以了。
以下是EEPROM读写子程序供参考:
;------------------------------------------------
;读一字节,调用前需打开 IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
IAP_READ:
MOV IAP_CONTR,#ENABLE_IAP ;打开 IAP 功能, 设置 Flash 操作等待时间
MOV IAP_CMD,#ISP_IAP_BYTE_READ ;设置为IAP/ISP/EEPROM字节读模式命令
MOV IAP_ADDRH,DPH ;设置目标单元地址的高8位地址
MOV IAP_ADDRL,DPL ;设置目标单元地址的低8位地址
;CLR EA
MOV IAP_TRIG,#5AH ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
MOV IAP_TRIG,#0A5H ;送完A5h后,ISP/IAP命令立即被触发起动
NOP
MOV A,IAP_DATA ;读出的数据在IAP_DATA单元中,送入累加器A
;SETB EA
LCALL IAP_Disable ;关闭 IAP 功能, 清相关的特殊功能寄存器,使CPU处于安全状态,
;一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
RET
;------------------------------------------------
;字节编程,散闹调用前需打开 IAP 功能,入口:DPTR = 字节地址, A=须编程字节的数据
IAP_WRITE:
MOV IAP_CONTR,#ENABLE_IAP ;打开 IAP 功能, 设置 Flash 操作等待时间
MOV IAP_CMD,#ISP_IAP_BYTE_PROGRAM ;设置为IAP/ISP/EEPROM字节编程模式命令
MOV IAP_ADDRH,DPH ;设置目标单元地址的高8位地址
MOV IAP_ADDRL,DPL ;设置目标单元地址的低8位地址
MOV IAP_DATA,A ;要编程的数据先送进ISP_DATA寄存器
;CLR EA
MOV IAP_TRIG,#5AH ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
MOV IAP_TRIG,#0A5H ;送完A5h后,ISP/IAP命令立即被触发起动
NOP
;SETB EA
LCALL IAP_Disable ;关闭 IAP 功能, 清相关的特殊功能寄存器,使CPU处于安全状态,
;一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
RET
;------------------------------------------------
;擦除扇区, 入口:DPTR = 扇区地址
IAP_Erase:
MOV IAP_CONTR,#ENABLE_IAP ;打开 IAP 功能, 设置 Flash 操作等待时间
MOV IAP_CMD,#03H ;设置为IAP/ISP/EEPROM扇区擦除模式命令
MOV IAP_ADDRH,DPH ;设置目标单元地址的高8位地址
MOV IAP_ADDRL,DPL ;设置目标单元地址的低8位地址
;CLR EA
MOV IAP_TRIG,#5AH ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
MOV IAP_TRIG,#0A5H ;送完A5h后,ISP/IAP命令立即被触发起动
NOP
;SETB EA
LCALL IAP_Disable ;关闭 IAP 功能, 清相关的特殊功能寄存器,使CPU处于安全状态,
;一族掘激次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
RET
;------------------------------------------------
IAP_Disable:
;关闭 IAP 功能, 清相关的特殊功能寄存器,使CPU处于安全状态,
;一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
MOV IAP_CONTR,#0 ;关闭 IAP 功能
MOV IAP_CMD,#0 ;清命令寄存器,使命令寄存器无命令,此句可不用
MOV IAP_TRIG,#0 ;清命令触发寄存器,使命令触发寄存器无触发,此句可不用
MOV IAP_ADDRH,#0FFH ;送地址高字节单元为00,指向非EEPROM区
MOV IAP_ADDRL,#0FFH ;送地址低字节单元为00,防止误操作
RET

⑵ 怎么用c语言编程51单片机读写程序

编程代码如下:

ORG 0000H

MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值

MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值

MOV RO,#00H

LOOP: MOVX A, @DPTR .

MOVX @RO, A .

INC DPTR

INC RO

CJNE RO,#64H, LOOP

SJMP $

(2)51单片机读写实例扩展阅读

MCS-51单片机主要由下列部件组成:1个8位CPU;1个片内振荡器及时钟电路;4KB ROM程序存储器,256BRAM;21个特殊功能寄存器。

2个1 6位定时/计数器;4个8位并行I/O口及1个可编程全双工串行接口;可寻址64KB的外部程序存储器空间;可寻址64KB的外部数据存储器空间;5个中断源、两个优先级中断嵌套中断结构。

MCS-51单片机内部有两个16位可编程的定时/计数器,简称定时器0 (T0) 和定时器1 (T1) 。它们分别由方式寄存器TMOD、控制寄存器TCON和数据寄存器TH0、TLO, TH1、TL1组成。

低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中断源所中断;一种中断源(不管是高优先级还是低优先级) 一旦得到响应,与它同级的中断源不能再中断它。当同时收到几个同一优先级的中断时,响应哪一个中断源取决于内部查询顺序。

⑶ 51单片机内部EEPROM使用求教

在使用51单片机时,如果你不确定使用的具体型号,可以查阅单片机的数据手册,里面会有详细的操作时序介绍。针对STC15F4K系列单片机的EEPROM使用,以下是一个实例如何操作:

首先,进行初始化设置,比如配置引脚模式,开启IAP功能等:

#include"reg51.h" #include"intrins.h" typedefunsignedcharBYTE; typedefunsignedintWORD; //...初始化寄存器

接着,定义一些宏和函数,用于控制IAP操作:

#defineCMD_IDLE0 #defineCMD_READ1 #defineCMD_PROGRAM2 #defineCMD_ERASE3 //...延时函数和IAP操作函数

在主函数中,首先初始化系统配置,然后进行扇区擦除、数据编程和校验:

voidmain() { WORDi; P0M0=0x00; P0M1=0x00; P1M0=0x00; P1M1=0x00; P2M0=0x00; P2M1=0x00; P3M0=0x00; P3M1=0x00; P4M0=0x00; P4M1=0x00; P5M0=0x00; P5M1=0x00; P6M0=0x00; P6M1=0x00; P7M0=0x00; P7M1=0x00; P1=0xfe; InitUart(); Delay(10); IapEraseSector(IAP_ADDRESS); for(i=0;i<512;i++) { if(SendData(IapReadByte(IAP_ADDRESS+i))!=0xff) gotoError; } P1=0xf8; Delay(10); for(i=0;i<512;i++) { IapProgramByte(IAP_ADDRESS+i,(BYTE)i); } P1=0xf0; Delay(10); for(i=0;i<512;i++) { if(SendData(IapReadByte(IAP_ADDRESS+i))!=(BYTE)i) gotoError; } P1=0xf0; while(1); Error: P1&=0x7f; while(1); }

以上代码展示了如何通过IAP接口对EEPROM进行擦除、编程和校验操作。其中,Delay函数用于产生延时,IapIdle、IapReadByte、IapProgramByte和IapEraseSector函数分别用于关闭IAP功能、读取EEPROM数据、写入EEPROM数据和擦除EEPROM扇区。

初始化串口设置为8位可变波特率,并根据不同的URMD值选择不同的波特率生成模式。

发送数据函数SendData则用于通过串口发送数据,并等待发送完成。

⑷ 怎样读51单片机内程序

ISP_CMD指令设定为0000 001,意味着启动了从51单片机的flash区读取用户应用程序的过程。这一指令在编程中至关重要,因为它决定了如何安全、准确地读取存储在51单片机内部flash区和数据flash区的代码与数据。在进行这一操作时,需要确保单片机与编程器之间有正确的连接,以便顺利传输数据。

首先,需要确保单片机处于ISP(In-System Programming,即在线编程)模式。ISP模式允许用户在不拆除芯片的情况下进行编程和调试。完成硬件连接后,通过发送ISP_CMD指令0000 001,启动读取程序。这一指令告诉单片机准备开始从flash区读取数据。在读取过程中,单片机会将数据从flash区传输到编程器,编程器再将数据传输到计算机,从而实现程序的读取。

值得注意的是,在读取过程中,程序代码和数据会被逐一读取。程序代码通常存储在应用程序flash区,而数据则存储在数据flash区。确保从这两个区域分别读取数据,可以确保获取完整的应用程序和数据。在读取完成后,编程器将生成一个二进制文件,包含了从51单片机中读取的所有程序代码和数据。

此外,为了保证读取过程的顺利进行,还需要注意一些细节。例如,确保单片机的电源稳定,避免读取过程中的数据丢失或损坏。同时,还需要确保编程器与单片机之间的连接稳定,以减少数据传输中的错误。

总之,通过设置ISP_CMD指令为0000 001,可以有效地读取51单片机中的用户应用程序和数据。这一过程需要仔细操作,确保连接正确,电源稳定,以及数据传输的准确性。

阅读全文

与51单片机读写实例相关的资料

热点内容
谷歌阿里服务器放在什么地方 浏览:506
android静态内部类 浏览:389
进入spark命令 浏览:475
手机生产日期和编译时间 浏览:16
工程力学第四版答案pdf 浏览:219
androidparams参数 浏览:969
通信算法工程师女生 浏览:859
服务器可以刷什么 浏览:523
怎么用app转码 浏览:601
如何搭建可上传服务器 浏览:658
java类库文档 浏览:150
怎么在appstore换成美服 浏览:221
java获取linuxip 浏览:180
matlab压缩算法效率比较 浏览:967
张剑考研英语黄皮书pdf 浏览:896
如何解决安卓动态壁纸的卡顿 浏览:673
法语命令式接 浏览:427
APP服务器Java 浏览:998
压缩饼干工厂 浏览:418
加密安全性检验 浏览:516