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

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

?? i2c.#3

?? c8051f020單片機日歷時鐘lcd顯示代碼源程序
?? #3
字號:
#include <c8051f020.h>					// SFR declarations
#include "INTRINS.H"

//------------------------------------------------------------------------------------
// Global CONSTANTS
//------------------------------------------------------------------------------------

#define 	WRITE	0x00						// SMBus WRITE command
#define		READ 	0x01						// SMBus READ command

// Device addresses (7 bits, lsb is a don't care)
#define		CLOCK3530_ADDRESS_RESET		0x60		//1 ack
#define		CLOCK3530_ADDRESS_STATUS	0x62		//2 ack
#define		CLOCK3530_ADDRESS_DATEHOUR	0x64		//8 ack  year month day week hour minute second
#define		CLOCK3530_ADDRESS_HOUR		0x66		//4 ack  hour minute second
#define		CLOCK3530_ADDRESS_INT1		0x68		//3 ack  
#define		CLOCK3530_ADDRESS_INT2		0x6A		//3 ack  

union 
{
unsigned char ClockString[7];
struct RealClock
	{
		unsigned char Year,Month,Day,Week,Hour,Minute,Second;
	} RT;
} RealTime;


// SMBus states:
// MT = Master Transmitter
// MR = Master Receiver
#define	SMB_BUS_ERROR	0x00			// (all modes) BUS ERROR
#define	SMB_START		0x08			// (MT & MR) START transmitted
#define	SMB_RP_START	0x10			// (MT & MR) repeated START
#define	SMB_MTADDACK	0x18			// (MT) Slave address + W transmitted;
										//  ACK received
#define	SMB_MTADDNACK	0x20			// (MT) Slave address + W transmitted;
										//  NACK received
#define	SMB_MTDBACK		0x28			// (MT) data byte transmitted; ACK rec'vd
#define	SMB_MTDBNACK	0x30			// (MT) data byte transmitted; NACK rec'vd
#define	SMB_MTARBLOST	0x38			// (MT) arbitration lost
#define	SMB_MRADDACK	0x40			// (MR) Slave address + R transmitted;
										//  ACK received
#define	SMB_MRADDNACK	0x48			// (MR) Slave address + R transmitted;
										//  NACK received
#define	SMB_MRDBACK		0x50			// (MR) data byte rec'vd; ACK transmitted
#define	SMB_MRDBNACK	0x58			// (MR) data byte rec'vd; NACK transmitted


//-----------------------------------------------------------------------------------
//Global VARIABLES
//-----------------------------------------------------------------------------------
char COMMAND;			// Holds the slave address + R/W bit for use in the SMBus ISR.

unsigned char *I2CDataBuff;						

char BYTE_NUMBER;							// Used by ISR to check what data has just been
												// sent - High address byte, Low byte, or data byte

unsigned char HIGH_ADD, LOW_ADD;		// High & Low byte for EEPROM memory address
				
bit SM_BUSY;								// This bit is set when a send or receive
												// is started. It is cleared by the
												// ISR when the operation is finished.


//------------------------------------------------------------------------------------
// Function PROTOTYPES
//------------------------------------------------------------------------------------

void SMBus_ISR (void);								

//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
//
// Main routine configures the crossbar and SMBus, and tests
// the SMBus interface between the three EEPROMs


void ResetRealClock(void)
{
	while (SM_BUSY);									// Wait for SMBus to be free.
	SM_BUSY = 1;										// Occupy SMBus (set to busy)
	SMB0CN = 0x44;										// SMBus enabled, ACK on acknowledge cycle
	BYTE_NUMBER = 0;									// 2 address bytes.
	COMMAND = (CLOCK3530_ADDRESS_RESET | READ);		// Chip select + READ
	STA = 1;											// Start transfer
	while (SM_BUSY);									// Wait for transfer to finish
}

//======================寫S-3530A內部實時數據寄存器程序=====================
//功能:將設定年、月、日、星期、時、分、秒數據寫入S-3530A                  |
//入口:發(fā)送數據放在年、月、日、星期、時、分、秒各寄存器                   |
//出口:NONE                                                               |
//==========================================================================
void SetRealClock(void)
{
	while (SM_BUSY);									// Wait for SMBus to be free.
	SM_BUSY = 1;										// Occupy SMBus (set to busy)
	SMB0CN = 0x44;										// SMBus enabled, ACK on acknowledge cycle
	BYTE_NUMBER = 7;									// 2 address bytes.
	COMMAND = (CLOCK3530_ADDRESS_DATEHOUR | WRITE);		// Chip select + WRITE
	I2CDataBuff = &RealTime.ClockString[0];				// Data to be writen
	STA = 1;											// Start transfer
}

//==================讀S-3530A實時數據寄存器子程序===========================
//功能:從S-3530A讀入當前時間數據                                          |
//入口:NONE                                                               |
//出口:接收數據放在年、月、日、星期、時、分、秒各寄存器                   |
//==========================================================================
void GetRealClock(void)
{
	while (SM_BUSY);									// Wait for SMBus to be free.
	SM_BUSY = 1;										// Occupy SMBus (set to busy)
	SMB0CN = 0x44;										// SMBus enabled, ACK on acknowledge cycle
	BYTE_NUMBER = 7;									// 2 address bytes.
	COMMAND = (CLOCK3530_ADDRESS_DATEHOUR | READ);		// Chip select + READ
	I2CDataBuff = &RealTime.ClockString[0];				// Data to be writen
	STA = 1;											// Start transfer
	while (SM_BUSY);									// Wait for transfer to finish
}

//============================寫狀態(tài)寄存器程序==============================
//功能:讀/寫S-3530A狀態(tài)寄存器,對S-3530A進行設置                          |
//入口:NONE           出口:NONE                                          |
//==========================================================================
unsigned char  GetRealClockStatus(void)
{
	unsigned char result; 
	while (SM_BUSY);									// Wait for SMBus to be free.
	SM_BUSY = 1;										// Occupy SMBus (set to busy)
	SMB0CN = 0x44;										// SMBus enabled, ACK on acknowledge cycle
	BYTE_NUMBER = 1;									
	COMMAND = (CLOCK3530_ADDRESS_STATUS | READ);		
	I2CDataBuff = &result;								
	STA = 1;											// Start transfer
	while (SM_BUSY);									// Wait for transfer to finish
	return result;
}
void SetRealClockStatus(unsigned char status)
{
	while (SM_BUSY);									// Wait for SMBus to be free.
	SM_BUSY = 1;										// Occupy SMBus (set to busy)
	SMB0CN = 0x44;										// SMBus enabled, ACK on acknowledge cycle
	BYTE_NUMBER = 1;									
	COMMAND = (CLOCK3530_ADDRESS_STATUS | WRITE);		
	I2CDataBuff = &status;								
	STA = 1;											// Start transfer
}


unsigned char revolve(unsigned char val)
{
char i;
unsigned char val1=0;
	for (i=0;i<8;i++)
	{
		if (val&0x1)
			val1++;
		val1=_crol_(val1,1);
		val=_cror_(val,1);
	}
	val1=_cror_(val1,1);
	return val1;
}


void Delay1ms(unsigned char T);

void I2c_init(void )
{
  unsigned char  var ;
    P0MDOUT |= 0x1D; 
    P1MDOUT |= 0x01; 
	
	SMB0CN = 0x44;									// Enable SMBus with ACKs on acknowledge cycle
	SMB0CR = -80;									// SMBus clock rate = 100kHz.

	EIE1 |= 2;										// SMBus interrupt enable
	EA = 1;											// Global interrupt enable

	SM_BUSY = 0;
										// Free SMBus for first transfer.
	var = GetRealClockStatus();
	ResetRealClock();
	var = GetRealClockStatus();
	SetRealClockStatus(0xc2);
	var = GetRealClockStatus();
	GetRealClock();
	RealTime.RT.Year=0x02;	
	RealTime.RT.Month=0x12;	
	RealTime.RT.Day=0x010;	
	RealTime.RT.Week=0x05;	
	RealTime.RT.Hour=0x11;	
	RealTime.RT.Minute=0x59;	
	RealTime.RT.Second=0x50;
	SetRealClock();
	}

void TestI2C (void)
{
 char year,month,day,week,hour,minute,second ;


		
		Delay1ms(100);	
		Delay1ms(100);	
		Delay1ms(100);	
		Delay1ms(100);	
		Delay1ms(100);	
		Delay1ms(100);
		Delay1ms(100);	
		Delay1ms(100);	
		Delay1ms(100);		
			
	GetRealClock();

    year=RealTime.RT.Year;	
	month=RealTime.RT.Month;	
	day=RealTime.RT.Day;	
	week=RealTime.RT.Week;	
	hour=RealTime.RT.Hour;	
	minute=RealTime.RT.Minute;	
	second=RealTime.RT.Second;	

	
}


//------------------------------------------------------------------------------------
// Interrupt Service Routine
//------------------------------------------------------------------------------------
void SMBUS_ISR (void) interrupt 7
{
	switch (SMB0STA)
		{ 	// SMBus 狀態(tài)碼SMB0STA 寄存器
			// 主發(fā)送器/接收器起始條件已發(fā)送
		case SMB_START:
			SMB0DAT = COMMAND ; // 裝入要訪問的從器件的地址
			STA = 0; 			// 手動清除START 位
			break;
			//主發(fā)送器/接收器重復起始條件已發(fā)送
			// 該狀態(tài)只應在讀操作期間出現在存儲器地址已發(fā)送并得到確認之后 ?
		case SMB_RP_START:
			SMB0DAT = COMMAND; // COMMAND 中應保持從地址 + R.
			STA = 0;
			break;
			// 主發(fā)送器從地址 + WRITE 已發(fā)送收到ACK
		case SMB_MTADDACK:
			// 主發(fā)送器數據字節(jié)已發(fā)送收到ACK
		case SMB_MTDBACK:
			if (BYTE_NUMBER)
			{
					SMB0DAT = revolve(*I2CDataBuff);					// If R/W=WRITE, load byte to write.
					I2CDataBuff++;
					BYTE_NUMBER--;			
			}
			else
			{
				STO = 1;	SM_BUSY = 0;						// Free SMBus
			}
			break;
			// 主發(fā)送器從地址 + WRITE 已發(fā)送收到NACK
			// 從器件不應答發(fā)送STOP + START 重試
		case SMB_MTADDNACK:
			STO = 1;			STA = 1;
		break;
			// 主發(fā)送器數據字節(jié)已發(fā)送收到NACK
			// 從器件不應答發(fā)送STOP + START 重試
		case SMB_MTDBNACK:
			STO = 1;			STA = 1;
		break;
			// 主發(fā)送器競爭失敗
			// 不應出現如果出現重新開始傳輸過程
		case SMB_MTARBLOST:
			STO = 1;			STA = 1;
		break;

			// 主接收器從地址 + READ 已發(fā)送,收到ACK
		case SMB_MRADDACK:
			AA = 1; // 在應答周期ACK
			if (!BYTE_NUMBER)
			{	
				STO = 1;	SM_BUSY = 0; // 釋放SMBus
			}
		break;
			// 主接收器從地址 + READ 已發(fā)送收到NACK
			// 從器件不應答發(fā)送重復起始條件重試
		case SMB_MRADDNACK:
			STA = 1;
		break;
			// 收到數據字節(jié)ACK 已發(fā)送
			// 該狀態(tài)不應出現因為AA 已在前一狀態(tài)被清0 如果出現發(fā)送停止條件
		case SMB_MRDBACK:
			if (BYTE_NUMBER)
			{
				*I2CDataBuff=revolve(SMB0DAT);		
				I2CDataBuff++;
				BYTE_NUMBER--;			
			}
			if (!BYTE_NUMBER)	AA= 0;
		break;
			// 收到數據字節(jié)NACK 已發(fā)送
			// 讀操作已完成讀數據寄存器后發(fā)送停止條件
		case SMB_MRDBNACK:
			STO = 1;
			SM_BUSY = 0; // 釋放SMBus
		break;
			// 在本應用中所有其它狀態(tài)碼沒有意義通信復位
		default:
			STO = 1; // 通信復位
			SM_BUSY = 0; 
		break;
		}
	SI=0; // 清除中斷標志
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日产av| 精品国产乱子伦一区| 国产91精品免费| 美女mm1313爽爽久久久蜜臀| 亚洲国产乱码最新视频| 亚洲精品美国一| 亚洲女人****多毛耸耸8| 一区二区中文视频| 亚洲三级电影网站| 夜色激情一区二区| 天堂成人国产精品一区| 日韩电影在线一区二区三区| 日韩精品电影一区亚洲| 日本午夜精品视频在线观看| 日韩不卡一区二区三区| 久久99久久精品| 国产一区二区三区美女| 国产盗摄一区二区三区| 成人看片黄a免费看在线| 97久久精品人人澡人人爽| 91免费视频网址| 欧美亚洲丝袜传媒另类| 91麻豆精品国产91久久久资源速度| 欧美一区欧美二区| 久久久91精品国产一区二区精品 | 日韩一区二区三区在线| 日韩欧美国产不卡| 国产女人水真多18毛片18精品视频 | 久久精品免费看| 国内外成人在线视频| 成人精品视频一区二区三区尤物| 91福利在线免费观看| 欧美成人一区二区三区在线观看| 日本一区免费视频| 亚洲成人午夜电影| 国产精品自拍网站| 色婷婷综合久久久| 精品嫩草影院久久| 亚洲免费观看高清在线观看| 日本一不卡视频| 成人av电影免费观看| 9191精品国产综合久久久久久| 久久精品视频免费| 午夜久久久久久电影| 日本精品一区二区三区高清 | 欧美一区二区三区在线看| 国产精品人成在线观看免费| 亚洲h精品动漫在线观看| 高清在线不卡av| 欧美一区2区视频在线观看| 中文字幕不卡在线| 久久激五月天综合精品| 色av成人天堂桃色av| 久久一区二区三区四区| 图片区小说区区亚洲影院| 成人中文字幕电影| 日韩欧美区一区二| 亚洲国产视频一区| 91蜜桃在线免费视频| 久久精品亚洲精品国产欧美| 日韩黄色片在线观看| 91蜜桃视频在线| 国产精品国产三级国产aⅴ入口| 毛片av一区二区| 6080日韩午夜伦伦午夜伦| 一区二区三区中文字幕电影| fc2成人免费人成在线观看播放| 精品国产不卡一区二区三区| 日本美女一区二区三区| 欧美人xxxx| 五月婷婷久久综合| 欧美性大战久久久久久久蜜臀 | 日本韩国欧美一区| 国产精品乱码久久久久久| 国产在线视频精品一区| 欧美tickling挠脚心丨vk| 五月婷婷久久综合| 欧美精品久久天天躁| 亚洲一区免费视频| 欧美亚洲动漫制服丝袜| 亚洲一级片在线观看| 91国产福利在线| 亚洲综合男人的天堂| 在线精品观看国产| 一片黄亚洲嫩模| 欧美日韩一区二区三区不卡| 亚洲大片精品永久免费| 91精品国产综合久久久久久漫画 | 国产综合久久久久影院| 精品欧美乱码久久久久久1区2区| 久久99精品久久久久久| 久久免费午夜影院| 成人性生交大片免费看中文网站| 国产精品久久久一区麻豆最新章节| kk眼镜猥琐国模调教系列一区二区| 一区在线观看视频| 欧美日韩中文另类| 久久精品噜噜噜成人88aⅴ | 成人免费va视频| 亚洲精选一二三| 在线播放国产精品二区一二区四区| 欧美a一区二区| 欧美高清在线一区| 欧美主播一区二区三区美女| 免费观看在线综合色| 国产欧美一区二区在线观看| 不卡免费追剧大全电视剧网站| 一卡二卡三卡日韩欧美| 日韩一区二区三区在线视频| 高清不卡在线观看av| 亚洲综合激情另类小说区| 日韩一区二区三区视频| 成人国产一区二区三区精品| 亚洲宅男天堂在线观看无病毒| 欧美一级生活片| 成人美女视频在线看| 青青草视频一区| 亚洲三级在线看| 久久综合久久久久88| 欧美一级在线视频| 从欧美一区二区三区| 日韩在线观看一区二区| 国产精品毛片a∨一区二区三区| 91搞黄在线观看| 成人免费视频网站在线观看| 天天综合色天天综合| 国产精品美女一区二区| 日韩免费视频一区| 在线观看免费成人| 国产不卡在线播放| 久久精品国产免费| 亚洲线精品一区二区三区| 国产精品剧情在线亚洲| 久久综合九色综合欧美就去吻| 欧美色综合网站| 99精品热视频| 国产成人亚洲精品青草天美 | 麻豆精品国产传媒mv男同| 自拍偷在线精品自拍偷无码专区| 精品国产麻豆免费人成网站| 欧美日韩国产小视频在线观看| 99精品视频中文字幕| 大尺度一区二区| 国产成人免费视频| 经典三级在线一区| 精品一区二区在线播放| 日日摸夜夜添夜夜添国产精品 | 91搞黄在线观看| a级高清视频欧美日韩| 国产.欧美.日韩| 国产寡妇亲子伦一区二区| 国产麻豆精品theporn| 九一九一国产精品| 经典三级在线一区| 国产一区二区久久| 国产精品一区二区久久不卡| 国产美女在线观看一区| 国产呦萝稀缺另类资源| 国产露脸91国语对白| 国产毛片一区二区| 成人久久视频在线观看| 不卡av电影在线播放| 95精品视频在线| 欧美在线视频你懂得| 欧美天天综合网| 在线观看91精品国产麻豆| 制服丝袜中文字幕一区| 欧美一区二区三区成人| 日韩免费一区二区| 国产欧美日韩一区二区三区在线观看| 精品国产一区二区亚洲人成毛片| 精品国产乱码91久久久久久网站| 久久久综合视频| 国产精品高潮呻吟久久| 亚洲欧美色综合| 婷婷亚洲久悠悠色悠在线播放| 日韩精品免费视频人成| eeuss鲁片一区二区三区在线看| 91视频观看免费| 欧美喷水一区二区| 亚洲精品一区二区三区精华液| 国产午夜三级一区二区三| ...xxx性欧美| 天天色综合成人网| 国产精品资源站在线| 99re这里只有精品6| 欧美日韩你懂得| 久久蜜桃香蕉精品一区二区三区| 国产精品毛片久久久久久久 | 欧美性色综合网| 日韩一本二本av| 中文一区一区三区高中清不卡| 一区二区三区**美女毛片| 久久99精品一区二区三区三区| 9色porny自拍视频一区二区| 欧美另类videos死尸| 中文字幕国产一区二区| 午夜精品福利一区二区蜜股av | 欧美丝袜丝nylons| 久久精品视频一区二区三区|