/******************************************************************************
* Title: iic.c
* Create Date: 2014-April-4
* MCU: PIC16F1939
* Clock: 11.0592Mhz
* Description: IIC处理
AT24C128读写,BMP085读写
* Company: raydose
* Author:
* E-MAIL:
* Last Update: 2014-April-14
* Version: V1.0
******************************************************************************/
#include"iic.h"
// IIC端口定义
#define SCL IIC_SCL // 时钟线
#define SDA IIC_SDA // 数据线
#define SDA_TRI IIC_SDA_TRI
#define Delay() asm("nop");asm("nop");asm("nop");asm("nop")
/**************************************************************************
Function: IIC_Init
Description: 初始化IIC
Input: no
Output: no
Return: no
**************************************************************************/
void IIC_Init(void)
{
PORTC |= (1<<1) | (1<<0); // RC1、RC0设为高电平
TRISC |= (1<<1); // RC1为输入
TRISC &= ~(1<<0); // RC0设为输出
// PORTC |= (1<<4) | (1<<3); // RC4、RC3设为高电平
// TRISC |= (1<<4); // RC4为输入
// TRISC &= ~(1<<3); // RC3设为输出
}
/**************************************************************************
Function: IIC_Start
Description: 启动总线(SCL为1,SDA产生下降沿)
启动状态的SCL为0
Input: no
Output: no
Return: no
**************************************************************************/
void IIC_Start(void)
{
GIE = 0; // 禁止全局中断
SDA = 1;
SCL = 1;
Delay();
SDA = 0; // 产生下降沿
Delay();
SCL = 0;
GIE = 1; // 使能全局中断
}
/**************************************************************************
Function: IIC_Stop
Description: 停止总线(SCL为1,SDA产生上升沿)
停止状态的SCL为1
Input: no
Output: no
Return: no
**************************************************************************/
void IIC_Stop(void)
{
GIE = 0; // 禁止全局中断
SDA = 0;
SCL = 1;
Delay();
SDA = 1; // 产生上升沿
Delay();
GIE = 1; // 使能全局中断
}
/**************************************************************************
Function: IIC_RecAck
Description: 接收应答信号(SCL为1,读取SDA)
Input: no
Output: no
Return: 应答信号,1为失败,0为成功
**************************************************************************/
bit IIC_RecAck(void)
{
uint8_t error;
GIE = 0; // 禁止全局中断
SDA_TRI = 1; // 设为输入
//SDA = 1;
//Delay();
SCL = 1;
Delay();
error = SDA;
SDA_TRI = 0; // 设为输出
SCL = 0;
GIE = 1; // 使能全局中断
return error;
}
/**************************************************************************
Function: IIC_Ack
Description: 发送应答信号(SDA为0,SCL产生下降沿)
Input: no
Output: no
Return: no
**************************************************************************/
void IIC_Ack(void)
{
GIE = 0; // 禁止全局中断
SDA = 0; // 写应答信号
SCL = 1;
Delay();
SCL = 0; // 下降沿
Delay();
GIE = 1; // 使能全局中断
}
/**************************************************************************
Function: IIC_NoAck
Description: 发送非应答信号(SDA为1,SCL产生下降沿)
Input: no
Output: no
Return: no
**************************************************************************/
void IIC_NoAck(void)
{
GIE = 0; // 禁止全局中断
SDA = 1; // 写非应答信号
SCL = 1;
Delay();
SCL = 0; // 下降沿
Delay();
GIE = 1; // 使能全局中断
}
/**************************************************************************
Function: IIC_SendByte
Description: 发送一个字节(SDA写入1位,SCL产生下降沿)
Input: byte 发送的字节
Output: no
Return: no
**************************************************************************/
void IIC_SendByte(uint8_t byte)
{
uint8_t i;
GIE = 0; // 禁止全局中断
for (i=8; i>0; --i)
{
if (byte & 0x80) // 先发送高位
{
SDA = 1;
}
else
{
SDA = 0;
}
byte <<= 1;
SCL = 1;
Delay();
SCL = 0; // 下降沿
Delay();
}
GIE = 1; // 使能全局中断
//IIC_RecAck(); // 接收应答信号
}
/**************************************************************************
Function: IIC_RecvByte
Description: 接收一个字节(SCL产生上升沿,读取SDA)
Input: no
Output: no
Return: 接收的字节
**************************************************************************/
uint8_t IIC_RecvByte(void)
{
uint8_t i;
uint8_t byte = 0;
GIE = 0; // 禁止全局中断
SDA_TRI = 1; // 设为输入
for (i=8; i>0; --i)
{
SCL = 1; // 上升沿
Delay();
byte <<= 1; // 先接收高位
byte |= SDA;
SCL = 0;
Delay();
}
SDA_TRI = 0; // 设为输出
GIE = 1; // 使能全局中断
return byte;
}
iic.rar_MáS
版权申诉
158 浏览量
2022-09-20
21:45:39
上传
评论
收藏 1KB RAR 举报
四散
- 粉丝: 52
- 资源: 1万+
最新资源
- 基于matlab实现 powell算法 用matlab实现,使用方法内附详细说明.rar
- 基于matlab的手写字体识别程序,并对结果进行保存.rar
- 基于c语言指纹识别demo代码 包括了指纹图像方向图计算、频率计算、gabor滤波器增强,细化,特征点提取,特征点匹配.rar
- 基于c++NSGA-2思想的多目标优化程序,采用进化算法处理多目标实值优化问题.rar
- Linux系统中常用权限管理命令
- Coello Coello等人提出了MOPSO 该程序基于matlab实现针对测试函数matlab程序
- Linux系统中常用权限管理命令
- AIR-AP1815-K9-ME-8-5-182-0.tar For Cisco AP1815
- 实验七.zip
- ESP8266刷固件软件flash-download-tools-v3.6.5,AT固件,机智云固件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