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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c.lst

?? 用PIC16F73編寫的SMBUS通信測試程序
?? LST
字號:
     1: #include        <pic.h>
     2: #include        "delay.h"
     3: #include        "i2c.h"
     4: 
     5: /*
     6:  *      I2C functions for HI-TECH PIC C - master mode only
     7:  */
     8: 
     9: /*
    10:  *      TIMING - see Philips document: THE I2C-BUS SPECIFICATION
    11:  */
    12: 
    13: 
    14: /*
    15:  *      Send stop condition
    16:  *        - data low-high while clock high
    17:  */
    18: 
    19: void
    20: i2c_Stop(void)
    21: {
    22:         /* don't assume SCL is high on entry */
    23: 
    24:         SDA_LOW();                      /* ensure data is low first */
    25:         SCL_HIGH();
    26: 
    27:         DelayUs(I2C_TM_DATA_SU);
    28:         SCL_DIR = I2C_INPUT;            /* float clock high */
    29:         DelayUs(I2C_TM_STOP_SU);
    30:         SDA_HIGH();                     /* the low->high data transistion */
    31:         DelayUs(I2C_TM_BUS_FREE);       /* bus free time before next start */
    32:         SDA_DIR = I2C_INPUT;            /* float data high */
    33: 
    34:         return;
    35: }
    36: 
    37: /*
    38:  *      Send (re)start condition
    39:  *        - ensure data is high then issue a start condition
    40:  *        - see also i2c_Start() macro
    41:  */
    42: 
    43: void
    44: i2c_Restart(void)
    45: {
    46:         SCL_LOW();                      /* ensure clock is low */
    47:         SDA_HIGH();                     /* ensure data is high */
    48: 
    49:         DelayUs(I2C_TM_DATA_SU);
    50: 
    51:         SCL_DIR = I2C_INPUT;            /* clock pulse high */
    52:         DelayUs(I2C_TM_SCL_HIGH);
    53: 
    54:         SDA_LOW();                      /* the high->low transition */
    55:         DelayUs(I2C_TM_START_HD);
    56:         return;
    57: }
    58: 
    59: /*
    60:  *      Send a byte to the slave
    61:  *        - returns true on error
    62:  */
    63: 
    64: unsigned char
    65: i2c_SendByte(unsigned char byte)
    66: {
    67:         signed char i;
    68: 
    69:         for(i=7; i>=0; i--)
    70:         {
    71:                 SCL_LOW();                      /* drive clock low */
    72:                                                 /* data hold time = 0, send data now */
    73:                 SDA_DIR = ((byte>>i)&0x01);
    74:                 if ((byte>>i)&0x01) {           /* bit to send */
    75:                     SDA_HIGH();
    76:                 }
    77:                 else {
    78:                     SDA_LOW();
    79:                 }
    80:                 DelayUs(I2C_TM_DATA_SU);
    81:                 SCL_DIR = I2C_INPUT;            /* float clock high */
    82: 
    83:                 if(i2c_WaitForSCL())            /* wait for clock release */
    84:                         return TRUE;            /* bus error */
    85: 
    86:                 DelayUs(I2C_TM_SCL_HIGH);       /* clock high time */
    87:         }
    88: 
    89: 
    90:         return FALSE;
    91: }
    92: 
    93: /*
    94:  *      send an address and data direction to the slave
    95:  *        - 7-bit address (lsb ignored)
    96:  *        - direction (FALSE = write )
    97:  */
    98: 
    99: unsigned char
   100: i2c_SendAddress(unsigned char address, unsigned char rw)
   101: {
   102:         return i2c_SendByte(address | (rw?1:0));
   103: }
   104: 
   105: /*
   106:  *      Check for an acknowledge
   107:  *        - returns ack or ~ack, or ERROR if a bus error
   108:  */
   109: 
   110: signed char
   111: i2c_ReadAcknowledge(void)
   112: {
   113:         unsigned char ack;
   114: 
   115:         SCL_LOW();                              /* make clock is low */
   116:         SDA_DIR = I2C_INPUT;                    /* disable data line - listen for ack */
   117:         DelayUs(I2C_TM_SCL_TO_DATA);            /* SCL low to data out valid */
   118:         SCL_DIR = I2C_INPUT;                    /* float clock high */
   119:         DelayUs(I2C_TM_DATA_SU);
   120:         ack = SDA;                              /* read the acknowledge */
   121: 
   122:         /* wait for slave to release clock line after processing byte */
   123:         if(i2c_WaitForSCL())
   124:                 return I2C_ERROR;
   125:         return ack;
   126: }
   127: 
   128: /*
   129:  *      Read a byte from the slave
   130:  *        - returns the byte, or I2C_ERROR if a bus error
   131:  */
   132: 
   133: int
   134: i2c_ReadByte(void)
   135: {
   136:         unsigned char i;
   137:         unsigned char byte = 0;
   138: 
   139:         for(i=0; i<8; i++)
   140:         {
   141:                 SCL_LOW();                      /* drive clock low */
   142:                 DelayUs(I2C_TM_SCL_LOW);        /* min clock low  period */
   143:                 SDA_DIR = I2C_INPUT;            /* release data line */
   144: 
   145:                 SCL_DIR = I2C_INPUT;            /* float clock high */
   146:                 if(i2c_WaitForSCL())
   147:                         return I2C_ERROR;
   148:                 DelayUs(I2C_TM_SCL_HIGH);
   149:                 byte = byte << 1;               /* read the next bit */
   150:                 byte |= SDA;
   151:         }
   152:         return (int)byte;
   153: }
   154: 
   155: /*
   156:  *      Send an (~)acknowledge to the slave
   157:  *        - status of I2C_LAST implies this is the last byte to be sent
   158:  */
   159: 
   160: void
   161: i2c_SendAcknowledge(unsigned char status)
   162: {
   163:         SCL_LOW();
   164:         if ( status & 0x01) {
   165:             SDA_LOW();                          /* drive line low -> more to come */
   166:         }
   167:         else { 
   168:             SDA_HIGH();
   169:         }
   170:         DelayUs(I2C_TM_DATA_SU);
   171:         SCL_DIR = I2C_INPUT;                    /* float clock high */
   172:         DelayUs(I2C_TM_SCL_HIGH);
   173:         return;
   174: }
   175: 
   176: /*
   177:  *      Send a byte to the slave and acknowledges the transfer
   178:  *        - returns I2C_ERROR, ack or ~ack
   179:  */
   180: 
   181: signed char
   182: i2c_PutByte(unsigned char data)
   183: {
   184:         if(i2c_SendByte(data))
   185:                 return I2C_ERROR;
   186:         return i2c_ReadAcknowledge();   /* returns ack, ~ack */
   187: }
   188: 
   189: /*
   190:  *      Get a byte from the slave and acknowledges the transfer
   191:  *        - returns true on I2C_ERROR or byte
   192:  */
   193: 
   194: int
   195: i2c_GetByte(unsigned char more)
   196: {
   197:         int byte;
   198: 
   199:         if((byte = i2c_ReadByte()) == I2C_ERROR)
   200:                 return I2C_ERROR;
   201: 
   202:         i2c_SendAcknowledge(more);
   203: 
   204:         return byte;
   205: }
   206: 
   207: /*
   208:  *      Send an array of bytes to the slave and acknowledges the transfer
   209:  *        - returns number of bytes not successfully transmitted
   210:  */
   211: 
   212: int
   213: i2c_PutString(const unsigned char *str, unsigned char length)
   214: {
   215:         signed char error;
   216: 
   217:         while(length)
   218:         {
   219:                 if((error = i2c_PutByte(*str)) == I2C_ERROR)
   220:                         return -(int)length;            /* bus error */
   221:                 else
   222:                         if(error)
   223:                                 return (int)length;     /* non acknowledge */
   224:                 str++;
   225:                 length--;
   226:         }
   227: 
   228:         return FALSE;                                   /* everything OK */
   229: }
   230: 
   231: /*
   232:  *      Reads number bytes from the slave, stores them at str and acknowledges the transfer
   233:  *        - returns number of bytes not successfully read in
   234:  */
   235: 
   236: unsigned char
   237: i2c_GetString(unsigned char *str, unsigned char number)
   238: {
   239:         int byte;
   240: 
   241:         while(number)
   242:         {
   243:                 if((byte = i2c_GetByte(number-1)) == I2C_ERROR)
   244:                         return number;                  /* bus error */
   245:                 else
   246:                         *str = (unsigned char)byte;
   247:                 str++;
   248:                 number--;
   249:         }
   250: 
   251:         return FALSE;                                   /* everything OK */
   252: }
   253: 
   254: /*
   255:  *      Opens communication with a device at address. mode
   256:  *      indicates I2C_READ or I2C_WRITE.
   257:  *        - returns TRUE if address is not acknowledged
   258:  */
   259: 
   260: unsigned char
   261: i2c_Open(unsigned char address, unsigned char mode)
   262: {
   263:         i2c_Start();
   264:         i2c_SendAddress(address, mode);
   265:         if(i2c_ReadAcknowledge()) 
   266:                 return TRUE;
   267: 
   268:         return FALSE;
   269: }
   270: 
   271: /*
   272:  *      wait for the clock line to be released by slow slaves
   273:  *        - returns TRUE if SCL was not released after the
   274:  *          time out period.
   275:  *        - returns FALSE if and when SCL released
   276:  */
   277: 
   278: unsigned char
   279: i2c_WaitForSCL(void)
   280: {
   281:         /* SCL_DIR should be input here */
   282: 
   283:         if(!SCL)
   284:         {
   285:                 DelayUs(I2C_TM_SCL_TMO);
   286:                 /* if the clock is still low -> bus error */
   287:                 if(!SCL)
   288:                         return TRUE;
   289:         }
   290:         return FALSE;
   291: }
   292: void
   293: i2c_Free()
   294: {
   295:         unsigned char ucI;
   296: 
   297:         SDA_DIR=I2C_INPUT;
   298:         for(ucI=0;ucI!=9;ucI++)
   299:         {
   300:                 SCL_HIGH();
   301:                 DelayUs(5);
   302:                 SCL_LOW();
   303:                 DelayUs(5);
   304:         }
   305: }
   306: 
   307: unsigned char i2c_read(unsigned char ucAdr)
   308: {
   309:         unsigned char ucDat;
   310: 
   311:         if (i2c_ReadFrom(ucAdr)==0)
   312:         {
   313:                 ucDat=i2c_GetByte(I2C_MORE);
   314:                 i2c_Stop();
   315: 
   316:         }
   317: 
   318:         return(ucDat);
   319: }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美aⅴ...| 国产自产2019最新不卡| 精品久久久久久久久久久久久久久久久 | 蜜臀久久久99精品久久久久久| 成人欧美一区二区三区白人| 日本一区二区成人| 中文字幕高清一区| 国产蜜臀97一区二区三区 | 欧美国产丝袜视频| 国产欧美日韩亚州综合| 久久日韩粉嫩一区二区三区| 久久久久久久性| 亚洲国产精品成人久久综合一区| 欧美激情一区二区三区| 国产精品毛片久久久久久久| 国产精品二区一区二区aⅴ污介绍| 国产欧美精品在线观看| 国产精品网站导航| 最新高清无码专区| 亚洲五月六月丁香激情| 日本欧美肥老太交大片| 黄色日韩三级电影| 成人av网址在线观看| 日本高清免费不卡视频| 91精品久久久久久久久99蜜臂| 日韩一二三区不卡| 欧美激情一区二区三区| 亚洲主播在线观看| 麻豆国产一区二区| www.综合网.com| 777xxx欧美| 欧美激情艳妇裸体舞| 一区二区三区在线免费播放| 亚洲国产综合在线| 国产露脸91国语对白| 成人av在线资源网| 欧美精品久久一区二区三区| 久久日一线二线三线suv| 中文字幕一区免费在线观看| 亚洲超碰精品一区二区| 国产黄人亚洲片| 欧美天堂亚洲电影院在线播放| 日韩精品在线一区| 一区二区三区欧美亚洲| 国产麻豆视频一区| 欧美日本在线播放| 国产精品美女久久久久久2018| 亚洲成人一区在线| 国产成人aaaa| 日韩午夜激情免费电影| 亚洲天堂中文字幕| 国产精品一卡二卡在线观看| 欧美日韩国产高清一区二区三区| 欧美激情一区二区三区全黄| 精品国精品国产| 亚洲狠狠丁香婷婷综合久久久| 青青草伊人久久| 色综合咪咪久久| 日本一区二区高清| 国产毛片一区二区| 日韩欧美亚洲国产另类| 亚洲第一精品在线| 日本高清成人免费播放| 欧美国产国产综合| 国产一区在线观看视频| 日韩一区二区三区电影| 天天免费综合色| 欧美色图一区二区三区| 亚洲婷婷综合色高清在线| 国产精选一区二区三区| 精品成a人在线观看| 日韩电影在线看| 欧美精品日韩综合在线| 天天色 色综合| 91精品国产乱| 麻豆精品新av中文字幕| 9191成人精品久久| 天堂av在线一区| 69p69国产精品| 日韩精品五月天| 精品国产免费一区二区三区香蕉| 蜜臀av一区二区在线观看 | 日韩电影在线观看电影| 欧美剧情电影在线观看完整版免费励志电影| 国产精品久久久久一区| www.av精品| 一区二区三区在线观看动漫| 欧美伊人久久久久久久久影院 | 午夜精品久久久久久| 欧美人狂配大交3d怪物一区| 天堂精品中文字幕在线| 欧美一区二区免费| 久久精品国产精品青草| 国产午夜精品一区二区三区视频 | 日韩精品一级二级| 欧美va亚洲va香蕉在线| 欧美在线色视频| 国产精品一区二区你懂的| 国产目拍亚洲精品99久久精品| 不卡av电影在线播放| 一区二区三区视频在线看| 欧美久久久久中文字幕| 日韩电影一二三区| 国产亚洲午夜高清国产拍精品| av日韩在线网站| 午夜伦理一区二区| 久久久影视传媒| 色视频欧美一区二区三区| 无吗不卡中文字幕| 久久视频一区二区| 色婷婷av一区二区三区软件| 另类小说图片综合网| 中文字幕制服丝袜一区二区三区 | 欧美日韩不卡在线| 国产综合色在线| 一区二区三区av电影| 欧美大片一区二区三区| 91麻豆福利精品推荐| 久久激情综合网| 亚洲人成网站在线| xnxx国产精品| 欧美日韩一区二区三区在线看| 国产中文一区二区三区| 亚洲成av人片www| 综合av第一页| 久久亚洲捆绑美女| 色综合久久综合网97色综合| 成人动漫精品一区二区| 欧美高清一级片在线观看| 99久久综合精品| 日本一区二区三区视频视频| 一本大道久久a久久精品综合 | 欧美日韩小视频| 国产精品影音先锋| 五月天一区二区| 亚洲视频在线一区二区| 2021中文字幕一区亚洲| 欧美日韩精品电影| 色综合网站在线| 成人av片在线观看| 国产精品性做久久久久久| 欧美性猛片aaaaaaa做受| 日韩欧美国产三级电影视频| 国产激情一区二区三区四区 | 亚洲电影一区二区| 欧美一区欧美二区| 在线免费不卡视频| caoporm超碰国产精品| 国产呦精品一区二区三区网站| 日韩成人免费看| 日本亚洲视频在线| 国产精品成人免费精品自在线观看| 日韩亚洲欧美高清| 欧美吞精做爰啪啪高潮| 色系网站成人免费| 一道本成人在线| 色国产精品一区在线观看| youjizz久久| 91美女蜜桃在线| 色偷偷久久一区二区三区| 91久久精品网| 欧美mv日韩mv亚洲| 欧美激情在线一区二区三区| 日本高清不卡aⅴ免费网站| 国产精品亲子伦对白| 麻豆精品视频在线观看视频| 精品一区二区影视| 99re这里只有精品首页| 成人高清av在线| 色域天天综合网| 久久久99久久| 日韩av在线播放中文字幕| 亚洲欧美日韩成人高清在线一区| 欧美日韩一区 二区 三区 久久精品| 国产一区二区三区免费在线观看| 91视频你懂的| 色欧美片视频在线观看在线视频| 91女神在线视频| 精品视频一区 二区 三区| 7777精品伊人久久久大香线蕉超级流畅 | 免费一级欧美片在线观看| 精品无人码麻豆乱码1区2区| 国产成人精品一区二| caoporn国产一区二区| 色综合一区二区| 亚洲国产成人tv| 中文字幕一区二区三区精华液| 久久久久久亚洲综合| 亚洲精品老司机| 久久精品国产网站| 91亚洲精品久久久蜜桃网站| 69堂精品视频| 国产精品美女久久久久久| 亚洲v精品v日韩v欧美v专区| 日韩av电影一区| 成人黄色av网站在线| 欧美美女一区二区| 久久久精品影视| 视频一区二区三区中文字幕| 成人h动漫精品一区二|