STC8H8K64U——I2C(PCF8591 查询方式)

2023-11-24 19:59

本文主要是介绍STC8H8K64U——I2C(PCF8591 查询方式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

i2c.c

查询方式与中断方式的代码区别不大。
i2c.h 和 main. c文件

#include "i2c.h"void I2C_Init(void)            //I2C初始化
{P_SW2 |= EAXFR;              //XFR寄存器使能P_SW2 |= I2C_S;              //I2C引脚I2CCFG = ENI2C|MSSL|MSSPEED; //允许I2C功能,主机模式I2CMSST = 0x00;   	
}	void I2C_Start(void)           //起始信号
{I2CMSCR = I2C_START;         //起始命令I2C_Wait();                  //等待MSCMD命令执行完毕
}void I2C_Stop(void)             //终止信号
{I2CMSCR = I2C_STOP;           //停止命令I2C_Wait();                   //等待MSCMD命令执行完毕	
}void I2C_ACK_R(void)	          //接收应答信号	
{I2CMSCR = I2C_RECEVIVE_ACK ;  //接收 ACK 命令I2C_Wait();                   //等待MSCMD命令执行完毕	
}void I2C_ACK_S(bit A)	          //发送应答信号
{
/*发送"0101"命令到I2CMSCR寄存器的MSCMD位后,控制器会自动读取I2CMSST的MSACKO位的数据当作ACK数据发送到SDA。*/if(A == 1)I2CMSST |= MSACKO;          //非应答信号elseI2CMSST &= ~MSACKO; 		    //应答信号I2CMSCR = I2C_SEND_ACK ;      //发送 ACK 命令I2C_Wait();                   //等待MSCMD命令执行完毕	
}	void I2C_SendByte(unsigned char dt)  //发送数据
{I2CTXD = dt;                       //写数据到数据缓冲区I2CMSCR = I2C_SEND_DATA;           //发送数据命令I2C_Wait();                        //等待MSCMD命令执行完毕	
}unsigned char I2C_ReceiveByte(void)  //接收数据
{I2CMSCR = I2C_RECEVIVE_DATA;       //接收数据命令I2C_Wait();                        //等待MSCMD命令执行完毕return I2CRXD;
}void I2C_Wait(void) 
{/*主机模式的I2C控制器执行完I2CMSCR寄存器中MSCMD命令后,会产生中断信号,硬件自动将MSIF位置一,向CPU发出中断请求,响应中断后, MSIF位必须软件清零*/	while(!(I2CMSST & MSIF));I2CMSST &= ~MSIF;  //中断标志位清零	}

实物图

这篇关于STC8H8K64U——I2C(PCF8591 查询方式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422475

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF