[N76E003][PCA9540BD][IIC扩展器] 一组IIC变两组IIC 使用方法

发布者:daasddla最新更新时间:2022-08-15 来源: csdn 手机看文章 扫描二维码
随时随地手机看文章

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/* -----------------------------------------宏定义-----------------------------------------*/


/* -----------------------------------------头文件-----------------------------------------*/

#include "main.h"


/* -----------------------------------------结构体定义-------------------------------------*/

code IIC_TYPE PCA9540BD = {2, 0xE0};

/* -----------------------------------------全局变量定义-----------------------------------*/


/* -----------------------------------------应用程序---------------------------------------*/

void PCA9540BD_Init(void)

{

    IIC_Init();          // I2C初始化

}


/*********************************************

函数名:PCA9540BD_Write_DATA

功  能:写 地址 数据

形  参:addr 地址   dat 数据

返回值:

备  注:

作  者:薛建强

时  间:2020/05/09

**********************************************/

void PCA9540BD_Write_DATA(const uint8_t addr, const uint8_t DATA)

{

    if (addr);

    IIC_Start();                 // 启动

    IIC_WriteByte(PCA9540BD.ADDR); // 设备地址

    IIC_Wait_ACK();              // 等待数据响应

    IIC_WriteByte(DATA);         // 发送数据

    IIC_Wait_ACK();              // 等待数据响应

    IIC_Stop();                  // 停止

}

/*********************************************

函数名:PCA9540BD_Read_DATA

功  能:读地址数据

形  参:addr--寄存器地址

返回值:

备  注:

作  者:薛建强

时  间:2020/05/09

**********************************************/

uint8_t PCA9540BD_Read_DATA(const uint8_t addr)

{

    uint8_t GET_DATA = 0;

    if (addr);

    IIC_Start();                        // 启动

    IIC_WriteByte(PCA9540BD.ADDR | 1);  // 发送地址

    IIC_Wait_ACK();                     // 等待数据响应


    GET_DATA = IIC_ReadByte();          // 获取数据

    IIC_Wait_ACK();                     // 等待数据响应


    IIC_Stop();                         // 停止

    return GET_DATA;

}


/*********************************************

函数名:PCA9540BD_Switch_Ch

功  能:选择IIC通道

形  参:0--IIC0 1--IIC1

返回值:

备  注:

作  者:薛建强

时  间:2020/05/09

使  用:

**********************************************/

void PCA9540BD_Switch_Ch(const uint8_t ch)

{

    if (ch == 0)

    {

        PCA9540BD_Write_DATA(0, 0x04);

    }

    else if (ch == 1)

    {

        PCA9540BD_Write_DATA(0, 0x05);

    }

}



/*********************************************

函数名:PCA9540BD_Switch_Ch

功  能:关闭IIC通道

形  参:

返回值:

备  注:

作  者:薛建强

时  间:2020/05/09

使  用:

**********************************************/

void PCA9540BD_Off_Ch(void)

{

    PCA9540BD_Write_DATA(0, 0x00);

}


#ifndef _PCA9540BD_H

#define _PCA9540BD_H

/* -----------------------------------------宏定义-----------------------------------------*/


/* -----------------------------------------头文件-----------------------------------------*/

#include "main.h"


/* -----------------------------------------结构体定义-------------------------------------*/


/* -----------------------------------------全局变量定义-----------------------------------*/


/* -----------------------------------------应用程序---------------------------------------*/

void    PCA9540BD_Init(void);

void    PCA9540BD_Write_DATA(const uint8_t addr, const uint8_t DATA);

uint8_t PCA9540BD_Read_DATA(const uint8_t addr);

void PCA9540BD_Switch_Ch(const uint8_t ch);

void PCA9540BD_Off_Ch(void);

#endif

引用地址:[N76E003][PCA9540BD][IIC扩展器] 一组IIC变两组IIC 使用方法

上一篇:单片机 N76E003 实现 QC2.0 QC3.0 USB Type-C协议
下一篇:[ESP32][esp-idf] https和mqtt同时签名冲突解决

推荐阅读最新更新时间:2024-11-08 15:21

