📄 写入.asm
字号:
SCL EQU P3.6
SDA EQU P2.7 ;端口定义
ORG 0000H
AJMP START
ORG 0100H
START:
mov 50h,#01h
mov 51h,#02h
mov 52h,#04h
mov 53h,#08h
mov 54h,#04h
mov 55h,#02h
MOV R6,#00H ;写入字节地址的设置
LCALL XXX ;写入第一页(8个字节的数据,24C01/02一次最多只能写 8 个字节!!!)
LCALL DELAY ;调用大概 1mS 延时,此延时程序非常必要!!!
LCALL DELAY
LCALL DELAY
LCALL DELAY
;--------------------------------写入数据//
XXX:
LCALL START_IC ;发开始信号
MOV A,#0A0H ;写入器件地址设置为 A0H
LCALL WR_BYTE
MOV A,R6 ;写入字节地址
LCALL WR_BYTE
LCALL WRITE_BYTE ;写入第一页的数据
LCALL STOP_IC
RET
;*******************
WRITE_BYTE: ;字节写入模式写数据(WRITE_BYTE)
MOV A,50H
LCALL WR_BYTE ;写入数据
MOV A,51H
LCALL WR_BYTE ;写入数据
MOV A,52H
LCALL WR_BYTE ;写入数据
MOV A,53H
LCALL WR_BYTE ;写入数据
MOV A,54H
LCALL WR_BYTE ;写入数据
MOV A,55H
LCALL WR_BYTE ;写入数据
RET
;----------------------------------------------------------------------
;*******************************************************************************
;*********************************以下为各功能子程序****************************
;*******************************************************************************
;-------------------------------------------------------------------
;-----------------------------开始条件------------------------------
START_IC:
CLR SCL ; SCL低电平时才允许SDA更改
NOP ;加入空指令延时以确保信号可靠
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
NOP
RET
;----------------------------------------------------------------------------------
;-------------------写一字节数据到EEPROM,程序中已包含应答子程序!!!-----------------
;----------------------------------------------------------------------------------
WR_BYTE:
MOV R5,#08 ;一字节8位数据
CLR SCL
NOP
NOP
WR_BYTE1:RLC A ;带进位位左移,A.8->C
MOV SDA,C ; SCL低电平时改变SDA上的数据
NOP
SETB SCL ;拉高SCL把数据发送出去
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R5,WR_BYTE1; 依次发送A中的8位数据
SETB SDA
SETB SCL
JB SDA,$ ; 等待IC卡确认信号
CLR SCL
NOP
nop
RET
;---------------------------------------------------------------------------
;--------------------------从EEPROM读一字节(RD_BYTE)//2005.06.27 ---------
;---------------------------------------------------------------------------
RD_BYTE:
MOV R5,#08
SETB SDA;设备SDA为读状态
CLR A;清空A寄存器
RD_BYTE1:
MOV C,SDA;读一位数据到进位位
RLC A;左移数据到A.0
SETB SCL
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R5,RD_BYTE1;依次读出8位数据到A中
RET;无应答信号
;利用该程序可将读出的数据存放在A中。需要注意的是:读数据的器件不是通过确认状态来应答的,
;而是随后产生一个停止状态。
;-----------------------------------------------------------------------
;------------------------------------停止条件
STOP_IC:
CLR SCL
NOP
NOP
CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
NOP
NOP
CLR SDA
RET
;-------------------------------------------------------------------------
DELAY: MOV R4,#2;延时程序,延时1000微秒= 1mS FOSC=6MHz
DD3:MOV R5,#124
DJNZ R5,$
DJNZ R4,DD3
RET
DELAY1: MOV R4,#10H ;一秒延迟子程序
DELAY11:MOV R5,#255
DELAY41:MOV R6,#0FFH
DJNZ R6,$
DJNZ R5,DELAY41
DJNZ R4,DELAY11
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -