亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? i2cio.c

?? TQ公司的STK16x開(kāi)發(fā)系統(tǒng)的源碼
?? C
字號(hào):
/* File: I2CIO.C */

/****************************************************************************
*
* STK16X.I2CIO
* ============
*
* Low level routines for I2C bus control 
*                 
* TQ-Systems GmbH                                                         
* ---------------                                                         
* Customer: TQ-Components
* Project : STK16XSW
* Tools   : uVision 2.05
*
* 
* Rev: Date:     Name:            Modification:
* ----+---------+----------------+------------------------------------------
* 100  16.01.01  A. Lichte        taken over from STK16X.506                
*****************************************************************************/

/****************************************************************************
*
*                             availability summary
*
* available for Starterkit: STK16X 
* conformed for Starterkit: STK16X 
* available for Modul     : TQM164   TQM165   TQM165U  TQM166  TQM167
*                           TQM167LC TQM167U  TQM167UL 
* conformed for Modul     : TQM164   TQM165   TQM165U  TQM166  TQM167
*                           TQM167LC TQM167U  TQM167UL 
*****************************************************************************/

/*==========================================================================*
* pragmas:
*===========================================================================*/

/*=========================================================================*
* include files (#INCLUDE):
*==========================================================================*/
/*-------------------------------------------------------------------------*
* standard include files:
*--------------------------------------------------------------------------*/
#include <stdlib.h>             
#include <ctype.h>              /* typecast functions          */
#include <string.h>             /* string functions            */
#include <setjmp.h>             /* global jump functions       */
#include <stdio.h>              /* standard I/O functions      */
#include <absacc.h>             /* absolute accesss            */
#include <intrins.h>            /* Intrinsic functions         */
#include <stdarg.h>
#include <reg167.h>             /* special function register   */

/*-------------------------------------------------------------------------*
* project specific include files:
*--------------------------------------------------------------------------*/
#include "timer.h"
#include "i2cio.h"

/*==========================================================================*
* module internal definitions (#DEFINE):
*===========================================================================*/
sbit I2C_SCL         = P3^0;
sbit I2C_SCL_DIR     = DP3^0;
sbit I2C_SDA         = P3^1;
sbit I2C_SDA_DIR     = DP3^1;

sbit I2C_SCL_164     = P8^0;
sbit I2C_SCL_DIR_164 = DP8^0;
sbit I2C_SDA_164     = P8^1;
sbit I2C_SDA_DIR_164 = DP8^1;

/*==========================================================================*
* module internal type declarations (TYPEDEF):
*===========================================================================*/

/*==========================================================================*
* module internal constants (CONST):
*===========================================================================*/
#define TSU_STA   5 // minimum required setup time for start condition in us
#define THD_STA   5 // minimum required hold time for start condition in us
#define TSU_STO   5 // minimum required setup time for stop condition in us

#define TCL_LOW   5	// minimum required time for SCL HIGH in us
#define TCL_HIGH  5 // minimum required time for SCL LOW in us

/*==========================================================================*
* extern available constants (CONST):
*===========================================================================*/

/*==========================================================================*
* modul internal variables:
*===========================================================================*/

/*==========================================================================*
* globale external available variables (EXTERN):
*===========================================================================*/

/*==========================================================================*
* modul internal functions:
*===========================================================================*/

/*--------------------------------------------------------------------------*
* void loop_delay_us(USHORT len)
*---------------------------------------------------------------------------*
* FT: generate delay for "len" us (no precise timer, for developing only!)
* EP: -
* RW: -
* GP: -
*---------------------------------------------------------------------------*/
void loop_delay_us(USHORT len)
{
  while(len--);
}

/*--------------------------------------------------------------------------*
* void i2c_start(void)
*---------------------------------------------------------------------------*
* FT: start new I2C bus cycle
* EP: -
* RW: -
* GP: -
*---------------------------------------------------------------------------*/
void i2c_start(void)
{
  if (TQMMOD == TQM164)
  {
    I2C_SCL_164     = 0;
    I2C_SCL_DIR_164 = 1;        	
    I2C_SDA_164     = 1;   // start condition for I2C: 
    I2C_SDA_DIR_164 = 1;        	
    I2C_SCL_164     = 1;   // (HIGH to LOW transition of SDA while SCL is HIGH)
    loop_delay_us(TSU_STA);
    I2C_SDA_164     = 0;
    loop_delay_us(THD_STA);
    I2C_SCL_164     = 0;
    I2C_SDA_DIR_164 = 0;   // set I2C data line as input   
    I2C_SDA_164     = 1;			
  }
  else
  {
    I2C_SCL     = 0;
    I2C_SCL_DIR = 1;        	
    I2C_SDA     = 1;       // start condition for I2C:
    I2C_SDA_DIR = 1;        	
    I2C_SCL     = 1;       // (HIGH to LOW transition of SDA while SCL is HIGH)
    loop_delay_us(TSU_STA);
    I2C_SDA     = 0;
    loop_delay_us(THD_STA);
    I2C_SCL     = 0;
    I2C_SDA_DIR = 0;       // set I2C data line as input
    I2C_SDA     = 1;			
  }
}

/*--------------------------------------------------------------------------*
* void i2c_stop(void)
*---------------------------------------------------------------------------*
* FT: stop I2C bus cycle
* EP: -
* RW: -
* GP: -
*---------------------------------------------------------------------------*/
void i2c_stop(void)
{
  if (TQMMOD == TQM164)
  {
    I2C_SCL_164     = 0;
    I2C_SCL_DIR_164 = 1;   // set I2C clock line as output
    I2C_SDA_164     = 0;   // stop condition for I2C: 
    I2C_SDA_DIR_164 = 1;   // set I2C data line as output
    I2C_SCL_164     = 1;   // (LOW to HIGH transition of SDA while SCL is HIGH)
    loop_delay_us(TSU_STA);
    I2C_SDA_164     = 1;
    loop_delay_us(THD_STA);
    I2C_SCL_164     = 0;
    I2C_SDA_164     = 1;			
    I2C_SDA_DIR_164 = 0;   // set I2C data line as input
    I2C_SCL_DIR_164 = 0;   // set I2C clock line as input
  }
  else
  {
    I2C_SCL     = 0;
    I2C_SCL_DIR = 1;       // set I2C clock line as output
    I2C_SDA     = 0;	   // stop condition for I2C: 
    I2C_SDA_DIR = 1;       // konfiguriere I2C-Datenleitung als Ausgang
    I2C_SCL     = 1;       // (LOW-to-HIGH transition of SDA while SCL is HIGH)
    loop_delay_us(TSU_STA);
    I2C_SDA     = 1;
    loop_delay_us(THD_STA);
    I2C_SCL     = 0;
    I2C_SDA     = 1;			
    I2C_SDA_DIR = 0;       // set I2C data line as input
    I2C_SCL_DIR = 0;       // set I2C clock line as input
  }
}

/*--------------------------------------------------------------------------*
* BYTE i2c_receive_frame(void)
*---------------------------------------------------------------------------*
* FT: read 8 bit frame from I2C-Bus and send acknowledge
* EP: -
* RW: -
* GP: -
*---------------------------------------------------------------------------*/
BYTE i2c_receive_frame(void)
{ BYTE i;
  BYTE frame;               /* data frame to be read from I2C bus */

  if(TQMMOD == TQM164)
  {
    I2C_SDA_DIR_164 = 0;   // set I2C data line as input
    for(i=0; i<8; i++)     // 8 bit read accces as I2C bus master
    {
      I2C_SCL_164 =0;
      loop_delay_us(TCL_LOW);
      frame = frame << 1; 
      frame |=(I2C_SDA_164&0x01);
      I2C_SCL_164 = 1;
      loop_delay_us(TCL_HIGH);
    }
    I2C_SCL_164 = 0;
    loop_delay_us(TCL_LOW);
    i = I2C_SDA_164;       // send acknowledge to I2C bus slave
    I2C_SCL_164 = 1;
    loop_delay_us(TCL_LOW);
    I2C_SCL_164 = 0;
    return (frame);
  }
  else
  {
    I2C_SDA_DIR = 0;       // set I2C data line as output
    for(i=0; i<8; i++)     // 8 bit read accces as I2C bus master
    {
      I2C_SCL = 0;
      loop_delay_us(TCL_LOW);
      frame = frame << 1; 
      frame |= (I2C_SDA&0x01);
      I2C_SCL = 1;
      loop_delay_us(TCL_HIGH);
    }
    I2C_SCL = 0;
    loop_delay_us(TCL_LOW);
    i = I2C_SDA;           // send acknowledge to I2C bus slave
    I2C_SCL = 1;
    loop_delay_us(TCL_LOW);
    I2C_SCL = 0;
    return (frame);
  }
}

/*--------------------------------------------------------------------------*
* BOOL i2c_send_frame(BYTE frame)
*---------------------------------------------------------------------------*
* FT: send 8 bit data to I2C bus and check acknowledge
* EP: frame = data to be sent to I2C bus
* RW: TRUE = function successfully; FALSE = function failed (no acknowledge)
* GP: -
*---------------------------------------------------------------------------*/
BOOL i2c_send_frame(BYTE frame)
{ BYTE i;

  if (TQMMOD == TQM164)
  {
    I2C_SDA_DIR_164 = 1;           // set I2C data line as output
    for(i=(1<<7); i>0; i=(i>>1))   // 8 bit write acccess as I2C bus master 
    {
      I2C_SDA_164 = ((frame & i) != 0); 
      loop_delay_us(TCL_LOW);
      I2C_SCL_164 = 1;
      loop_delay_us(TCL_HIGH);
      I2C_SCL_164 = 0;
    }
    I2C_SDA_DIR_164 = 0;  	       // set I2C data line as input
    loop_delay_us(TCL_LOW);
    I2C_SCL_164 = 1;
    i = !I2C_SDA_164; 		       // read acknowledge from I2C slave
    I2C_SCL_164 = 0;
    return (i);
  }
  else
  {
    I2C_SDA_DIR = 1;               // set I2C data line as output
    for(i=(1<<7); i>0; i=(i>>1))   // 8 bit write acccess as I2C bus master 
    {
      I2C_SDA = ((frame & i) != 0); 
      loop_delay_us(TCL_LOW);
      I2C_SCL = 1;
      loop_delay_us(TCL_HIGH);
      I2C_SCL = 0;
    }
    I2C_SDA_DIR = 0;  		       // set I2C data line as input
    loop_delay_us(TCL_LOW);
    I2C_SCL = 1;
    i = !I2C_SDA; 		           // read acknowledge from I2C slave
    I2C_SCL = 0;
    return (i);
  }
}

/*==========================================================================*
* extern available functions:                                           
*===========================================================================*/

/*--------------------------------------------------------------------------*
* BOOL i2c_write(BYTE adr, USHORT data, ...)
*---------------------------------------------------------------------------*
* FT: write data to I2C bus
* EP:  adr = I2C bus address of receiver
*     data = 1st argument: number of n bytes to be written (n) 
             2nd..(n+1)nd argument: data bytes to be written
* RV: TRUE = function succesfully; FALSE = function failed
* GP: -
*---------------------------------------------------------------------------*/
BOOL i2c_write(BYTE adr, USHORT data, ...)
{ USHORT *pdata = &data+1;
  USHORT count = data;
  
  i2c_start();
  /* send I2C bus address and prepare write access: */
  if (!i2c_send_frame((adr << 1)) & 0xFE)
  {
    i2c_stop();
    return (FALSE);
  }

  while (count--)
  {
    if (!i2c_send_frame((BYTE)*pdata++))    // write data to I2C bus
    {
      i2c_stop();
      return FALSE;
    }
  }

  i2c_stop();
  return (TRUE);
}

