Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include 'g:\asm\mcs-51\stc-docs\include\stc-mcu_y1.txt'
- SDA bit P0.0
- SCL bit P0.1
- ledport equ P2
- addr1 equ 034h
- addr0 equ 035h
- ic_addr equ 0A0h ;AT24C32N device address
- org 0000h
- ;---------------------------------------------
- ; This program write byte '0xCC' to EEEPROM
- mov addr0, #000h
- mov addr1, #000h
- call init
- call start
- mov A, #ic_addr ;we want WRITE to IC
- call send
- mov A, addr1
- call send
- mov A, addr0
- call send
- mov A, #0CCh ;byte to write
- call send
- call wrdelay
- call stop
- ;---------------------------------------------
- ; This program read byte from EEPROM 0x0000 location
- mov A, #ic_addr ;we want WRITE to IC
- call init
- call start
- call send
- mov A, addr1
- call send
- mov A, addr0
- call send
- call start ;AT24C32N datashit wants to restart IC after addresses sent.
- mov A, #ic_addr+1 ;we want READ from IC
- call send
- call read
- call nak
- call stop
- cpl A ;invert byte for common anode LED
- mov ledport, A ;show byte on 8-digit bargraph display
- orl PCON, #00000001B ;good night, sweet prince
- sjmp $ ;if insomnia occured
- ; I2C subroutines
- ;---------------------------------------------
- ; I2C Init
- init: setb SDA
- setb SCL
- ret
- ;---------------------------------------------
- ; I2C start
- start: setb SDA
- call i2c_del
- setb SCL
- call i2c_del
- clr SDA
- call i2c_del
- clr SCL
- ret
- ;---------------------------------------------
- ; I2C stop
- stop: call i2c_del
- clr SDA
- clr SCL
- setb SCL
- call i2c_del
- setb SDA
- call i2c_del
- ret
- ;---------------------------------------------
- ; I2C NAK
- nak: setb SDA
- setb SCL
- clr SCL
- setb SCL
- ret
- ;---------------------------------------------
- ; I2C send
- send: mov R7, #008h
- snloop: clr SCL
- rlc A
- mov SDA, C
- setb SCL
- djnz R7, snloop
- clr SCL
- setb SDA
- setb SCL
- jb SDA, $ ;Wait while ACK
- clr SCL
- ret
- ;---------------------------------------------
- ; ;Read from I2C
- read: mov R7, #008h
- rdloop: clr SCL
- setb SCL
- mov C, SDA
- rlc A
- djnz R7, rdloop
- clr SCL
- setb SDA
- ret
- ;---------------------------------------------
- ; I2C delay ( CALL(2uS)+NOP(1uS)+RET(2uS) ) = ~5uS @12MHz)
- i2c_del:nop
- ret
- ;---------------------------------------------
- ;---------------------------------------------
- ; AT24C32N write delay (3mS @12MHz)
- wrdelay:nop
- mov 030h, #01Ch
- mov 031h, #0FFh
- next: djnz 031h, next
- djnz 030h, next
- ret
- ;---------------------------------------------
- end
- ;Copyright 2020, Glitch and Bug Software
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement