共2条
1/1 1 跳转至页
问
我做的24C02的存取实验中:
为什么第二次读数据的时候,会接着第一次的读?(程序重新运行了)
谢谢指点!
程序如下:BITCNT EQU 40H
SUBADR EQU 41H
SDA BIT P1.6
SCL BIT P1.5
ORG 00H
JMP MAIN
ORG 0100H
MAIN:
SETB P1.0
MOV R6,#4
LOPP:
ACALL DELAY
ACALL READ_24C02
INC SUBADR
ACALL DELAY
MOV P2,A
ACALL DELAY
MOV P2,#0FFH
ACALL DELAY
DJNZ R6,LOPP
;JMP MAIN
;===================================
DELAY: MOV R0,#0FFH
DELAY0: MOV R1,#0FFH
DELAY1: NOP
NOP
NOP
DJNZ R1,DELAY1
DJNZ R0,DELAY0
RET
;=======================================
READ_24C02:
ACALL START
MOV A,#0A0H
ACALL SENTBYTE
JB F0,RCVRETURN
MOV A,SUBADR
ACALL SENTBYTE
JB F0,RCVRETURN
ACALL START
MOV A,#0A0H
SETB ACC.0
ACALL SENTBYTE
JB F0,RCVRETURN
ACALL RCVBYTE
RCVRETURN:
RET
;=========================================
START:
SETB SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
CLR SCL
RET
;==================================
STOP:
CLR SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
;===============================
SENTBYTE:
MOV BITCNT,#08H
SENTB:
RLC A
MOV SDA,C
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR SCL
DJNZ BITCNT,SENTB
NOP
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
CLR F0
JNB SDA,ACKEND
SETB F0
ACKEND:
NOP
CLR SCL
RET
;=================================
RCVBYTE:
SETB SDA
MOV BITCNT,#08H
RCV:
NOP
CLR SCL
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
NOP
NOP
DJNZ BITCNT,RCV
CLR SCL
NOP
NOP
CLR SDA
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
NOP
CLR SCL
RET
END
答 1: 有没有人能帮帮我???? 答 2: 你能不能先把IIC写好,写24c02不就很简单了 答 3: 仿真看看是不是第2次读的时候SUBADR没改变?READEEPROM:
CALL STARTE2 ;开始
LD R1,#0A0H
CALL WR_BYTE
LD R1,R2 ;R2是需要读取数据的地址
CALL WR_BYTE
CALL STARTE2
LD R1,#0A1H
CALL WR_BYTE
CALL RD_BYTE ;输出r0是读取的数据
LD R3,R0
CALL SNACK
CALL EPSTOP
CALL DELAY20MS
RET
重复调用的时候只需要增加r2,r3的地址就ok
为什么第二次读数据的时候,会接着第一次的读?(程序重新运行了)
谢谢指点!
程序如下:BITCNT EQU 40H
SUBADR EQU 41H
SDA BIT P1.6
SCL BIT P1.5
ORG 00H
JMP MAIN
ORG 0100H
MAIN:
SETB P1.0
MOV R6,#4
LOPP:
ACALL DELAY
ACALL READ_24C02
INC SUBADR
ACALL DELAY
MOV P2,A
ACALL DELAY
MOV P2,#0FFH
ACALL DELAY
DJNZ R6,LOPP
;JMP MAIN
;===================================
DELAY: MOV R0,#0FFH
DELAY0: MOV R1,#0FFH
DELAY1: NOP
NOP
NOP
DJNZ R1,DELAY1
DJNZ R0,DELAY0
RET
;=======================================
READ_24C02:
ACALL START
MOV A,#0A0H
ACALL SENTBYTE
JB F0,RCVRETURN
MOV A,SUBADR
ACALL SENTBYTE
JB F0,RCVRETURN
ACALL START
MOV A,#0A0H
SETB ACC.0
ACALL SENTBYTE
JB F0,RCVRETURN
ACALL RCVBYTE
RCVRETURN:
RET
;=========================================
START:
SETB SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
CLR SCL
RET
;==================================
STOP:
CLR SDA
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
;===============================
SENTBYTE:
MOV BITCNT,#08H
SENTB:
RLC A
MOV SDA,C
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR SCL
DJNZ BITCNT,SENTB
NOP
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
CLR F0
JNB SDA,ACKEND
SETB F0
ACKEND:
NOP
CLR SCL
RET
;=================================
RCVBYTE:
SETB SDA
MOV BITCNT,#08H
RCV:
NOP
CLR SCL
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
NOP
NOP
DJNZ BITCNT,RCV
CLR SCL
NOP
NOP
CLR SDA
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
NOP
CLR SCL
RET
END
答 1: 有没有人能帮帮我???? 答 2: 你能不能先把IIC写好,写24c02不就很简单了 答 3: 仿真看看是不是第2次读的时候SUBADR没改变?READEEPROM:
CALL STARTE2 ;开始
LD R1,#0A0H
CALL WR_BYTE
LD R1,R2 ;R2是需要读取数据的地址
CALL WR_BYTE
CALL STARTE2
LD R1,#0A1H
CALL WR_BYTE
CALL RD_BYTE ;输出r0是读取的数据
LD R3,R0
CALL SNACK
CALL EPSTOP
CALL DELAY20MS
RET
重复调用的时候只需要增加r2,r3的地址就ok
共2条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【S32K3XX】FlexCAN 模块配置使用被打赏¥30元 | |
| 【S32K3XX】FlexCAN RAM 资源分配整理被打赏¥25元 | |
| 【S32K3XX】IPCF 适配核间中断处理被打赏¥21元 | |
| 【S32K3XX】IPCF 核间通讯模块UNMANAGED方式使用被打赏¥29元 | |
| 片外存储Flash使用方法(Arduino IDE环境)被打赏¥22元 | |
| 三分钟快速上手ESP-NOW(ArduinoIDE环境)被打赏¥23元 | |
| 【S32K3XX】LPSPI参数配置说明被打赏¥21元 | |
| 在WT9932C61-TINY上实现超声波测距被打赏¥22元 | |
| 基于WT9932C61-TINY的环境构建及OLED屏驱动测试被打赏¥20元 | |
| 【S32K3XX】Core-to-Core 中断使用被打赏¥21元 | |
我要赚赏金
