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

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

?? e2prom.c

?? 此程序是針對I2C總線的讀寫
?? C
字號:
//--------------------------------------------------------------------
//
// Copyright 2001 Cygnal Integrated Products, Inc.
//
// 文件名 : 24LC256.c
// 目標器件 : C8051F020
// 編寫日期 : 11/07/05
// 作者 : WuShufeng
//
//
// C8051F0xx通過SMBus與一個EEPROM接口的代碼
// 該程序有兩個具有16位地址空間的EEPROM連在SCL和SDA線上
// 被配置為具有如下從地址
// CHIP_A = 10100000(24LC256)
// 
// 
//
// 從狀態和競爭狀態沒有定義假設CF020為系統中唯一的主器件
// 功能SM_Send執行向指定EEPROM的單字節寫操作
// SM_Receive執行從指定EEPROM地址讀一個字節的操作兩者都用到存儲器地址
//
// 包含測試代碼部分
//--------------------------------------------------------------------
// 包含文件
//--------------------------------------------------------------------
#include <c8051F020.h>
#include <stdio.h>
#include "Head.h"
//--------------------------------------------------------------------
// 全局常量
//--------------------------------------------------------------------

//--------------------------------------------------------------------
//全局變量
//--------------------------------------------------------------------
char xdata COMMAND; // 在SMBus中斷服務程序中用于保存從地址 + R/W 位

unsigned char xdata WORD; // 保持SMBus要發送的數據字節或剛收到的數據

char xdata BYTE_NUMBER; // 在中用于檢查發送的是什么數據高地址字節低地址字節或數據字節

unsigned char xdata HIGH_ADD, LOW_ADD; // EEPROM存儲器地址的高低字節
bit SM_BUSY; // 該位在發送或接收開始時被置1
// 操作結束后由中斷服務程序清0
//--------------------------------------------------------------------
// 函數原型
//--------------------------------------------------------------------

//--------------------------------------------------------------------
// 主程序
//--------------------------------------------------------------------
//
// 主程序配置交叉開關和SMBus并測試SMBus與三個EEPROM之間的接口
void SMBus_Init (void)
{
	SMB0CN = 0x44; // 允許SMBus在應答周期發送ACK
	SMB0CR = -55; // SMBus時鐘頻率 = 100kHz.
	EIE1 |= 2; // SMBus中斷允許
	EA = 1; // 全局中斷允許
	SM_BUSY = 0; // 為第一次傳輸釋放SMBus
}
// SMBus 字節寫函數-----------------------------------------------------
// 向給定存儲器地址寫一個字節
//
// out_byte = 待寫數據
// byte_address = 待寫存儲器地址2字節
// chip_select = 待寫EEPROM芯片的器件地址
void SM_Send (unsigned int byte_address,unsigned char out_byte)
{
	while (SM_BUSY); // 等待SMBus空閑
	SM_BUSY = 1; // 占用SMBus設置為忙
	SMB0CN = 0x44; // SMBus允許應答周期發ACK
	BYTE_NUMBER = 2; // 2地址字節
	COMMAND = (CHIP_A | WRITE); // 片選 + WRITE
	HIGH_ADD = ((byte_address >> 8) & 0x00FF); // 高8位地址
	LOW_ADD = (byte_address & 0x00FF); // 低8位地址
	WORD = out_byte; // 待寫數據
	STA = 1; // 啟動傳輸過程
}
/////SM_Send_str連續寫入
void SM_Send_str (unsigned int byte_address,unsigned char *out_str,unsigned char n)
{
	unsigned char xdata i;
	for( i = 0;i < n;i ++)
		{
			SM_Send(byte_address++,*out_str++);
		}
}
// SMBus隨機讀函數-----------------------------------------------------
// 從給定存儲器地址讀一個字節
//
// byte_address = 要讀取的存儲器地址
// chip_select = 待讀EEPROM的器件地址
char SM_Receive (unsigned int byte_address)
{
	while (SM_BUSY); // 等待總線空閑
	SM_BUSY = 1; //占用SMBus設置為忙
	SMB0CN = 0x44; // 允許SMBus應答周期發ACK
	BYTE_NUMBER = 2; // 2地址字節
	COMMAND = (CHIP_A | READ); // 片選 + READ
	HIGH_ADD = ((byte_address >> 8) & 0x00FF); // 高8位地址
	LOW_ADD = (byte_address & 0x00FF); // 低8位地址
	STA = 1; // 啟動傳輸過程
	while (SM_BUSY); // 等待傳輸結束
	return WORD;
}
//////SM_Receive_str連續讀出
void SM_Receive_str (unsigned int byte_address,unsigned char *in_str,unsigned char n)
{
	unsigned char xdata i;
	for(i = 0;i < n;i ++)
		{
			*in_str++ = SM_Receive(byte_address++);
		}
}