N76E003 看门狗定时器 WDCON
一、复位功能配置 N76E003 提供一个看门狗定时器(WDT),它可以配置成一个超时复位定时器用于复位整个设备。一旦由于外界干扰设备进入非正常状态或挂起,看门狗可以复位恢复系统。 WDTEN (CONFIG4 )初始化WDT工作在超时复位定时器或通用定时器模式。 二、通用定时器配置 WDT带一个独立的分频器用于分频10K LIRC时钟。分频器的时钟分频可选,来决定超时间间隔。当达到超时间隔,系统会被从空闲或掉电模式唤醒,且如果WDT中断使能会产生一个中断事件。如果WDT初始化为一个超时复位定时器,在经过一个延时周期而软件没有任何动作后会产生系统复位。 超时复位定时器 当配置 CONFIG 位 WDTEN (CON
[单片机]
<font color='red'>N76E003</font> 看门狗定时器 WDCON
N76E003 PWM中断及设定新的占空比
首先还是来看看PWM中断寄存器,及其含义。 PWM模块带有标志位 PWMF (PWMCON0.5) 用来标志当前 PWM周期完成状态。PWMF通过软件清零。 别忘记了使能PWM中断,以及开启总中断。 再来看看PWM中断的中断号。 就是这么简单,就是这么直接,接下来我们就开始配置代码吧。 在本次的例程中,我们将在中断中,修改初始设定的占空比,最后再逻辑分析仪中进行查看。 void main(void) { Set_All_GPIO_Quasi_Mode;//所有IO设置为双向模式 EA=1;//开启总中断 set_EPWM;//使能pwm中断 PWM_INT_PWM4;//设定中
[单片机]
<font color='red'>N76E003</font> PWM中断及设定新的占空比
N76E003红外解码程序、电路
红外解码和红外编码的数据一一对应,在此不再对红外编码协议过多赘述 在N76E003单片机中,我们使用外部中断1进行读取红外信号。参照下图,进行配置,外部中断1的引脚为P17 外部中断1:中断号为2 IE = 0x84; //允许总中断中断,使能 INT1 外部中断 TCON = 0x10; //触发方式为脉冲负边沿触发 我们编写的红外解码程序,思路大致就是根据下图中的第一个108ms中的数据格式进行解码 void IR_IN() interrupt 2 using 0//中断服务程序 { unsigned char j,k; EX1 = 0; //禁用外部中断1
[单片机]
<font color='red'>N76E003</font>红外解码程序、电路
N76E003 HMC5883
HMC5883.c #include N76E003.h #include Common.h #include Delay.h #include SFR_Macro.h #include Function_define.h #include HMC5883.h #include math.h //Keil library #include stdlib.h //Keil library #include stdio.h //Keil library #include INTRINS.H //Keil library #define uchar unsigned char #
[单片机]
<font color='red'>N76E003</font> HMC5883
N76E003 标定 10Khz低速振荡器
N76E003内部有两个RC振荡器——16M(HIRC)、10K(LIRC)。高速16MHz误差在出厂时校准到±2%(全温度、全电压范围内),而10K低速振荡器,据说是35%的误差,一个小时定时,多出十几分钟就不足为奇了。 以下代码源于新唐官方例程,其运行原理大概是同时使用HLRC&LIRC定时器,两者同时开启,LIRC定时固定时间,溢出后查看HIRC计数值,求出差值(时间越短越精确),用于校准LIRC。 但在实际测试中,效果不理想,可能是个别芯片的问题,希望大家也能进行测试 //**********************************************************************
[单片机]
N76E003 避坑指南
单片机内部的10KHz低速振荡器,受温度影响较大,如需要精准定时,请使用16MHz振荡器或外部晶振。约±35%误差 (使用定时唤醒时,设定50S唤醒一次,一小时启动一次,竟然能偏差十几分钟。。。) 当单片机有多个中断程序时,请尽量设定好各自的优先级,或在需要时才打开对应中断位,不然程序运行速度可能会变慢。 下载引脚 CLK、DAT不能用来做IIC引脚(设置为开漏也不行) 引脚一旦设定为ADC,就无法通过关闭ADC(库函数)来恢复引脚功能,只能开启其他引脚ADC来恢复引脚功能。 (可以仔细看看库函数中ADC设定的方法,用来复用ADC引脚) 当同时使用串口1、串口0时,切勿开启中断优先级分配,否则可能会造成无法使用。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved