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

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

?? i2c_512.c

?? 程序概述: 這是個具體產品程序
?? C
字號:
// Copyright (c)2005 - 2006 by Laser Electronics, All Rights Reserved.
/*----------------------------------------------------------------------------+
|  File Name:  I2C.c, v1.0.1                                                  |
|  Author:                                                                    |
|  Date:                                                                      |
+-----------------------------------------------------------------------------+
|  Description: 聯網型智能樓宇對講系統 -- 管理中心機對AT24C512操作的程序程序  |
|               器件選擇 -- STC89C58RD+, PQFP-44                              |
|               時鐘頻率 -- 24.000 MHz                                        |
+-----------------------------------------------------------------------------+

/*----------------------------------------------------------------------------+
| Include files                                                               |
+----------------------------------------------------------------------------*/
#include "main.h"
#include "I2C_512.h"


/*----------------------------------------------------------------------------+
| Type Definition & Macro                                                     |
+----------------------------------------------------------------------------*/
#ifndef SCL
#define SCL   P2_1
#endif

#ifndef SDA
#define SDA   P2_0
#endif

// 定義芯片每頁的的容量, 各芯片的頁大小如下:
// 24C01:     8字節     0x08
// 24C02:     8字節     0x08
// 24C04:    16字節     0x10
// 24C08:    16字節     0x10
// 24C16:    16字節     0x10
// -------------------------
// 24C32:    32字節     0x20
// 24C64:    32字節     0x20
// 24C128:   64字節     0x40
// 24C256:   64字節     0x40
// 24C512:  128字節     0x80
// -------------------------
// 24C1024: 256字節     0x100

// 定義I2C操作失敗時重試的次數
#define I2C_MAX_TRY_TIMES    3

/*-----------------------------------------------------------------------------
| 函數說明:開始位
-----------------------------------------------------------------------------*/
void I2CStart(void)
{
	SCL = 0;
	SCL = 1;
	SDA = 1;
	_nop_();
	_nop_();
	SDA = 0;
	_nop_();
	_nop_();
	SCL = 0;
	SDA = 1;
}

/*-----------------------------------------------------------------------------
| 函數說明:停止位
-----------------------------------------------------------------------------*/
void I2CStop(void)
{
	SCL = 0;
	SDA = 0;
	SCL = 1;
	_nop_();
	_nop_();
	_nop_();
	SDA = 1;
	_nop_();
	_nop_();
	_nop_();
	SCL = 0;
}

/*-----------------------------------------------------------------------------
| 往I2C芯片發送一個8位的數據
-----------------------------------------------------------------------------*/
BOOL I2CSendByte(BYTE aData)
{
	BYTE i = 8;

	do
	{
		SCL = 0;
		_nop_();
		SDA = (aData&0x80);
		aData <<= 1;
		SCL = 1;
	}while(--i);
	SCL = 0;

	// 等待應答
	SDA = 1;                    // For input direct
	_nop_();
	SCL = 1;
	for (i=10; i>0; i--)
	{
		if (SDA == 0)
		{
			SCL = 0;
			return TRUE;
		}
	}
	SCL = 0;
	return FALSE;
}

/*-----------------------------------------------------------------------------
| 從I2C芯片接收一個8位的數據
-----------------------------------------------------------------------------*/
BYTE I2CReceiveByte(BOOL last_char)
{
	BYTE i;
	BYTE temp;

	i = 8;
	temp = 0x00;
	do {
		SCL=1;
		temp <<= 1;
		if (SDA)
			temp |= 0x01;
		else
			_nop_();
		SCL=0;
		_nop_();
	}while(--i);

	// 應答
	if (last_char)
	{
		// 最后一個字符, 不再需要應答信號
		SDA = 1;
		_nop_();
		SCL = 1;
		_nop_();
		_nop_();
		_nop_();
		SCL = 0;
	}
	else
	{
		// 應答
		SDA=0;
		_nop_();
		SCL=1;
		_nop_();
		_nop_();
		_nop_();
		SCL=0;
		_nop_();
		_nop_();
		SDA=1;
	}
	return temp;
}

/*-----------------------------------------------------------------------------
| 嘗試從24C512讀多個字節
| Device:  器件地址,最低2位有效,0x00~0x03,表示I2C芯片的硬件連接
| Addr:    存儲器地址, 范圍從0x0000到0xFFFF
| pBuf:    指向存放讀出的數據緩沖區的指針
| nLength: 需要讀取的數據長度
-----------------------------------------------------------------------------*/
BOOL I2CTryReadString(BYTE Device, UINT Addr, BYTE *pBuf, BYTE nLength)
{
	BYTE PageNum;               // 當前頁需要讀取的字節數
	BYTE i;

	Device <<= 1;

	while (nLength)
	{
		if (nLength > (I2C_PAGE_SIZE-(Addr&(I2C_PAGE_SIZE-1)))) // 一頁讀不完這些數據,需要轉到下一頁
			PageNum = I2C_PAGE_SIZE - (Addr&(I2C_PAGE_SIZE-1));
		else
			PageNum = nLength;

		I2CStart();
		if (!I2CSendByte(0xA0|Device)) return FALSE;    // 器件地址
		if (!I2CSendByte(Addr>>8))   return FALSE;      // 數據地址高8位
		if (!I2CSendByte(Addr&0xFF)) return FALSE;      // 數據地址低8位

		I2CStart();
		if (!I2CSendByte(0xA1|Device)) return FALSE;

		for (i=1; i<PageNum; i++)
		{
			*pBuf = I2CReceiveByte(FALSE);
			pBuf ++;
		}
		*pBuf = I2CReceiveByte(TRUE);
		I2CStop();

		nLength -= PageNum;             // 下一次循環還剩下的長度
		Addr += PageNum;                // 下一次循環的起始地址
	}
	return TRUE;
}

/*-----------------------------------------------------------------------------
| 嘗試往24C512寫多個字節
| Device:  器件地址,最低2位有效,0x00~0x03,表示I2C芯片的硬件連接
| Addr:    存儲器地址, 范圍從0x0000到0xFFFF
| pBuf:    指向需要寫入的數據緩沖區的指針
| nLength: 需要寫入的數據長度
-----------------------------------------------------------------------------*/
BOOL I2CTryWriteString(BYTE Device, UINT Addr, BYTE *pBuf, BYTE nLength)
{
// 一次寫一頁,每頁128字節
	BYTE PageNum;               // 當前頁需要寫入的字節數
	BYTE i;

	Device <<= 1;               // 最低位用來表示讀(1)還是寫(0)

	while (nLength)
	{
		Delayms(I2C_WRITE_CYCLE_TIME);  // 每次寫操作完成后要等待一定的時間

		if (nLength > (I2C_PAGE_SIZE-(Addr&(I2C_PAGE_SIZE-1)))) // 一頁寫不完這些數據,需要轉到下一頁
			PageNum = I2C_PAGE_SIZE - (Addr&(I2C_PAGE_SIZE-1));
		else
			PageNum = nLength;

		I2CStart();
		if (!I2CSendByte(0xA0|Device)) return FALSE;    // 器件地址
		if (!I2CSendByte(Addr>>8))   return FALSE;      // 數據地址高8位
		if (!I2CSendByte(Addr&0xFF)) return FALSE;      // 數據地址低8位

		for (i=0; i<PageNum; i++)
		{
			if (!I2CSendByte(*pBuf)) return FALSE;
			pBuf ++;
		}
		I2CStop();

		nLength -= PageNum;             // 下一次循環還剩下的長度
		Addr += PageNum;                // 下一次循環的起始地址
	}
	return TRUE;
}

/*-----------------------------------------------------------------------------
| 從24C512讀多個字節
| Device:  器件地址,最低2位有效,0x00~0x03,表示I2C芯片的硬件連接
| Addr:    存儲器地址, 范圍從0x0000到0xFFFF
| pBuf:    指向存放讀出的數據緩沖區的指針
| nLength: 需要讀取的數據長度
-----------------------------------------------------------------------------*/
BOOL I2CReadString(BYTE Device, UINT Addr, BYTE *pBuf, BYTE nLength)
{
	BYTE i = I2C_MAX_TRY_TIMES;

	do {
		if (I2CTryReadString(Device, Addr, pBuf, nLength))
			return TRUE;
		I2CStop();
		RESET_WDT;
		Delayms(I2C_WRITE_CYCLE_TIME);
	}while (--i);
	return FALSE;
}

