您当前的位置: 首页 > 

仙剑情缘

暂无认证

  • 4浏览

    0关注

    333博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

IO模拟I2C

仙剑情缘 发布时间:2018-07-14 06:46:02 ,浏览量:4

#include "reg52.h"

#define SDA P1^0

#define SCL P1^1

//延时函数,根据MCU时钟不同调整到1ms void delay_ms(u16 x) { u8 i; for(;x>0;x--) {   for(i=217;i>0;i--); } } static void set_sda(u8 lev){ if(lev) SDA = 1; else SDA = 0; } static void set_scl(u8 lev){ if(lev) SCL = 1; else SCL = 0; } static void sda_input_mode(void){

// TODO  

}  static void SomeNOP(void)   {   u16 i=14;   while(i--);   }      /*-------------------------------------------------------------------------------- I2C start ---------------------------------------------------------------------------------*/ static void I2CStart(void) { set_sda(1); set_scl(1); SomeNOP();//INI set_sda(0); SomeNOP(); //START set_scl(0); } /*-------------------------------------------------------------------------------- I2C stop ---------------------------------------------------------------------------------*/ static void I2CStop(void) { set_sda(0); SomeNOP(); //INI set_scl(1); SomeNOP(); set_sda(1); //STOP } /*--------------------------------------------------------------------------------  check ACK ---------------------------------------------------------------------------------*/ static u8 WaitAck(void) { u8 errtime=255; //ACK timeout count set_sda(1); SomeNOP(); set_scl(1); SomeNOP(); sda_input_mode(); SomeNOP(); while(SDA)  { errtime--;  if(!errtime)  {  I2CStop(); return 1;  }  } set_scl(0); return 0; } /*--------------------------------------------------------------------------------  send no ACK ---------------------------------------------------------------------------------*/ static void SendNotAck(void)  { set_scl(1); SomeNOP(); set_sda(1);   SomeNOP(); set_scl(0);  }  /********************************************************  send ACK  *********************************************************/ static void SendAck(void)  { set_sda(0); SomeNOP(); set_scl(1); SomeNOP(); set_scl(0); SomeNOP(); set_sda(1);  } /*--------------------------------------------------------------------------------  write byte ---------------------------------------------------------------------------------*/ static void I2CSendByte(u8 ch) { u8 i=8; while(i--) { set_scl(0); SomeNOP(); if(ch&0x80) set_sda(1); else set_sda(0); ch
关注
打赏
1658017818
查看更多评论
立即登录/注册

微信扫码登录

0.0386s