/*--------------------------------------------------------------------------*
* BOOL i2c_read(BYTE adr, USHORT count, USHORT *pdata, ...)
*---------------------------------------------------------------------------*
* FT: read data from I2C bus
* EP:   adr = I2C bus address of slave to read from
*     count = number of bytes to be read
*     pdata = pointer to data to be read
* RV: TRUE = function succesfully; FALSE = function failed
* GP: 
*---------------------------------------------------------------------------*/
BOOL i2c_read(BYTE adr, USHORT count, USHORT *pdata, ...)
{
  i2c_start();
  /* send I2C bus address and prepare read access: */
  if (!i2c_send_frame((adr << 1) | 0x01)) 
  {
    i2c_stop();
    return (FALSE);
  }
  
  while(count--)
  {
    *(pdata++) = (USHORT) i2c_receive_frame();  // read data from I2C bus
  }

  i2c_stop();
  return (TRUE);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97se狠狠狠综合亚洲狠狠| 欧美日韩一区二区三区免费看| 亚洲视频1区2区| 欧美高清激情brazzers| av电影天堂一区二区在线| 在线亚洲一区观看| 国产一区二区在线影院| 五月婷婷久久综合| 亚洲男女毛片无遮挡| www久久精品| 91精品国产综合久久小美女| 91日韩在线专区| 成人夜色视频网站在线观看| 男女视频一区二区| 亚洲午夜久久久久久久久电影网| 国产午夜精品久久久久久免费视 | 午夜精品福利一区二区三区av | 国产精品一区二区你懂的| 视频一区视频二区在线观看| 亚洲色图一区二区| 中国色在线观看另类| 久久色中文字幕| 日韩欧美视频一区| 88在线观看91蜜桃国自产| 欧美在线视频你懂得| 91理论电影在线观看| 丁香一区二区三区| 国产剧情av麻豆香蕉精品| 九色|91porny| 另类中文字幕网| 蜜桃av一区二区在线观看| 日韩精品午夜视频| 日本欧美在线看| 日韩精品久久久久久| 五月天亚洲婷婷| 亚洲gay无套男同| 天堂成人免费av电影一区| 亚洲自拍偷拍九九九| 一区二区三区四区乱视频| 亚洲欧美日韩一区二区| 亚洲色图在线看| 亚洲精品国产无套在线观| 亚洲精品v日韩精品| 一区二区三区中文字幕| 亚洲一区二区三区在线播放| 亚洲国产精品久久人人爱| 日日夜夜一区二区| 久久精品国产一区二区三| 麻豆91精品91久久久的内涵| 久久国产尿小便嘘嘘尿| 国产乱人伦偷精品视频不卡| 国产成人99久久亚洲综合精品| 丰满少妇在线播放bd日韩电影| 成人午夜av电影| 色婷婷精品大在线视频| 欧美人狂配大交3d怪物一区 | 国产天堂亚洲国产碰碰| 国产午夜精品在线观看| 国产精品免费视频网站| 17c精品麻豆一区二区免费| 一区二区三区美女| 免费观看一级欧美片| 国产乱色国产精品免费视频| 99久久精品国产毛片| 欧美在线免费播放| 日韩欧美中文字幕精品| 国产精品女同一区二区三区| 亚洲视频在线一区| 午夜精品久久久久久不卡8050| 久久99国产精品久久| 波多野结衣精品在线| 欧美性受xxxx黑人xyx性爽| 日韩欧美一区在线观看| 国产精品久久久久久一区二区三区| 亚洲另类色综合网站| 蜜桃视频在线一区| www.欧美.com| 91精品国产免费| 国产精品三级久久久久三级| 一区二区成人在线观看| 国产一区二区在线免费观看| 一本大道av伊人久久综合| 日韩欧美一区中文| 亚洲女子a中天字幕| 麻豆高清免费国产一区| 91在线观看成人| wwwwxxxxx欧美| 亚洲一区二区三区视频在线| 国产精品综合二区| 欧美日韩一级大片网址| 国产精品久久久久久久久果冻传媒| 亚洲6080在线| www.亚洲色图.com| 精品国产免费视频| 午夜不卡在线视频| 成人av电影在线观看| 欧美va在线播放| 亚洲成a人在线观看| 白白色亚洲国产精品| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲成人一区在线| 成人a免费在线看| 精品成人一区二区三区| 视频在线观看一区| 在线精品国精品国产尤物884a| 国产日本欧洲亚洲| 久久激五月天综合精品| 欧美人妖巨大在线| 亚洲一区二区三区在线| av网站免费线看精品| 久久精品人人做人人爽97| 日韩不卡免费视频| 欧美日韩一卡二卡三卡| 亚洲美女在线一区| 99久久精品免费| 国产精品免费观看视频| 国产电影一区在线| 亚洲精品在线观| 久久精品国产亚洲5555| 91精品国产免费久久综合| 亚洲一区二区3| 欧美在线视频不卡| 亚洲午夜私人影院| 在线观看国产日韩| 亚洲曰韩产成在线| 日本黄色一区二区| 亚洲理论在线观看| 欧洲亚洲精品在线| 亚洲在线视频网站| 欧美视频一区在线观看| 亚洲自拍与偷拍| 欧美在线一区二区| 午夜婷婷国产麻豆精品| 精品视频一区二区不卡| 亚洲国产精品久久不卡毛片| 欧美视频一区二区三区四区 | 99久久精品国产观看| 国产精品视频第一区| 国产91精品久久久久久久网曝门| 久久免费精品国产久精品久久久久| 色偷偷一区二区三区| 亚洲免费视频中文字幕| 在线视频综合导航| 午夜欧美在线一二页| 欧美一区三区四区| 免费成人性网站| xvideos.蜜桃一区二区| 国产成人精品三级| 亚洲日本va午夜在线影院| 在线观看中文字幕不卡| 亚洲图片一区二区| 制服.丝袜.亚洲.另类.中文| 老司机一区二区| 国产欧美日韩综合| 91丨porny丨户外露出| 亚洲在线免费播放| 欧美大片拔萝卜| 成人福利电影精品一区二区在线观看| 中文字幕欧美激情| 欧美亚洲日本国产| 蜜桃视频第一区免费观看| 国产人成亚洲第一网站在线播放 | 99久久精品99国产精品| 亚洲精品五月天| 欧美一级黄色大片| 国产白丝网站精品污在线入口| 中文字幕亚洲视频| 欧美精品 国产精品| 国产丶欧美丶日本不卡视频| 亚洲猫色日本管| 日韩精品一区二区三区三区免费| 国产69精品久久777的优势| 有坂深雪av一区二区精品| 日韩一区二区高清| 9久草视频在线视频精品| 午夜一区二区三区视频| 国产亚洲一区二区三区在线观看| 色综合久久88色综合天天6| 蜜桃视频在线观看一区二区| 中文字幕在线观看一区二区| 在线播放91灌醉迷j高跟美女 | 欧美人与性动xxxx| 国产精品一区二区三区四区| 亚洲精品中文在线影院| 日韩欧美一级片| 一本大道av伊人久久综合| 久久国产精品色婷婷| 一区二区在线看| 久久精品这里都是精品| 欧美日韩在线三区| 不卡视频一二三四| 久久精品国产色蜜蜜麻豆| 亚洲六月丁香色婷婷综合久久 | 国产婷婷色一区二区三区四区| 欧美日韩国产成人在线91| 成人福利电影精品一区二区在线观看| 奇米一区二区三区| 亚洲一二三四在线| 中文字幕一区二区三区四区不卡 | 在线观看免费亚洲|