共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 | |
【换取手持示波器】树莓派PICO逻辑分析仪被打赏16分 | |
【分享评测,赢取加热台】教你五分钟本地部署蒸馏版本的DeepSeekR1-7B被打赏12分 | |
【换取手持示波器】蓝牙音箱更换电池被打赏8分 | |
【换取手持示波器】鼠标更换微动开关被打赏10分 | |
【我要开发板】4.传感器移植被打赏50分 |