℡滴滴滴滴小城哥 2021-06-05 20:02 采纳率: 0%
浏览 21

请问我这段IIC底层代码有什么问题,为什么写不进去数据。

#include"intrins.h"
#include"iic.h"

sbit SCL = P2^0;
sbit SDA = P2^1;

//#define SCL P20
//#define SDA P21

void IIC_Start()
{
     SCL = 1;
     SDA = 1;
     delay2us();
     SDA = 0;
     delay2us();
     SCL = 0;
}

void IIC_Stop()
{

    SDA = 0;
    SCL = 1;

    delay2us();
    SDA = 1;
    delay2us();
}
void Write_IIC(unsigned char dat)
{
    unsigned char i;

    EA = 0;
    for(i=0; i<8; i++)
    {
        SCL = 0;
        delay2us();
        if(dat & 0x80)
        {    SDA = 1;   }
        else
        {    SDA = 0;   }
        delay2us();
        SCL = 1;
        delay2us();
        dat <<= 1;
        delay2us();
    }
    EA = 1;
    SCL = 1;
}
unsigned char Read_Iic()
{
    unsigned char i,dat;
    EA = 0;               
    for(i=0; i<8; i++)
    {
        SCL = 1;        
        delay2us();
        dat <<= 1;
        if(SDA)        
            dat |= 0x01;
        //delay2us();
        SCL = 0;    
        delay2us();
    }
    EA = 1;
    return dat;
}
void IIC_SendAck(unsigned char ack)
{
    SCL = 0;
    SDA = ack; delay2us();
    SCL = 1; delay2us();
    SCL = 0;
    SDA = 1;
    delay2us();
}
unsigned char IICRead_Byte(unsigned char add)
{
    unsigned char dat;
    IIC_Start();
    Write_IIC(0xA0);
    IIC_Ack();
    Write_IIC(add);
    IIC_Ack();
    IIC_Start();
    Write_IIC(0xA1);
    IIC_Ack();
    dat = Read_Iic();
    IIC_SendAck(0);
    IIC_Stop();
    return dat;
}
void IICWrite_Byte(unsigned char add, unsigned char dat)
{    
    IIC_Start();
    Write_IIC(0xA0);
    IIC_Ack();
    Write_IIC(add);
    IIC_Ack();
    Write_IIC(dat);
    IIC_Ack();
    IIC_Stop();
    delay2us();delay2us();delay2us();delay2us();delay2us();delay2us();delay2us();delay2us();
}
unsigned char IIC_Ack()
{
    unsigned char count;    
    SCL = 1;delay2us();
    count = SDA;
    SCL = 0;delay2us();
    return count;
}

void delay2us()
{
    unsigned char i = 5;
    do
    {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();        
    }
    while(i--);
}
 

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-06-08 09:57
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

    ​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