久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2269|回復: 0
打印 上一主題 下一主題
收起左側

這個單片機流程圖該怎么畫?

[復制鏈接]
跳轉到指定樓層
樓主
ID:750792 發表于 2020-5-13 21:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發送的時候先初始化之后start->發送INA219地址->發送需要操作的寄存器地址->發送高8位->發送低8位->stop
讀取的時候先初始化start->發送INA219地址->發送需讀取的寄存器地址->start->發送INA219地址+0x01讀取出高8位->發送應答->讀取低8位->不應答->stop
#include "ina219.h"

void INA_REG_Write(unsigned char reg,unsigned int data);

#ifdef INA_INSIDE_IIC
void INA_IIC_Delay()
{unsigned char x;
        for(x=1;x>0;x--)
        {
                __NOP();__NOP();__NOP();__NOP();__NOP();
        }
}
void INA_IIC_INIT(void)                //IIC初始化
{
        GPIO_InitTypeDef GPIO_INIT;
        RCC_APB2PeriphClockCmd(IIC_RCC,ENABLE);

        GPIO_INIT.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_INIT.GPIO_Pin=IIC_SDA | IIC_SCL;
        GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(IIC_PORT,&GPIO_INIT);

        IIC_SDA_H;
        IIC_SCL_H;
}

void INA_IIC_SDA_OUT(void)        //SDA配置為輸出
{
        GPIO_InitTypeDef GPIO_INIT;
        GPIO_INIT.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_INIT.GPIO_Pin=IIC_SDA ;
        GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(IIC_PORT,&GPIO_INIT);
}
void INA_IIC_SDA_IN(void)        //SDA配置為輸入
{
        GPIO_InitTypeDef GPIO_INIT;
        GPIO_INIT.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_INIT.GPIO_Pin=IIC_SDA ;
        GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(IIC_PORT,&GPIO_INIT);
}

void INA_IIC_Start(void)        //開始信號
{
        IIC_SDA_H;
        IIC_SCL_H;
        INA_IIC_Delay();
        IIC_SDA_L;
        INA_IIC_Delay();
        IIC_SDA_L;
}
void INA_IIC_Stop(void )        //結束信號
{
        IIC_SDA_L;
        IIC_SCL_H;
        INA_IIC_Delay();
        IIC_SDA_H;
        INA_IIC_Delay();
        IIC_SCL_L;

        IIC_SCL_H;
        IIC_SDA_H;
}
bool INA_IIC_ACK_Read(void)        //讀取應答信號
{
        bool ack;
        IIC_SDA_H;
        INA_IIC_SDA_IN();

        IIC_SCL_H;
        INA_IIC_Delay();
        if(IIC_SDA_READ() == SET) ack=false;
        else ack=true;
        IIC_SCL_L;
        INA_IIC_SDA_OUT();
        return ack;
}
void INA_IIC_ACK_Send(bool ack)        //發送應答信號
{
        IIC_SCL_L;
        if(ack == true)
                IIC_SDA_L;
        else IIC_SDA_H;
        IIC_SCL_H;
        INA_IIC_Delay();
        IIC_SCL_L;
}
void INA_IIC_Send_Byte(unsigned char byte)        //IIC發送一位數據
{
        unsigned char i;
        IIC_SCL_L;
        for(i=0;i<8;i++)
        {
                if(byte & 0x80 )        IIC_SDA_H;
                else IIC_SDA_L;
                IIC_SCL_H;
                INA_IIC_Delay();
                IIC_SCL_L;
                INA_IIC_Delay();
                byte<<=1;
        }
        INA_IIC_ACK_Read();
}
unsigned char  INA_IIC_Read_Byte(void)        //IIC讀取一位數據
{
        unsigned char i,byte=0;
        INA_IIC_SDA_IN();
        for(i=0;i<8;i++)
        {
                IIC_SCL_H;
                byte<<=1;
                if(IIC_SDA_READ() == SET) byte |= 0x01;
                else byte &= 0xFE;
                IIC_SCL_L;
                INA_IIC_Delay();
        }
        INA_IIC_SDA_OUT();
        return byte;
}
#endif
void INA_Read_Byte_s(unsigned char reg,unsigned char *data)        //讀兩位數據
{
        INA_IIC_Start();
        INA_IIC_Send_Byte(INA219_ADDRESS);        //發送INA219地址s
        INA_IIC_Send_Byte(reg);

        INA_IIC_Start();
        INA_IIC_Send_Byte(INA219_ADDRESS+0x01);        //設置iic為讀模式
        *data=INA_IIC_Read_Byte();
        data++;
        INA_IIC_ACK_Send(1);
        *data=INA_IIC_Read_Byte();
        INA_IIC_ACK_Send(0);
        INA_IIC_Stop();
}
void INA_REG_Write(unsigned char reg,unsigned int data)        //寫寄存器                測試成功
{
        unsigned char data_temp[2];
        data_temp[0]=(unsigned char )(data>>8);
        data_temp[1]=(unsigned char )(data & 0xFF);
        INA_IIC_Start();
        INA_IIC_Send_Byte(INA219_ADDRESS);        //發送INA219地址
        INA_IIC_Send_Byte(reg);                                                        //發送寄存器地址
        INA_IIC_Send_Byte(data_temp[0]);                                                //發送高8位數據
        data++;
        INA_IIC_Send_Byte(data_temp[1])        ;                                        //發送低8位數據
        INA_IIC_Stop();
}

