⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 写入.asm

📁 24C02的读写操作,用汇编语言完成,在开发板上运行正常
💻 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 + -