微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > I2C总线时序模拟(二)-加深理解总线协议

I2C总线时序模拟(二)-加深理解总线协议

时间:11-22 来源:互联网 点击:
  1. 示操作成功,否则操作有误。
  2. 注意:使用前必须已结束总线。
  3. ********************************************************************/
  4. bitISendByte(ucharsla,ucharc)
  5. {
  6. Start_I2c();/*启动总线*/
  7. SendByte(sla);/*发送器件地址*/
  8. if(ack==0)return(0);
  9. SendByte(c);/*发送数据*/
  10. if(ack==0)return(0);
  11. Stop_I2c();/*结束总线*/
  12. return(1);
  13. }
  14. /*******************************************************************
  15. 向有子地址器件发送多字节数据函数
  16. 函数原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);
  17. 功能:从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
  18. 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
  19. 如果返回1表示操作成功,否则操作有误。
  20. 注意:使用前必须已结束总线。
  21. ********************************************************************/
  22. bitISendStr(ucharsla,ucharsuba,uchar*s,ucharno)
  23. {
  24. uchari;
  25. Start_I2c();/*启动总线*/
  26. SendByte(sla);/*发送器件地址*/
  27. if(ack==0)return(0);
  28. SendByte(suba);/*发送器件子地址*/
  29. if(ack==0)return(0);
  30. for(i=0;i
  31. {
  32. SendByte(*s);/*发送数据*/
  33. if(ack==0)return(0);
  34. s++;
  35. }
  36. Stop_I2c();/*结束总线*/
  37. return(1);
  38. }
  39. /*******************************************************************
  40. 向无子地址器件读字节数据函数
  41. 函数原型:bitIRcvByte(ucharsla,ucahr*c);
  42. 功能:从启动总线到发送地址,读数据,结束总线的全过程,从器件地
  43. 址sla,返回值在c.
  44. 如果返回1表示操作成功,否则操作有误。
  45. 注意:使用前必须已结束总线。
  46. ********************************************************************/
  47. bitIRcvByte(ucharsla,uchar*c)
  48. {
  49. Start_I2c();/*启动总线*/
  50. SendByte(sla+1);/*发送器件地址*/
  51. if(ack==0)return(0);
  52. *c=RcvByte();/*读取数据*/
  53. Ack_I2c(1);/*发送非就答位*/
  54. Stop_I2c();/*结束总线*/
  55. return(1);
  56. }
  57. /*******************************************************************
  58. 向有子地址器件读取多字节数据函数
  59. 函数原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);
  60. 功能:从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
  61. 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
  62. 如果返回1表示操作成功,否则操作有误。
  63. 注意:使用前必须已结束总线。
  64. ********************************************************************/
  65. bitIRcvStr(ucharsla,ucharsuba,uchar*s,ucharno)
  66. {
  67. uchari;
  68. Start_I2c();/*启动总线*/
  69. SendByte(sla);/*发送器件地址*/
  70. if(ack==0)return(0);
  71. SendByte(suba);/*发送器件子地址*/
  72. if(ack==0)return(0);
  73. Start_I2c();
  74. SendByte(sla+1);
  75. if(ack==0)return(0);
  76. for(i=0;i
  77. {
  78. *s=RcvByte();/*发送数据*/
  79. Ack_I2c(0);/*发送就答位*/
  80. s++;
  81. }
  82. *s=RcvByte();
  83. Ack_I2c(1);/*发送非应位*/
  84. Stop_I2c();/*结束总线*/
  85. return(1);
  86. }
  87. /*完毕*/

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top