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

📄 write24c02.asm

📁 基于AT89S51单片机读写RAM存储器24C02的汇编原程序。有详尽说明
💻 ASM
字号:
;=============================
;24c02的读写程序
;AUTHOR:LIXIN
;CREATE DATE:2004-5-23
;MODIFY DATE :2004-5-23

; ===================
BITCNT EQU 41H
SUBADR EQU 40H
SDA     BIT     P0.5
SCL     BIT     P0.4
ORG 00H
JMP MAIN
ORG 0100H
MAIN:
     MOV R7,#01010101B
     ACALL WRITE_24C02
     ACALL DELAY
     ACALL READ_24C02
     ;MOV P2,A
     MOV P3,A
     ACALL DELAY
     ;MOV P2,#0FFH
     MOV P3,#0FFH
     ACALL DELAY
     JMP MAIN
;===================================
DELAY:  MOV     R0,#0FFH
DELAY0: MOV     R1,#0FFH
DELAY1: NOP
        NOP
        NOP
        DJNZ    R1,DELAY1
        DJNZ    R0,DELAY0
        RET
;============================
WRITE_24C02:
            ACALL START     ;发送IC总线起始条件
            MOV A,#0A0H      ;24C02总线地址
            ACALL SENTBYTE   ;发送24C02器件总线地址
            JB F0,SENDRETURN ;出错返回
            MOV A,SUBADR       ;取存储地址
            ACALL SENTBYTE
            JB F0,SENDRETURN
            MOV A,R7
            ACALL SENTBYTE     ;发送一次数据
            JB F0,SENDRETURN    ;出错返回
            ACALL STOP             ;发送IC总线停止条件
DELAY10:                         ;延时10MS等待数据写完
        MOV 44H,30H
D1: MOV 45H,#34H
    DJNZ 45H,$
    DJNZ 44H,D1
SENDRETURN:
RET
;=======================================
READ_24C02:                             ;读24C02
           ACALL START                ;发送IC总线起始条件
           MOV A,#0A0H
           ACALL SENTBYTE                 ;24C02总线地址
           JB F0,RCVRETURN                 ;出错返回
           MOV A,SUBADR               ;取存储地址
            ACALL SENTBYTE             ;发送24C02器件总线地址
            JB F0,SENDRETURN             ;出错返回
           ACALL START                      ;发送IC总线重复起始条件
           MOV A,#0A0H                      ;24C02总线地址
           SETB ACC.0                               ;取总线读操作数
           ACALL SENTBYTE                        ;发送被控制总线地址
           JB F0,RCVRETURN                       ;出错返回
           ACALL RCVBYTE                ;接受数据
RCVRETURN:
RET
;=========================================
START:
     SETB SDA               ;发送起始条件的数据信号
     NOP
     NOP
     NOP
     SETB SCL              ;发送起始条件的时钟信号
     NOP                    ;起始条件建立时间大于4.7s
     NOP
     NOP
     CLR SDA                  ;发送起始信号
     NOP                        ;起始条件锁定时间大于4s
     NOP
     NOP
     CLR SCL                 ; 钳住IC总线准备发送或接受数据
     RET
;==================================
STOP:
     CLR SDA                   ;发送停止条件的数据信号
     NOP
     NOP
     NOP
     SETB SCL                       ;发送停止条件的时钟信号
     NOP                              ;起始条件建立时间大于4s
     NOP
     NOP
     SETB SDA                       ;发送IC总线停止信号
     NOP
     NOP
     NOP
     NOP
     RET
;===============================
SENTBYTE:                                ;送数8位
         MOV BITCNT,#08H
SENTB:
      RLC A                         ;要发送的数据左移,发送入位C
      MOV SDA,C
      NOP
 NOP
      NOP
      SETB SCL                    ;置时钟线为高,通知被控制开始接受数据位
      NOP                          ;保证时钟高周期大于4s
      NOP
      NOP
      CLR SCL                     ;钳住总线准备接受下一个数据位
      DJNZ BITCNT,SENTB          ;8位没发送完继续发送
      NOP
     NOP
     SETB SDA                         ;8位发送完后释放数据线准备收应答位
     NOP
     NOP
     SETB SCL                         ;开始接受应答信号
     NOP
     NOP
     CLR F0                         ;预先清发送数据出错标志
     JNB SDA,ACKEND                 ;判断是否接受应答信号正常转ACKEND
     SETB F0                        ;未受到应答置位错误标志
ACKEND:
        NOP
        CLR SCL                    ;发送结束钳住总线准备下一步发送或接受数据或进行其他处理
        RET
;=================================
RCVBYTE:
        SETB SDA                 ;置数据线为输入方式
        MOV BITCNT,#08H        ;要传送的数据长度为8位
RCV:
    NOP
    CLR SCL                    ;置时钟线为低,准备接受数据
     NOP                    ;时钟低周期大于4.7s
     NOP
     NOP
     NOP
     NOP
     SETB SCL                 ;置时钟线为高使数据线上数据有效
     NOP
     NOP
     MOV C,SDA
     RLC A                      ;接受的数据位放入ACC
     NOP
     NOP
     DJNZ BITCNT,RCV               ;8位没收完继续接受
     CLR SCL                        ;8位接受完置时钟线和数据线
     NOP
     NOP
     CLR SDA
     SETB SDA                      ;接受非应答信号
        NOP
     NOP
     SETB SCL                       ;置时钟线为高使应答位有效
     NOP                              ;时钟高周期大于4.7s
     NOP
     SETB SDA
     NOP
     NOP
     NOP
     CLR SCL            ;清时钟线钳住IC总线以便发送停止条件
     RET


     END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -