| ??? 06/30/06 08:43 Read: times |
#119407 - "write device address"-i2c subroutine Responding to: ???'s previous message |
I've pasted the subroutine too along with the main code....here you will find the 'write device address'
;_________________________________________________________________
;--------------I2C BYTE WRITE SUBROUTINE--------------------------
;_________________________________________________________________
WRITE_iic:
MOV A,WTCMD
CALL OUTS
MOV A,ADDRS
CALL OUT
MOV A,I2C_IN
CALL OUT
CALL STOP
;MOV A,#0H
RET
;_________________________________________________________________
;--------------I2C BYTE READ SUBROUTINE---------------------------
;_________________________________________________________________
READ_iic:
MOV A,WTCMD
CALL OUTS
MOV A,ADDRS
LCALL OUT
MOV A,RDCMD
LCALL OUTS
LCALL IN
MOV I2C_OUT,A
LCALL STOP
MOV A,#0H
RET
;_________________________________________________________________
;-------------BITWISE WRITE WITH START CONDITION------------------
;_________________________________________________________________
OUTS:
MOV B,#8
SETB SDA
SETB SCL
NOP
CLR SDA
NOP
CLR SCL
OSLOOP:
RLC A
MOV SDA,C
SETB SCL
NOP
CLR SCL
DJNZ B,OSLOOP
SETB SDA
NOP
SETB SCL
NOP
CLR SCL
RET
;_________________________________________________________________
;------------BITWISE WRITE WITHOUT START CONDITION----------------
;_________________________________________________________________
OUT:
MOV B,#8
OLOOP:
RLC A
MOV SDA,C
SETB SCL
NOP
CLR SCL
DJNZ B,OLOOP
SETB SDA
NOP
SETB SCL
NOP
CLR SCL
RET
;_________________________________________________________________
;------------------BITWISE READ SUBROUTINE------------------------
;_________________________________________________________________
IN:
MOV A,#0
MOV B,#8
SETB SDA
INLOOP:
CLR SCL
NOP
SETB SCL
MOV C,SDA
RLC A
DJNZ B,INLOOP
CLR SCL
RET
;_________________________________________________________________
;---------------------I2C STOP CONDITION--------------------------
;_________________________________________________________________
STOP:
CLR SDA
NOP
SETB SCL
NOP
SETB SDA
LCALL L_DELAY
RET
;_________________________________________________________________
;----------------DELAY FOR I2C STOP CONDITION---------------------
;_________________________________________________________________
L_DELAY:
push 07
push 06
push 05
mov r5,#02h
two_dely_200ms1:
mov r6,#19h
one_dely_200ms1:
mov r7,#40h
back_200ms1:
djnz r7,back_200ms1
djnz r6, one_dely_200ms1
djnz r5,two_dely_200ms1
pop 05
pop 06
pop 07
RET
;_________________________________________________________________
;--------------------------MAIN CODE------------------------------
;_________________________________________________________________
brw_main:
mov sp,#64h
mov p1,#0ffh
mov ie,#00h
acall s9k_main
;_________________________________________________________________
;--------------------FULL WRITE SUBROUTINE------------------------
;_________________________________________________________________
full_write:
setb ROLLOVER ;indicates memory write into 1st half
mov ADDRS,#00h
mov WTCMD,#10100000B
full_write_loop1:
acall rx_main
acall tx_main
mov I2C_IN,a
acall WRITE_iic
inc ADDRS
mov a,ADDRS
cjne a,#0ffh,full_write_loop2
jnb ROLLOVER,overload
mov WTCMD,#10100010B
mov ADDRS,#00h
clr ROLLOVER ;indicates memory write into 2nd half
full_write_loop2:
mov a,I2C_IN
cjne a,#27,full_write_loop1
mov dptr,#disp_leadthrough_complete
acall disp_message
;sjmp $
sjmp full_read ;delete this n enable previous inst
;_________________________________________________________________
;-----------------MEMORY OVERWRITE PREVENTION---------------------
;_________________________________________________________________
overload:
mov dptr,#disp_overload
acall disp_message
sjmp $
;_________________________________________________________________
;--------------------FULL READ SUBROUTINE------------------------
;_________________________________________________________________
full_read:
mov ADDRS,#00h
mov RDCMD,#10100001B
mov dptr, #disp_executing_task
acall disp_message
full_read_loop1:
acall READ_iic
mov a,I2C_OUT
lcall tx_main
inc ADDRS
mov a,ADDRS
cjne a,#0ffh,full_read_loop2
mov RDCMD,#10100011B
mov ADDRS,#00h
full_read_loop2:
mov a,I2C_OUT
cjne a,#27,full_read_loop1
mov dptr, #disp_finish_read
acall disp_message
SJMP FULL_WRITE
end
|
| Topic | Author | Date |
| eeprom word addressing | 01/01/70 00:00 | |
| do not confuse bits and bytes | 01/01/70 00:00 | |
| maximum seerial memory chip available? | 01/01/70 00:00 | |
| yes, you do | 01/01/70 00:00 | |
| code not working | 01/01/70 00:00 | |
| How to post code | 01/01/70 00:00 | |
| formatted code. | 01/01/70 00:00 | |
| I searched for a comment stating "write | 01/01/70 00:00 | |
| "write device address"-i2c subroutine | 01/01/70 00:00 | |
| you reply with an uncommented sub | 01/01/70 00:00 | |
| formatted code with comments. | 01/01/70 00:00 | |
| ORL a,HighAddressBit; | 01/01/70 00:00 | |
| Solution | 01/01/70 00:00 | |
| You 'can' make the chips you use work fo | 01/01/70 00:00 | |
| Question still remains unanswred | 01/01/70 00:00 | |
| i told you how | 01/01/70 00:00 | |
| One more time | 01/01/70 00:00 | |
| code written for that but not working | 01/01/70 00:00 | |
| rather than trying to figure your code o | 01/01/70 00:00 | |
| Corrections please, urgent. | 01/01/70 00:00 | |
| It is in the data sheet | 01/01/70 00:00 | |
datasheet | 01/01/70 00:00 |