void INA_Init(void )        
{
        INA_IIC_INIT();
        INA_REG_Write(INA219_REG_CONFIG,INA219_CONFIG_value);
        INA_REG_Write(INA219_REG_CALIBRATION,INA_CAL);
}
unsigned int INA_GET_Voltage_MV(void)        //獲取電壓(單位:mv)
{
        unsigned char data_temp[2];
        INA_Read_Byte_s(0x02,data_temp);
        return (int)((((data_temp[0]<<8)+data_temp[1]) >> 3)*4);        //右移3為去掉:bit2,CNVR,OVF三位,再乘以 4MV (官方文檔規定),得到當前總線的電壓值
}
unsigned int INA_GET_Current_MA(void)                //獲取電流(單位:mA)
{
        unsigned char data_temp[2];
        INA_REG_Write(INA219_REG_CONFIG,INA219_CONFIG_value);
        INA_Read_Byte_s(INA219_REG_CURRENT,data_temp);
        return (int)((((data_temp[0]<<8)+data_temp[1]))*IAN_I_LSB);                //得到寄存器的值在乘以每位對應的值(IAN_I_LSB)得到實際的電流
}
unsigned int INA_GET_Power_MW(void)                //獲取當前功率(單位:mw)
{
        unsigned char data_temp[2];
        INA_Read_Byte_s(INA219_REG_POWER,data_temp);
        return (int)(((data_temp[0]<<8)+data_temp[1])*INA_Power_LSB);        //得到寄存器的值在乘以每位對應的值(INA_Power_LSB)得到實際的功率
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品一区二区 | 日本 欧美 国产 | 国产农村妇女毛片精品久久麻豆 | 国产探花在线精品一区二区 | 欧美国产视频 | 国产一区二区三区精品久久久 | 日韩一二区 | 久久久观看 | 精品国产91 | 久久久国产精品入口麻豆 | 欧美不卡 | 亚洲精品免费在线 | 国产日韩一区 | 成人三级视频 | 成人免费淫片aa视频免费 | 日韩精品一区二区三区视频播放 | 99色综合| 91在线观看视频 | 午夜视频免费在线观看 | 狠狠夜夜 | 99久久精品国产一区二区三区 | 91在线成人 | 亚洲综合成人网 | 综合成人在线 | 久久精品中文 | 成人国产免费视频 | 日韩中文在线视频 | 日韩1区| 亚洲高清在线 | 一区二区三区高清 | 免费看色| 国产精品福利久久久 | 国产精品久久av | 国产亚洲一区在线 | 国产福利91精品一区二区三区 | 黄色国产在线视频 | 欧美另类视频 | 亚洲国产成人av | 国产高清视频在线 | 精品亚洲一区二区三区四区五区 | 成人午夜电影在线观看 |