AVR单片机I2C读写程序

上传人:飞*** 文档编号:43499777 上传时间:2018-06-06 格式:DOCX 页数:4 大小:22.19KB
返回 下载 相关 举报
AVR单片机I2C读写程序_第1页
第1页 / 共4页
AVR单片机I2C读写程序_第2页
第2页 / 共4页
AVR单片机I2C读写程序_第3页
第3页 / 共4页
AVR单片机I2C读写程序_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《AVR单片机I2C读写程序》由会员分享,可在线阅读,更多相关《AVR单片机I2C读写程序(4页珍藏版)》请在金锄头文库上搜索。

1、1./*/ 2./* 基于 AVR 单片机对数字定位器的 I2C 读写程序 */ 3./* AVR 单片机型号:ATMEGA16 */ 4./* 数字定位器型号:intersil 公司的 ISL90840UIV2027z */ 5./* 程序功能:对数字定位器内部的 4 个独立可编程定位器进行写与读操作 */ 6./* 并在数码管上显示 */ 7./* 简要电路说明:共阴极数码管通过 AVR 的 PORTA 口驱动输出,ISL90840 的芯片 */ 8./* 地址 A2 上拉到 VCC,A1、A0 都到地,即 A2=1,A1=A0=0 */ 9./* 整理改编者:都口 2009.05.13

2、*/ 10. /*/ 11. 12. 13. #include 14. #include 15. /*-数据类型宏定义-*/ 16. typedef unsigned char uchar; /无符号字符型 17. typedef unsigned int uint; /无符号整型 18. 19. /*-设定数字定位器芯片主地址-*/ 20. #define W_ADD 0x58 /写字节命令及器件地址(实际地址 A2A1A0 由电路设计决定) 21. / 在此例中 A2=1,A1=A0=0,0101 A2 A1 A0 0 (0101 1000)(0x58) 22. #define R_ADD

3、 0x59 /读字节命令及器件地址(实际地址 A2A1A0 由电路设计决定) 23. / 在此例中 A2=1,A1=A0=0,0101 A2 A1 A0 1 (0101 1001)(0x59) 24. 25. /*-设定数字定位器芯片内部四电位器各子地址-*/ 26. #define DCP_0 0x00 /内部模块 1 地址 (0000 0000)选中第一个电位器 27. #define DCP_1 0x01 /内部模块 2 地址 (0000 0001)选中第二个电位器 28. #define DCP_2 0x02 /内部模块 3 地址 (0000 0010)选中第三个电位器 29. #de

4、fine DCP_3 0x03 /内部模块 4 地址 (0000 0011)选中第四个电位器 30. 31. /*-设定 I2C 应答信号-*/ 32. #define SLAW 0x18 /SLA_W 已正常发送代码,判断器件是否正常应答的常量 33. 34. /*-ms 级延时调用程序-*/ 35. void tms(uchar i) 36. 37. uint j; 38. uint q; 39. for(q=i;q!=0;q-) 40. 41. for (j=8000;j!=0;j-); 42. 43. 44. 45. /*-I2C 总线初始化-*/ 46. void twi_init(

5、void) 47. 48. TWCR= 0x00; /终止 I2C twi 49. TWBR= 0x32; /设置传输速率(中速) 50. TWSR= 0x00; /设置预分步值(0 分频) 51. TWAR= 0x00; /设置从机地址(因为是主机模式,此处可以不用) 52. TWCR= 0x04; /开启 I2C twi 53. 54. 55. /*-总线启动开始 START-*/ 56. void i2cstart(void) 57. 58. TWCR= BIT(TWINT) | BIT(TWSTA) | BIT(TWEN); 59. while (!(TWCR 60. 61. 62.

6、/*-总线上写入一个字节返回 TWI 状态-*/ 63. uchar i2cwt(uchar a) 64. 65. TWDR = a; 66. TWCR = BIT(TWINT) | BIT(TWEN); 67. while (!(TWCR 68. _NOP(); 69. return(TWSR 70. 71. 72. /*-总线上读出一个字节返回所读数据-*/ 73. uchar i2crd(void) 74. 75. TWCR= BIT(TWINT) | BIT(TWEA) | BIT(TWEN); 76. while (!(TWCR 77. return(TWDR); 78. 79. 8

7、0. /*-总线结束停止 STOP-*/ 81. void i2cstop(void) 82. 83. TWCR = BIT(TWINT) | BIT(TWSTO) | BIT(TWEN); 84. 85. 86. /*-*/ 87. /* 向数字定位器内选定某个定位器写入所需数据 */ 88. /* 参数说明: dcp_n 要写入数据的内部某个电位器的子地址 */ 89. /* number 要写入此电位器的数据*/ 90. /*-*/ 91. 92. void wt24c_dwq( uchar dcp_n,uchar number) 93. 94. if(number=0x255) /数据

8、不得超过 255 95. 96. i2cstart(); /发送起始信号 97. if(i2cwt(W_ADD)=SLAW) /发送 SLA_W, 写字节命令及主器件地址 98. 99. i2cwt(dcp_n); /写字节命令及器件内部子地址 100. i2cwt(number); /向所选定的定位器写入所需数据 101. 102. i2cstop(); /发送停止信号 103. tms(6); /延时 6ms,完成写入 104. 105. 106. 107./*-*/ 108./* 从数字定位器内按顺序读出所有数据 */ 109./* 参数说明: *r_data 要读入数据的主机内存地址指针*/ 110./*-*/ 111.void rd24c_n( uchar *r_data) 112. 113. uchar i; 114. i2cstart(); /发送起始信号 115. if(i2cwt(W_ADD)=SLAW) /发送 SLA_W, 写字节命令及主器件地址 116. 117. i2cwt(DCP_0); /写字节命令及器件内部第一个子地址 118. i2cstart(); /再次发送起始信号 119. i2cwt(R_ADD); /读命令字节及主器件地址 120. for(i=0;i4;i+) 121. 122.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号