24C64子程序

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++;
}
}
24c32/24c64中文资料

火灾探测器清洗流程
磁芯中柱气隙倒角maxwell仿真分析
迎接5G IOT需要准备什么
移动网无线信号质量监测系统
两台三菱plc怎么连接通信设置?
24C64子程序
XR虚拟拍摄中的动捕应用
三星研发“充电戒指”,可为手机提供无线充电
电动汽车和自动驾驶汽车正在推动汽车市场的下一波浪潮
什么是全国对讲机_全国对讲机的原理_全国对讲机怎么用
KUKA机器人焊钳铣削清零方式
麒麟980和骁龙845的不同 骁龙845具扩展现实体验
隔离与非隔离电源的区别
ICT多种技术融合赋能行业创新,助力推进行业数字化转型
二极管选型的需要考虑哪些因素?
单节锂离子电池采用恒定电流/恒定电压线性充电器简介
INN650D150A增强功率晶体管GaN
iPhone8谍照太毒,绝对不能让女友看见
什么是LED电子显示屏,它都有着什么优势
基于莱迪思Nexus FPGA技术平台产品的主要特性分析