Advertisement
Guest User

Untitled

a guest
Mar 4th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. include 'g:\asm\mcs-51\stc-docs\include\stc-mcu_y1.txt'
  2. SDA bit P0.0
  3. SCL bit P0.1
  4.  
  5. ledport equ P2
  6.  
  7. addr1 equ 034h
  8. addr0 equ 035h
  9. ic_addr equ 0A0h ;AT24C32N device address
  10.  
  11. org 0000h
  12. ;---------------------------------------------
  13. ; This program write byte '0xCC' to EEEPROM
  14. mov addr0, #000h
  15. mov addr1, #000h
  16. call init
  17. call start
  18. mov A, #ic_addr ;we want WRITE to IC
  19. call send
  20. mov A, addr1
  21. call send
  22. mov A, addr0
  23. call send
  24. mov A, #0CCh ;byte to write
  25. call send
  26. call wrdelay
  27. call stop
  28. ;---------------------------------------------
  29. ; This program read byte from EEPROM 0x0000 location
  30. mov A, #ic_addr ;we want WRITE to IC
  31. call init
  32. call start
  33. call send
  34. mov A, addr1
  35. call send
  36. mov A, addr0
  37. call send
  38. call start ;AT24C32N datashit wants to restart IC after addresses sent.
  39. mov A, #ic_addr+1 ;we want READ from IC
  40. call send
  41. call read
  42. call nak
  43. call stop
  44. cpl A ;invert byte for common anode LED
  45. mov ledport, A ;show byte on 8-digit bargraph display
  46. orl PCON, #00000001B ;good night, sweet prince
  47. sjmp $ ;if insomnia occured
  48.  
  49. ; I2C subroutines
  50. ;---------------------------------------------
  51. ; I2C Init
  52. init: setb SDA
  53. setb SCL
  54. ret
  55. ;---------------------------------------------
  56. ; I2C start
  57. start: setb SDA
  58. call i2c_del
  59. setb SCL
  60. call i2c_del
  61. clr SDA
  62. call i2c_del
  63. clr SCL
  64. ret
  65. ;---------------------------------------------
  66. ; I2C stop
  67. stop: call i2c_del
  68. clr SDA
  69. clr SCL
  70. setb SCL
  71. call i2c_del
  72. setb SDA
  73. call i2c_del
  74. ret
  75. ;---------------------------------------------
  76. ; I2C NAK
  77. nak: setb SDA
  78. setb SCL
  79. clr SCL
  80. setb SCL
  81. ret
  82. ;---------------------------------------------
  83. ; I2C send
  84. send: mov R7, #008h
  85. snloop: clr SCL
  86. rlc A
  87. mov SDA, C
  88. setb SCL
  89. djnz R7, snloop
  90. clr SCL
  91. setb SDA
  92. setb SCL
  93. jb SDA, $ ;Wait while ACK
  94. clr SCL
  95. ret
  96. ;---------------------------------------------
  97. ; ;Read from I2C
  98. read: mov R7, #008h
  99. rdloop: clr SCL
  100. setb SCL
  101. mov C, SDA
  102. rlc A
  103. djnz R7, rdloop
  104. clr SCL
  105. setb SDA
  106. ret
  107. ;---------------------------------------------
  108. ; I2C delay ( CALL(2uS)+NOP(1uS)+RET(2uS) ) = ~5uS @12MHz)
  109. i2c_del:nop
  110. ret
  111. ;---------------------------------------------
  112. ;---------------------------------------------
  113. ; AT24C32N write delay (3mS @12MHz)
  114. wrdelay:nop
  115. mov 030h, #01Ch
  116. mov 031h, #0FFh
  117. next: djnz 031h, next
  118. djnz 030h, next
  119. ret
  120. ;---------------------------------------------
  121. end
  122. ;Copyright 2020, Glitch and Bug Software
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement