完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
24C64子程序
/*24C64子程序 */ bit I2C_Start(void); void I2C_Stop(void); void I2C_Ack(void); void I2C_Nack(void); bit I2C_Send_Byte( uchar); uchar I2C_Receive_Byte(void); void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count); void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count); void Delay_10_uS(void) { char i=10; while(i--); } void Delay_N_mS( uint n_milisecond) /* n mS delay */ { uchar i; while(n_milisecond--) { i=37; while(i--); } } bit I2C_Start(void) { Delay_10_uS(); I2C_SDA =1; Delay_10_uS(); I2C_SCK =1; Delay_10_uS(); if ( I2C_SDA == 0) return 0; if ( I2C_SCK == 0) return 0; I2C_SDA = 0; Delay_10_uS(); I2C_SCK = 0; Delay_10_uS(); return 1; } void I2C_Stop(void) { Delay_10_uS(); I2C_SDA = 0; Delay_10_uS(); I2C_SCK = 1; Delay_10_uS(); I2C_SDA = 1; Delay_10_uS(); } void I2C_Ack(void) { Delay_10_uS(); I2C_SDA=0; Delay_10_uS(); I2C_SCK=1; Delay_10_uS(); I2C_SCK=0; Delay_10_uS(); } void I2C_Nack(void) { Delay_10_uS(); I2C_SDA=1; Delay_10_uS(); I2C_SCK=1; Delay_10_uS(); I2C_SCK=0; Delay_10_uS(); } bit I2C_Send_Byte( uchar d) { uchar i = 8; bit bit_ack; while( i-- ) { Delay_10_uS(); if ( d &0x80 ) I2C_SDA =1; else I2C_SDA =0; Delay_10_uS(); I2C_SCK = 1; Delay_10_uS(); I2C_SCK = 0; d = d << 1; } Delay_10_uS(); I2C_SDA = 1; Delay_10_uS(); I2C_SCK = 1; Delay_10_uS(); bit_ack = I2C_SDA; I2C_SCK =0; Delay_10_uS(); return bit_ack; } uchar I2C_Receive_Byte(void) { uchar i = 8, d; Delay_10_uS(); I2C_SDA = 1; while ( i--) { d = d << 1; Delay_10_uS(); I2C_SCK =1; if ( I2C_SDA ) d++; Delay_10_uS(); I2C_SCK =0; } return d; } void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count) { DOG_WDI=!DOG_WDI; DOGtiME=0; while(count--) { I2C_Start(); /*I2C_Send_Byte( 0xa0 + AT24C64_address /256 *2);*/ /* 24C16 USE */ I2C_Send_Byte( 0xa0 ); I2C_Send_Byte( AT24C64_address/256 ); I2C_Send_Byte( AT24C64_address %256 ); I2C_Send_Byte( *(uchar*)mcu_address ); I2C_Stop(); Delay_N_mS(10); /* waiting for write cycle to be completed */ ((uchar*)mcu_address)++; AT24C64_address++; } } void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count) { DOG_WDI=!DOG_WDI; DOGTIME=0; while(count--) { I2C_Start(); /*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/ /* 24C16 USE */ I2C_Send_Byte( 0xa0 ); I2C_Send_Byte( AT24C64_address/256 ); I2C_Send_Byte( AT24C64_address % 256 ); I2C_Start(); /*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/ I2C_Send_Byte( 0xa1 ); *(uchar*)mcu_address = I2C_Receive_Byte(); I2C_Nack(); I2C_Stop(); ((uchar*)mcu_address)++; AT24C64_address++; } } |
|
相关推荐
|
|
学习一下,谢谢楼主分享,十分感谢
|
|
|
|
|
|
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
1564 浏览 0 评论
1448 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
6686 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1847 浏览 0 评论
3186 浏览 0 评论
77519 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-16 10:16 , Processed in 0.590163 second(s), Total 66, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号