i2c.c
来自「用c8051f320单片机,任选两个IO口进行模拟IIC操做,用软件IIC对加速」· C语言 代码 · 共 202 行
C
202 行
#include "MEMSIC.h"
bit Ack;
uint8 xdata Temp0;
uint8 xdata Temp1;
uint8 xdata Temp2;
uint8 xdata Temp3;
int16 xdata Ax;
int16 xdata Ay;
void IIC_Start (void)
{
Sda=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Sda=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void IIC_Stop (void)
{
Sda=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Sda=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void IIC_Read_Ack (void)
{
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
if(Sda==1)
{
Ack=0;
}
else
{
Ack=1;
}
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void IIC_Write_Ack (void)
{
Sda=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void IIC_Write_NoAck (void)
{
Sda=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
unsigned char IIC_Read_Byte (void)
{
uint8 bitCount;
uint8 Temp;
Sda=1;
for(bitCount=0x00;bitCount<0x08;bitCount++)
{
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Temp=Temp<<1;
if(Sda==1)
{
Temp+=0x01;
}
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
return(Temp);
}
void IIC_Write_Byte (unsigned char a)
{
uint8 bitCount;
uint8 Temp;
for(bitCount=0x00;bitCount<0x08;bitCount++)
{
Temp=a;
if((Temp<<bitCount)&0x80)
{
Sda=1;
}
else
{
Sda=0;
}
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
}
}
void Read_Acc (void) //read acceleration
{
IIC_Start ();
IIC_Write_Byte (0x20);
IIC_Read_Ack ();
IIC_Write_Byte (0x01);
IIC_Read_Ack ();
IIC_Stop ();
IIC_Start ();
IIC_Write_Byte (0x21);
IIC_Read_Ack ();
*(&Temp0)=IIC_Read_Byte ();
IIC_Write_Ack ();
*(&Temp1)=IIC_Read_Byte ();
IIC_Write_Ack ();
*(&Temp2)=IIC_Read_Byte ();
IIC_Write_Ack ();
*(&Temp3)=IIC_Read_Byte ();
IIC_Write_NoAck ();
IIC_Stop ();
Ax=Temp0;
Ax=Ax<<8;
Ax+=Temp1;
Ay=Temp2;
Ay=Ay<<8;
Ay+=Temp3;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?