铁电存储器FM24C16的页面写和任意字节读汇编程序

编程实验

72人已加入

描述

下面给出FM24C16的页面写和任意字节读汇编子程序。程序经过应用验证,效果良好(为保证稳定性,可以在相应地方加入空语句以延时)。

页面写子程序:

PAGE-WR: ACALL START_BIT

MOV A,#10100000B

MOV R7,#4

ACALL SHFTO

;SHFTO为送位子程序,以上3行送

1010到FM24C16

MOV A,#20H

MOV R7,#3

ACALL SHFTO

;以上3行确定写FM24C16的00l页

MOV A,#00H

MOV R7,#1

ACALL SHFTO ;以上3行送写控制位0

ACALL SlAVE_ACK

;SLAVE-ACK为从应答子程序,在此检测

从应答位

MOV A,#00H

MOV R7,#8

ACALL SHFTO

;以上3行确定写入数据首地址为00H

ACALLSLAVE-ACK ;检测从应答位

MOV R0,#00H ;R0中为被写人数据

所在单元首地址

MOV R4,#7FH ;R4中为写入字节数

(现为256B)

NEXT-DATA:MOV A,@R0 ;调入第1个写入数据

INC R0 ;R0指向第2个数据所在单元地址

MOV R7,#8

ACALL SHFTO;写入数据

ACALL SLAVE-ACK ;检测从应答位

DJNZ R4,NEXT-DATA

;循环写入下一个字节数据

ACALL STOP-BIT

;STOP-BIT为停止位,结束写操作(此处没有写延时等待)

RET ;返回,程序结束

读任意地址子程序:

SELECT-RD:ACALL START-BIT

ACALL START-BIT

MOV A,#10100000B

MOV R7,#4

ACALL SHFTO

MOV A,#20H

MOV R7,#3

ACALL SHFTO

MOV A,#0FOH

MOV R7,#1

ACALL SHFTO

ACALL SlAVE-ACK

MOV R5,#00H

MOV R7,#8

ACALL SHFTO

ACALL SlAVE-ACK

;以上为伪写,确定读FM24C16的001

00H单元数据

ACALL START-BIT

MOV A,#10100000B

MOV R7,#4

ACALL SHFTO

MOV A,#20H

MOV R7,#3

ACALL SHFTO

MOV A,#0FOH

MOV R7,#1

ACALL SHFTO ;上面3行送读控制位1

ACALL SlAVE-ACK

MOV R5,#00H ;清R5,以存储读出数据

MOV R7,#8 ;R7作读出位记数器

CLOCK8: SETB SCL

MOV C,SDA

CLR SCL

MOV A,R5

RLC A

MOV R5,A

;以上6行读出FM24C16送来的1位

DJNZ R7,CLOCK8 ;循环读出1B数据

ACALL NO_ACK

;NO_ACK为无需应答位子程序

ACLL STOP_BIT ;停止

RET ;程序结束

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分