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

软件开发大郭
0 评论
/
3 阅读
/
1565 字
10 2023-07

下面给出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 ;程序结束
    暂无数据