STM8L152模拟IIC程序(3)

2025-06-23

input with pull up for(i = 0; i < 8; ++i ){

GPIO_Init(GPIOC,GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Slow);//set SCL pin as output high Delay();

GPIO_Init(GPIOC,GPIO_Pin_1,GPIO_Mode_Out_PP_High_Slow);//set SCL pin as output high Delay(); res <<= 1; if(SDA_READ()){ res ++; } } return res; } //写数据

unsigned char BQ25890x_write_reg(unsigned char *pBuffer,unsigned char WriteAddr,unsigned char NumToWrite) {

unsigned char u_wait_err = 0;

IIC_Start();

IIC_Send_Byte(SlaveAddress << 1);//slave addr u_wait_err |= IIC_Wait_Ack();

IIC_Send_Byte(WriteAddr); //register addr u_wait_err |= IIC_Wait_Ack();

while(NumToWrite--) {

IIC_Send_Byte(*pBuffer); u_wait_err |= IIC_Wait_Ack(); pBuffer++; }

IIC_Stop();

if(u_wait_err == 0) return 0; return 1; } //

unsigned char BQ25890x_read_reg(unsigned char *pBuffer,unsigned char WriteAddr,unsigned char NumToRead) {

unsigned char u_wait_err = 0;

IIC_Start();

IIC_Send_Byte(SlaveAddress<<1); // SlaveAddress 0x7e u_wait_err |= IIC_Wait_Ack(); IIC_Send_Byte(WriteAddr); // address u_wait_err |= IIC_Wait_Ack();

IIC_Start();

IIC_Send_Byte((SlaveAddress<<1)+1); // SlaveAddress 0x7e u_wait_err |= IIC_Wait_Ack();

while(--NumToRead) {

*pBuffer = IIC_Read_Byte(1); IIC_Ack(); pBuffer++; }

*pBuffer = IIC_Read_Byte(1);

IIC_NAck(); IIC_Stop();

if(u_wait_err == 0) return 0; return 1; }

好了,这就是这部分的内容了。

#include \#include \

#include \

#define AT24C32_SETSDAIN GPIO_Init(AT24C32_SDA_PORT, GPIO_MODE_IN_FL_NO_IT)

#define AT24C32_SETSDAOUT GPIO_Init(AT24C32_SDA_PORT, GPIO_MODE_OUT_OD_LOW_SLOW)

#define I2C_SLAW 0xA0 /*器件地址选择及写标志*/ #define I2C_SLAR 0xA1 /*器件地址选择及读标志*/

GPIO_PIN_6, GPIO_PIN_6,

void nops(void) {

// asm(\// asm(\ uint16_t i = 0; for (; i < 5; i++); }

// 总线复位

void I2C_Reset(void) {

AT24C32_SCL_HIGH; AT24C32_SDA_HIGH; }

// I2C操作严重错误 void I2C_Error(void) {

//复位I2C总线 I2C_Reset();

//进入死循环 while (1) { } }

// 发送起始条件

void I2C_Start_A(void) /*起始条件*/ {

AT24C32_SCL_HIGH; nops();

AT24C32_SDA_LOW; nops();

AT24C32_SCL_LOW; nops(); }

// 停止条件

void I2C_Stop_A(void) {

AT24C32_SDA_LOW; nops();

AT24C32_SCL_HIGH; nops();

AT24C32_SDA_HIGH; nops();

AT24C32_SCL_LOW; nops(); }

// 产生一个时钟信号

uint8_t I2C_GenerateClock(void) {

uint8_t bData = 0; uint16_t t = 0;

AT24C32_SCL_HIGH; nops();

for (t = 0; t < 6; t++);

if (AT24C32_READSDA) {

bData = 1; }

AT24C32_SCL_LOW; nops();

return bData; }

// 应答位

void I2C_Ack(uint8_t bAckYes) {

if (bAckYes) {

AT24C32_SDA_LOW; } else {

AT24C32_SDA_HIGH; }

I2C_GenerateClock();

AT24C32_SDA_HIGH; }

// 发送数据子程序, ucData为要求发送的数据 uint8_t I2C_Send(uint8_t ucData) {

uint8_t i;

for (i = 0; i < 8; i++) {

if (ucData & 0x80) {

AT24C32_SDA_HIGH; } else {

AT24C32_SDA_LOW; }

ucData <<= 1;


STM8L152模拟IIC程序(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:哈大冬季施工措施

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219