×
单片机 > 单片机程序设计 > 详情

51单片机STC89C52 iic

发布时间:2020-06-15 发布时间:
|
  1. SCL BIT P2.1   

  2. SDA BIT P2.0  

  3. ORG 0000H  

  4. LJMP MAIN  

  5. ORG 0050H  

  6. MAIN:  

  7. MOV SP,#30H  

  8. MOV P1,#0FFH ;灭LED  

  9. MOV R6,#2 ;R6保存AT24C02内部待写地址,用于传递参数  

  10. MOV R7,#55H ;R7保存待写数据,用于传递参数  

  11. LCALL iic_Write ;调用写函数,将R7的数据写入AT24C02 R6所指地址  

  12. LCALL DELAY10MS ;延时  

  13. MOV R6,#2 ;R6保存AT24C02内部待读地址,用于给读函数传递参数  

  14. LCALL iic_Read ;调用读函数  

  15. MOV A,R7 ;将保存在R7内的读取到的数据,送给累加器  

  16. CJNE A,#55H,MAINA0  ;比较读回的数据是否跟写入的一致  

  17. MOV P1,#0FH ;数据一致高4位LED亮  

  18. SJMP $  

  19. MAINA0:  

  20. MOV P1,#0F0H ;数据不一致低4位LED亮  

  21. MAINA1:  

  22. SJMP $  

  23.   

  24. iic_Write: ;IIC写函数,参数R6:地址,参数R7:数据  

  25. PUSH ACC   

  26. CLR SCL ;START信号  

  27. SETB SDA  

  28. SETB SCL  

  29. CLR SDA  

  30. MOV A,#0A0H ;器件地址,写方向  

  31. MOV R0,#08H  

  32. IIC1:  

  33. CLR SCL ;SDA只能在SCL为低电平时可变  

  34. RLC A  

  35. JC IIC0  

  36. CLR SDA  

  37. SJMP IIC2  

  38. IIC0:  

  39. SETB SDA  

  40. IIC2:  

  41. SETB SCL ;上升沿到来,AT24C02将SDA数据锁存  

  42. DJNZ R0,IIC1  

  43. CLR SCL ;允许SDA变化,等待ACK  

  44. SETB SDA ;释放SDA,以检测ACK  

  45. JB SDA,$ ;等待ACK  

  46. SETB SCL   

  47. MOV A,R6 ;内部地址,写方向  

  48. MOV R0,#8  

  49. IIC3:  

  50. CLR SCL  

  51. RLC A  

  52. JC IIC4  

  53. CLR SDA  

  54. SJMP IIC5  

  55. IIC4:  

  56. SETB SDA  

  57. IIC5:  

  58. SETB SCL  

  59. DJNZ R0,IIC3  

  60. CLR SCL ;检测ACK  

  61. SETB SDA  

  62. JB SDA,$  

  63. SETB SCL  

  64. MOV A,R7 ;数据,写方向  

  65. MOV R0,#8  

  66. IIC6:  

  67. CLR SCL  

  68. RLC A  

  69. JC IIC7  

  70. CLR SDA  

  71. SJMP IIC8  

  72. IIC7:  

  73. SETB SDA  

  74. IIC8:  

  75. SETB SCL  

  76. DJNZ R0,IIC6  

  77. CLR SCL ;检测ACK  

  78. SETB SDA  

  79. JB SDA,$  

  80. SETB SCL  

  81. CLR SCL ;STOP信号  

  82. CLR SDA   

  83. SETB SCL  

  84. SETB SDA  

  85. POP ACC  

  86. RET  

  87.   

  88. iic_Read: ;IIC读函数,参数R6:地址  

  89. PUSH ACC  

  90. CLR SCL ;START信号  

  91. SETB SDA  

  92. SETB SCL  

  93. CLR SDA  

  94. MOV A,#0A0H ;器件地址,写方向   

  95. MOV R0,#8  

  96. IIC10:  

  97. CLR SCL  

  98. RLC A  

  99. JC IIC00  

  100. CLR SDA  

  101. SJMP IIC20  

  102. IIC00:  

  103. SETB SDA  

  104. IIC20:  

  105. SETB SCL  

  106. DJNZ R0,IIC10  

  107. CLR SCL ;检测ACK  

  108. SETB SDA  

  109. JB SDA,$  

  110. SETB SCL  

  111. MOV A,R6 ;内部地址,写方向  

  112. MOV R0,#8  

  113. IIC30:  

  114. CLR SCL  

  115. RLC A  

  116. JC IIC40  

  117. CLR SDA  

  118. SJMP IIC50  

  119. IIC40:  

  120. SETB SDA  

  121. IIC50:  

  122. SETB SCL  

  123. DJNZ R0,IIC30  

  124. CLR SCL ;检测ACK  

  125. SETB SDA  

  126. JB SDA,$  

  127. SETB SCL   

  128. CLR SCL  

  129. SETB SDA ;重新发起始信号  

  130. SETB SCL  

  131. CLR SDA  

  132. MOV A,#0A1H ;器件地址,读方向   

  133. MOV R0,#8  

  134. IIC11:  

  135. CLR SCL  

  136. RLC A  

  137. JC IIC01  

  138. CLR SDA  

  139. SJMP IIC21  

  140. IIC01:  

  141. SETB SDA  

  142. IIC21:  

  143. SETB SCL  

  144. DJNZ R0,IIC11  

  145. CLR SCL ;检测ACK  

  146. SETB SDA  

  147. JB SDA,$  

  148. SETB SCL    

  149. MOV R0,#8  

  150. IICA2:  

  151. CLR SCL ;开始读数据  

  152. SETB SDA  

  153. SETB SCL  

  154. NOP  

  155. JB SDA,IICA0  

  156. CLR C  

  157. SJMP IICA1  

  158. IICA0:  

  159. SETB C  

  160. IICA1:  

  161. RLC A  

  162. DJNZ R0,IICA2  

  163. MOV R7,A ;保存读取数据  

  164. CLR SCL ;STOP信号  

  165. CLR SDA  

  166. SETB SCL  

  167. SETB SDA  

  168. POP ACC  

  169. RET  

  170.   

  171. DELAY10MS:    ;延时   

  172. SETB RS0  

  173. MOV R1,#10  

  174. DELAY1:  

  175. MOV R0,#250  

  176. DELAY0:  

  177. NOP  

  178. NOP   

  179. DJNZ R0,DELAY0  

  180. DJNZ R1,DELAY1  

  181. CLR RS0  

  182. RET  

  183.   

  184. DELAY4S:    ;延时   

  185. SETB RS1  

  186. MOV R3,#02H  

  187. DELAY30:  

  188. MOV R2,#04H  

  189. DELAY20:  

  190. MOV R1,#250  

  191. DELAY10:  

  192. MOV R0,#250  

  193. DELAY00:  

  194. NOP  

  195. NOP   

  196. DJNZ R0,DELAY00  

  197. DJNZ R1,DELAY10  

  198. DJNZ R2,DELAY20  

  199. DJNZ R3,DELAY30  

  200. CLR RS1  

  201. RET  

  202.   

  203. END 


关键字:51单片机  STC89C52  iic 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于arm的指纹识别门禁系统是如何设计的