/*-----------------------------------------------------------------------------
| 往24C512寫多個字節
| Device:  器件地址,最低2位有效,0x00~0x03,表示I2C芯片的硬件連接
| Addr:    存儲器地址, 范圍從24C01的0x007F到24C16的0x07FF
| pBuf:    指向需要寫入的數據緩沖區的指針
| nLength: 需要寫入的數據長度
-----------------------------------------------------------------------------*/
BOOL I2CWriteString(BYTE Device, UINT Addr, BYTE *pBuf, BYTE nLength)
{
	BYTE i = I2C_MAX_TRY_TIMES;

	do {
		if (I2CTryWriteString(Device, Addr, pBuf, nLength))
			return TRUE;
		I2CStop();
		RESET_WDT;
		Delayms(I2C_WRITE_CYCLE_TIME);
	}while (--i);
	return FALSE;
}

/*----------------------------------------------------------------------------+
| End of source file                                                          |
+----------------------------------------------------------------------------*/
/*------------------------ Nothing Below This Line --------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲一区二区三区四区| 97精品电影院| 成人v精品蜜桃久久一区| 欧美三区在线视频| 亚洲国产精品二十页| 亚洲一区二区三区四区不卡| 国产一区二区三区在线看麻豆| 在线免费观看日韩欧美| 欧美激情自拍偷拍| 久久福利资源站| 欧美色老头old∨ideo| 中文字幕免费观看一区| 久久成人综合网| 欧美福利视频一区| 一区二区三区不卡视频| 成人av在线影院| 国产三级精品三级在线专区| 日本少妇一区二区| 欧美日韩电影在线播放| 最好看的中文字幕久久| 成人精品国产一区二区4080| 久久综合九色欧美综合狠狠| 裸体一区二区三区| 欧美一区二区视频在线观看2020| 亚洲一区二区三区精品在线| 91亚洲精华国产精华精华液| 国产精品乱码一区二区三区软件| 国产成人一级电影| 久久这里只有精品视频网| 久久成人免费日本黄色| 日韩欧美第一区| 久久精品国产澳门| 精品成人一区二区三区| 激情欧美一区二区| 久久夜色精品一区| 丁香婷婷综合网| 国产精品美日韩| 不卡免费追剧大全电视剧网站| 国产欧美日韩不卡免费| 成人免费毛片aaaaa**| 综合久久综合久久| 在线观看网站黄不卡| 亚洲资源在线观看| 欧美一区日本一区韩国一区| 看国产成人h片视频| 26uuu国产电影一区二区| 国产一区美女在线| 国产精品入口麻豆原神| 一本一道久久a久久精品综合蜜臀| 亚洲色图色小说| 欧美日韩www| 久久99精品久久久久久| 国产日韩欧美综合一区| 91一区二区在线观看| 五月天亚洲精品| 久久免费的精品国产v∧| 99久久综合色| 日本麻豆一区二区三区视频| 久久精品亚洲精品国产欧美| 91麻豆福利精品推荐| 日韩国产高清影视| 日本一区二区三区电影| 欧美伊人久久久久久午夜久久久久| 日日摸夜夜添夜夜添亚洲女人| 欧美精品一区二区不卡 | 亚洲自拍偷拍九九九| 欧美疯狂做受xxxx富婆| 激情综合网天天干| 亚洲欧洲综合另类在线| 在线成人免费观看| 国产精品99久久久久久久vr | 丁香婷婷综合激情五月色| 亚洲少妇中出一区| 日韩欧美中文字幕制服| aaa国产一区| 免费观看日韩电影| 亚洲人成精品久久久久久| 91精品国产欧美日韩| 97久久超碰国产精品电影| 麻豆精品在线观看| 综合欧美亚洲日本| 26uuu另类欧美| 56国语精品自产拍在线观看| www.欧美色图| 国产精品自拍av| 亚洲成av人片一区二区三区| 一区视频在线播放| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩女优电影在线观看| 色综合天天综合网天天狠天天| 狠狠狠色丁香婷婷综合激情| 亚洲在线中文字幕| 自拍偷拍国产亚洲| 国产欧美日韩精品一区| ww亚洲ww在线观看国产| 69p69国产精品| 欧美亚洲图片小说| 色猫猫国产区一区二在线视频| 国产成人免费av在线| 极品少妇xxxx偷拍精品少妇| 日日夜夜一区二区| 午夜欧美视频在线观看| 一区二区三区日韩精品| 国产精品高清亚洲| 国产精品素人视频| 国产亚洲一区二区在线观看| 日韩精品一区二区三区中文不卡| 日本韩国一区二区三区视频| 成人激情校园春色| 成人黄色片在线观看| 国产成人免费在线视频| 黄色成人免费在线| 国产一二精品视频| 激情综合色播激情啊| 国模冰冰炮一区二区| 国产在线精品免费av| 国产一区二区三区久久悠悠色av| 久久99精品久久久久久动态图| 美女www一区二区| 免费成人av在线| 国产一区二区在线视频| 粉嫩久久99精品久久久久久夜 | 91在线观看地址| 一本大道久久a久久综合婷婷| 91蜜桃传媒精品久久久一区二区| 97精品久久久久中文字幕| 91美女片黄在线| 欧美日韩午夜影院| 91精品国产综合久久久蜜臀图片| 制服丝袜av成人在线看| 欧美精品一区二区三| 欧美经典一区二区三区| 一区视频在线播放| 亚洲1区2区3区视频| 美女mm1313爽爽久久久蜜臀| 国产精品一二三四| 色综合久久久久| 欧美一区二区国产| 亚洲国产精品成人综合色在线婷婷 | 日韩avvvv在线播放| 久久国产生活片100| 成人免费观看视频| 精品视频123区在线观看| 欧美剧在线免费观看网站| 精品久久久久久久久久久久久久久久久 | 久久久久久影视| 亚洲三级理论片| 青青草原综合久久大伊人精品 | 亚洲图片你懂的| 青椒成人免费视频| 成人丝袜18视频在线观看| 欧美亚洲综合网| 欧美一区二区三区爱爱| 国产精品卡一卡二| 奇米亚洲午夜久久精品| 国产ts人妖一区二区| 欧美精品丝袜久久久中文字幕| 亚洲精品在线免费观看视频| 亚洲女女做受ⅹxx高潮| 精品一区二区成人精品| 一本久久精品一区二区| 久久亚洲精品国产精品紫薇 | 久久久精品综合| 亚洲一级二级在线| 岛国av在线一区| 欧美一级午夜免费电影| 依依成人精品视频| 国产成人综合自拍| 欧美α欧美αv大片| 亚洲一区二区视频在线观看| 国产传媒欧美日韩成人| 欧美一区二区三区日韩视频| 亚洲免费观看高清完整| 国产 日韩 欧美大片| 日韩精品一区二区三区老鸭窝| 一区二区三区在线免费视频 | 欧美性感一区二区三区| 国产精品免费人成网站| 国产在线精品国自产拍免费| 91精品国产综合久久香蕉的特点| 洋洋成人永久网站入口| 成人国产精品免费观看| 精品国产123| 激情另类小说区图片区视频区| 欧美日韩二区三区| 亚洲国产成人tv| 色美美综合视频| 自拍偷自拍亚洲精品播放| 国产成人精品综合在线观看 | 一区精品在线播放| 成人一区二区三区视频在线观看| 精品伦理精品一区| 激情偷乱视频一区二区三区| 欧美一级日韩一级| 日本不卡一区二区| 欧美一级欧美三级在线观看| 性感美女久久精品| 91.com在线观看| 日韩1区2区3区| 欧美电影免费提供在线观看|