//--------------------------------------------------------------------
// 中斷服務程序
//--------------------------------------------------------------------
// SMBus中斷服務程序
void SMBUS_ISR (void) interrupt 7
{
	switch (SMB0STA)
		{ // SMBus狀態碼SMB0STA寄存器
		// 主發送器/接收器起始條件已發送
		// 在該狀態發送的COMMAND字的R/W位總是為0(W)
		// 因為對于讀和寫操作來說都必須先寫存儲器地址
			case SMB_START:
			SMB0DAT = (COMMAND & 0xFE); // 裝入要訪問的從器件的地址
			STA = 0; // 手動清除START位
			break;
			//主發送器/接收器重復起始條件已發送
			// 該狀態只應在讀操作期間出現在存儲器地址已發送并得到確認之后
			case SMB_RP_START:
			SMB0DAT = COMMAND; // COMMAND中應保持從地址 + R.
			STA = 0;
			break;
			// 主發送器從地址 + WRITE已發送收到ACK
			case SMB_MTADDACK:
			SMB0DAT = HIGH_ADD; // 裝入待寫存儲器地址的高字節
			break;
			// 主發送器從地址 + WRITE已發送收到NACK
			// 從器件不應答發送STOP + START重試
			case SMB_MTADDNACK:
			STO = 1;
			STA = 1;
			break;
		// 主發送器數據字節已發送收到ACK
		// 該狀態在寫和讀操作中都要用到BYTE_NUMBER看存儲器地址狀態 – 如果
		// 只發送了HIGH_ADD則裝入LOW_ADD如果LOW_ADD已發送檢查COMMAND
		// 中的R/W 值以決定下一狀態
			case SMB_MTDBACK:
				switch (BYTE_NUMBER)
					{
						case 2: // 如果BYTE_NUMBER=2
						SMB0DAT = LOW_ADD; // 只發送了HIGH_ADD
						BYTE_NUMBER--; // 減1為下一輪作準備
						break;
						case 1: // 如果BYTE_NUMBER=1LOW_ADD已發送
							if (COMMAND & 0x01) // 如果R/W=READ發送重復起始條件
								STA = 1;
							else{
								SMB0DAT = WORD; // 如果R/W=WRITE裝入待寫字節
								BYTE_NUMBER--;}
						break;
						default: // 如果BYTE_NUMBER=0傳輸結束
						STO = 1;
						SM_BUSY = 0; // 釋放SMBus
					}
			break;
			// 主發送器數據字節已發送收到NACK
			// 從器件不應答發送STOP + START重試
			case SMB_MTDBNACK:
			STO = 1;
			STA = 1;
			break;
			// 主發送器競爭失敗
			// 不應出現如果出現重新開始傳輸過程
			case SMB_MTARBLOST:
			STO = 1;
			STA = 1;
			break;
			// 主接收器從地址 + READ 已發送收到ACK
			// 設置為在下一次傳輸后發送NACK因為那將是最后一個字節唯一
			case SMB_MRADDACK:
			AA = 0; // 在應答周期NACK
			break;
			// 主接收器從地址 + READ 已發送收到NACK
			// 從器件不應答發送重復起始條件重試
			case SMB_MRADDNACK:
			STA = 1;
			break;
			// 收到數據字節ACK已發送
			// 該狀態不應出現因為AA已在前一狀態被清0如果出現發送停止條件
			case SMB_MRDBACK:
			STO = 1;
			SM_BUSY = 0;
			break;
			// 收到數據字節NACK已發送
			// 讀操作已完成讀數據寄存器后發送停止條件
			case SMB_MRDBNACK:
			WORD = SMB0DAT;								
			STO = 1;
			SM_BUSY = 0; // 釋放SMBus
			break;
			// 在本應用中所有其它狀態碼沒有意義通信復位
			default:
			STO = 1; // 通信復位
			SM_BUSY = 0;
			break;
			}
		SI=0; // 清除中斷標志
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情图片小说一区| 激情综合色播激情啊| 中文一区在线播放| 精品国产3级a| 国产拍揄自揄精品视频麻豆| 精品国产髙清在线看国产毛片| 日韩欧美中文字幕制服| 欧美一区二区三区免费| 日韩一二三区视频| 日韩欧美在线观看一区二区三区| 69堂国产成人免费视频| 日韩欧美电影一二三| 久久久久久久久久久久久夜| 久久久久99精品一区| 中文字幕在线观看不卡视频| 亚洲日本在线视频观看| 亚洲成人动漫在线观看| 日韩精品成人一区二区三区| 亚洲黄色小说网站| 日本亚洲一区二区| 国产成人综合在线播放| 粉嫩欧美一区二区三区高清影视| 成人av网站在线观看免费| 91女人视频在线观看| 欧美色窝79yyyycom| 欧美顶级少妇做爰| 久久久美女毛片| 一区二区三区在线视频播放| 日本不卡视频一二三区| 成人性生交大合| 欧美夫妻性生活| 国产欧美一区二区精品秋霞影院| 一二三四区精品视频| 狠狠色综合日日| 欧美中文字幕不卡| 久久天天做天天爱综合色| 亚洲精品免费在线| 国产在线播精品第三| 在线观看中文字幕不卡| 国产欧美日韩综合| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品一区二区三区乱码| 91在线视频官网| 欧美精品视频www在线观看| 久久久久亚洲蜜桃| 天堂在线一区二区| 成人在线综合网| 欧美电影免费观看高清完整版在线观看 | 免费成人结看片| 99综合电影在线视频| 日韩精品最新网址| 亚洲欧美激情小说另类| 韩日av一区二区| 精品久久久久久最新网址| 亚洲日本在线a| 成人午夜免费视频| 精品久久一二三区| 日韩黄色免费网站| 日本国产一区二区| 亚洲欧美日韩国产另类专区| 顶级嫩模精品视频在线看| 51精品秘密在线观看| 亚洲午夜久久久久久久久电影网 | 极品少妇xxxx偷拍精品少妇| 欧美性猛交xxxx黑人交| 成人免费小视频| 从欧美一区二区三区| 欧美精品一区二区三| 亚洲mv大片欧洲mv大片精品| 色妹子一区二区| 亚洲视频一区二区在线| 99vv1com这只有精品| 综合色天天鬼久久鬼色| 不卡的av网站| 国产精品美女久久福利网站| 久久激情五月婷婷| 精品久久一二三区| 精品一区二区在线视频| 欧美精品一区二区三区蜜桃| 久久国产精品72免费观看| 日韩免费观看2025年上映的电影| 日本aⅴ精品一区二区三区| 91精品国产色综合久久| 麻豆国产精品官网| 日韩精品在线一区二区| 久久 天天综合| 欧美tickle裸体挠脚心vk| 国产一区二区三区久久悠悠色av| 亚洲精品在线观看网站| 成人精品亚洲人成在线| 亚洲欧美日韩国产综合| 欧美四级电影网| 蜜桃精品在线观看| 中文乱码免费一区二区| 日本精品视频一区二区| 午夜欧美电影在线观看| 日韩美女视频在线| 成人精品小蝌蚪| 亚洲123区在线观看| 日韩午夜精品电影| 91蜜桃网址入口| 午夜精品久久一牛影视| 精品国产91洋老外米糕| av亚洲产国偷v产偷v自拍| 亚洲一区二区av电影| 精品国产成人在线影院 | 亚洲乱码一区二区三区在线观看| 在线看国产一区| 久久成人综合网| 亚洲精品日韩专区silk| 欧美一级电影网站| 成人av动漫在线| 视频在线观看一区| 中文字幕av不卡| 91精品国产品国语在线不卡| 成人网男人的天堂| 日本欧美韩国一区三区| 国产精品久久久久久一区二区三区| 欧美性猛交xxxx乱大交退制版 | 日韩和欧美的一区| 国产女主播视频一区二区| 欧美三级资源在线| www.日韩精品| 国产一区日韩二区欧美三区| 亚洲精品国产成人久久av盗摄| 精品国产乱码久久久久久1区2区| 99天天综合性| 国产成人8x视频一区二区| 亚洲成av人**亚洲成av**| 欧美国产激情二区三区| 欧美v亚洲v综合ⅴ国产v| 91精品91久久久中77777| 国产激情精品久久久第一区二区| 亚洲午夜在线观看视频在线| 久久久久久久久伊人| 国产欧美一区二区精品秋霞影院| 欧洲一区二区av| 97精品电影院| 不卡一区在线观看| 成人午夜av电影| 国产91富婆露脸刺激对白| 午夜视频一区二区| 午夜精品影院在线观看| 亚洲精品国产a| 一区二区三区欧美日韩| 亚洲图片欧美激情| 亚洲人成网站精品片在线观看| 久久久久久久久蜜桃| 久久夜色精品国产欧美乱极品| 日韩视频在线一区二区| 欧美日韩成人高清| 欧美日韩激情一区| 欧美久久久久久久久中文字幕| 欧美色图天堂网| 欧美视频精品在线观看| 欧美日韩国产高清一区| 欧美一区二区在线看| 日韩一区二区免费在线观看| 欧美一区二区视频在线观看2022| 欧美精品久久久久久久多人混战| 欧美日韩另类国产亚洲欧美一级| 欧美自拍偷拍一区| 欧美精品色综合| 精品国产一二三| 久久久蜜臀国产一区二区| 国产区在线观看成人精品| 国产精品国产自产拍在线| 亚洲欧洲另类国产综合| 亚洲自拍偷拍九九九| 蜜桃一区二区三区四区| 国产一区二区精品久久99| 国产91精品一区二区麻豆亚洲| 懂色av一区二区夜夜嗨| 91国偷自产一区二区三区成为亚洲经典 | 国产美女娇喘av呻吟久久| 成人中文字幕电影| 在线观看av不卡| 日韩午夜精品视频| 国产精品精品国产色婷婷| 亚洲午夜免费视频| 美女诱惑一区二区| zzijzzij亚洲日本少妇熟睡| 99国产一区二区三精品乱码| 欧洲一区在线电影| 久久综合一区二区| 一区二区三区欧美亚洲| 美国精品在线观看| 91小视频在线免费看| 欧美一卡2卡3卡4卡| 国产精品拍天天在线| 一区二区三区四区高清精品免费观看| 日韩国产在线观看一区| 成人sese在线| 日韩欧美一级精品久久| **网站欧美大片在线观看| 秋霞电影一区二区| 91影院在线免费观看| 精品久久久久久久久久久院品网 | 91麻豆精品国产91久久久更新时间| 精品99久久久久久|