标题:
STC12C5A60S2单片机IIC总线程序(实测通过)
[打印本页]
作者:
WANGXL
时间:
2020-5-3 23:16
标题:
STC12C5A60S2单片机IIC总线程序(实测通过)
不讲原理(网上详细讲原理的有很多),只讲其代码实现。
(说明:实测通过)
IIC.H文件
#ifndef _IIC_C_
#define _IIC_C_
#include "STC12C5A60S2.H"
#include "intrins.h"
#define IIC_SDA P10
#define IIC_SCL P11
void IIC_IO_Init();
void IIC_Delay();
void Delayms(unsigned int ms);
void IIC_Start();
void IIC_Stop();
void IIC_WriteByte(uchar Dat);
unsigned char IIC_ReadByte();
void IIC_Ack();
bit IIC_WaitAck();
void IIC_WriteData(unsigned char DeciceAddress,unsigned char RegisterAddress,unsigned char Dat);
unsigned char IIC_ReadData(unsigned char DeciceAddress,unsigned char RegisterAddress);
#endif
复制代码
部分IIC.c文件
#include "IIC.h"
void Delayms(unsigned int ms) //毫秒级延时函数
{
unsigned char i, j;
unsigned int k;
for(k=0;k<ms;k++)
{
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
void Delay2us() //2us延时,用于稳定IO状态
{
unsigned char i;
_nop_();
_nop_();
i = 2;
while (--i);
}
void IIC_Delay() //IIC延时,需大于4.7us,这里取8us
{
unsigned char i;
i = 19;
while (--i);
}
void IIC_IO_Init() //IO口初始化,使总线处于空闲状态
{
IIC_SCL = 1;
IIC_SDA = 1;
}
void IIC_Start() //总线开始
{
IIC_SDA = 1;
IIC_SCL = 1;
IIC_Delay();
IIC_SDA = 0;
IIC_Delay();
IIC_SCL = 0;
IIC_Delay();
}
void IIC_Stop() //总线结束
{
IIC_SCL = 0;
IIC_SDA = 0;
IIC_Delay();
IIC_SCL = 1;
IIC_Delay();
IIC_SDA = 1;
IIC_Delay();
}
复制代码
需要完整版请下载 源文件:
IIC驱动.zip
2020-5-3 23:16 上传
点击文件名下载附件
下载积分: 黑币 -5
1.56 KB, 下载次数: 87, 下载积分: 黑币 -5
作者:
feng_li
时间:
2021-8-3 18:52
我从STC89C52 IIC移植过来的,改了_nop_()次数,也不行了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1