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

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

?? f31xsr176.c

?? 利用C8051F31x的SMBus總線實現對射頻讀寫芯片的基本讀寫
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************************
描述:			利用C8051F31x的SMBus總線實現對射頻讀卡芯片
				的基本讀寫,并將讀寫的結果通過串行接口傳送
				到PC端的演示程序顯示出來。
				-C8051F31x的SMBus總線工作在主模式
				-中斷下實現數據的收發
				-定時器0作為SMBus的時鐘源
				-定時器3作為SMBus時鐘信號SCL的低電平超時檢測
				-SCL頻率由常數SMB_FREQUENCY定義
				-P0.0 -> SDA (SMBus)
				-P0.1 -> SCL (SMBus)
				-P0.4 -> TXD
				-P0.5 -> RXD
**************************************************************************************/


#include "serial.h"		 	        /* 特殊功能寄存器定義,串行通信函數原型宣告 */

/*常量定義*/
#define SMB_FREQUENCY	50000	    /* SCL時鐘頻率 */
#define	WRITE			0x00		/* SMBus寫命令 */
#define	READ 	        0x01	    /* SMBus讀命令 */
#define CRX14_ADDR		0xA0		/* CRX14設備地址 */

/* SMBus狀態向量 - 僅高4位 */
#define	SMB_MTSTR		0xE0		/* (MT) 開始發送 */
#define	SMB_MTDB		0xC0        /* (MT) 數據字節發送 */
#define	SMB_MRDB		0x80        /* (MR) 數據字節接收 */
#define SMB_DELAY		0xA0		/* 延時	*/


/*************************************************************************************/
/*全局變量定義*/
BYTE TX_buf[10];					/* 發送緩沖區 */
BYTE RX_buf[10];					/* 接收緩沖區 */
BYTE SMB_state,SMB_data_len,SMB_data_index,read_len;	/* SMB狀態,SMB數據長度,SMB數據索引,讀取數據長度 */
BYTE CommSendBufferHead, CommSendBufferTail;			/* 發送緩沖區頭,尾變量 */
BYTE CommRecBufferHead, CommRecBufferTail;				/* 接收緩沖區頭,尾變量 */

bit		SMB_BUSY;					/* SMBus忙旗標 */
bit		FirstTime;					/* 首次旗標*/
bit		SMB_RW;						/* 指示當前傳送方向的旗標 */
bit		Read_Bit;					/* 讀旗標 */

sfr16	TMR3RL   = 0x92;			/* 定時器3重載寄存器 */
sfr16   TMR3     = 0x94;			/* 定時器3計數寄存器 */


/*************************************************************************************/
/* 函數原型 */
void Buzzer(BYTE delaytime);
void SMBus_Init(void);	
void Timer0_Init(void);						
void Timer3_Init(void);
void Port_Init(void);
void SMBus_ISR(void);
void Timer3_ISR(void);
BYTE xhl_i2c_Master_Xmit(BYTE N);
BYTE xhl_i2c_Master_Recv(BYTE N);


/***************************************************************************************
函數名稱:	BYTE HEXToASC(BYTE x)
功能描述:	十六進數轉化成ASCII碼
輸入:		BYTE x(所要轉化的十六進數)
輸出:		轉化后的ASCII碼
全局變量:	無
調用模塊:	無
***************************************************************************************/
BYTE HEXToASC(BYTE x)
{
	if (x>9) return x+0x40-9;
	else return x+0x30;
}


/***************************************************************************************
函數名稱:	BYTE ASCToHEX(BYTE x)
功能描述:	ASCII碼轉化成十六進數
輸入:		BYTE x(所要轉化的ASCII碼)
輸出:		轉化后的十六進數
全局變量:	無
調用模塊:	無
***************************************************************************************/
BYTE ASCToHEX(BYTE x)
{
	if ((x>='0')&&(x<='9'))			/* 數字 */
	{
		return x-0x30;
	}
	else
	{
		if ((x>='A')&&(x<='F'))		/* 大寫字母 */
			return x-'A'+10;
		if ((x>='a')&&(x<='f'))		/* 小寫字母 */
			return x-'a'+10;
	}
	return 0;
}


/***************************************************************************************
函數名稱:	void sleep_ms(WORD count)
功能描述:	延時
輸入:		WORD count(所要延時的長度)
輸出:		無
全局變量:	無
調用模塊:	_nop_()
***************************************************************************************/
void sleep_ms(WORD count)
{
  WORD i,j;
  for(i=0;i<count;i++)
    {
      for(j=0;j<203;j++)
	  _nop_();			
    }	
}


/***************************************************************************************
函數名稱:	void OneBuzzer(BYTE delaytime)
功能描述:	蜂鳴器響一聲后關閉
輸入:		BYTE delaytime(響一聲的長度)
輸出:		無
全局變量:	BUZZER -> 蜂鳴器的控制I/O
調用模塊:	void sleep_ms(WORD count)
***************************************************************************************/
void OneBuzzer(BYTE delaytime)
{
	BYTE i;
	BUZZER = 1;				/* 響 */
	for(i=0;i<delaytime;i++){
		sleep_ms(30);		/* 蜂鳴器響時間延時 */	
	}
	BUZZER = 0;				/*  不響 */
}


/***************************************************************************************
函數名稱:	BYTE Write_Parameters()
功能描述:	寫CRX14參數寄存器
輸入:		無
輸出:		運行結果返回碼
全局變量:	無
調用模塊:	BYTE xhl_i2c_Master_Xmit(BYTE N)
***************************************************************************************/
BYTE Write_Parameters()
{
	BYTE rewp;
	rewp = xhl_i2c_Master_Xmit(2);
    if(rewp==0x01)
        return 0;		/* 錯誤 */
    else
	    return rewp;	/* 正確 */
}


/***************************************************************************************
函數名稱:	BYTE Read_Parameters()
功能描述:	讀CRX14參數寄存器
輸入:		無
輸出:		運行結果返回碼
全局變量:	Read_bit -> 是否結束此次讀寫操作
   			Tx_buf 	 -> 發送緩沖區
調用模塊:	BYTE xhl_i2c_Master_Xmit(BYTE N)
			BYTE xhl_i2c_Master_Recv(BYTE N)
***************************************************************************************/
BYTE Read_Parameters()
{
	BYTE rerp;
	Read_Bit=1;
	TX_buf[0]=0x00;
    rerp = xhl_i2c_Master_Xmit(1);
    Read_Bit=0;
	if(rerp!=0x01){ 
        return rerp;				/* 主發送失敗 */
    }
 	rerp = xhl_i2c_Master_Recv(1);
    if(rerp==0x01) return 0;		/* 正確 */
    else return rerp;				/* 失敗 */
}

/***************************************************************************************
函數名稱:	BYTE Write_IO_data()
功能描述:	寫CRX14輸入/輸出幀寄存器
輸入:		無
輸出:		運行接過返回碼
全局變量:	無
調用模塊:	BYTE xhl_i2c_Master_Xmit(BYTE N)
***************************************************************************************/
BYTE Write_IO_data()
{
	BYTE rewid;
   	rewid = xhl_i2c_Master_Xmit(TX_buf[1]+2);
    if(rewid==0x01){
        return 0;		/* 正確 */
    }
    else return rewid;	/* 錯誤 */
}


/***************************************************************************************
函數名稱:	BYTE Read_IO_data()
功能描述:	讀CRX14輸入/輸出幀寄存器
輸入:		無
輸出:		運行結果返回碼
全局變量:	Read_Bit -> 是否結束此次讀寫操作
   			Tx_buf   -> 發送緩沖區
			read_len -> 接收數據長度
調用模塊:	BYTE xhl_i2c_Master_Xmit(BYTE N)
			BYTE xhl_i2c_Master_Recv(BYTE N)
***************************************************************************************/
BYTE Read_IO_data()
{
	BYTE rerid;
	Read_Bit=1;
	TX_buf[0]=0x01;
    rerid = xhl_i2c_Master_Xmit(1);
	Read_Bit=0;
    if(rerid!=0x01) return rerid;		/* 主發送失敗 */
	rerid = xhl_i2c_Master_Recv(read_len);
    if(rerid==0x01) return 0;			/* 正確 */
    else return rerid;					/* 失敗 */											
}


/***************************************************************************************
函數名稱:	BYTE RF_OFF(void)
功能描述:	關閉載頻信號輸出
輸入:		無
輸出:		運行結果返回碼
全局變量:	Tx_buf -> 發送緩沖區
   			Rx_buf -> 接收緩沖區
調用模塊:	BYTE Read_Parameters()
			BYTE Write_Parameters()
***************************************************************************************/
BYTE RF_OFF (void)
{
	BYTE rero;
	rero = Read_Parameters();
    if(rero!=0) return rero;
    TX_buf[0] = 0;
	TX_buf[1]=RX_buf[0]&0xEF;		/* 復位參數寄存器的第4位 */
	rero = Write_Parameters();
    if(rero!=0) return rero;		/* 錯誤 */
	return 0;						/* 正確 */
}


/***************************************************************************************
函數名稱:	BYTE RF_ON(void)
功能描述:	打開載頻信號輸出
輸入:		無
輸出:		運行結果返回碼
全局變量:	Tx_buf -> 發送緩沖區
   			Rx_buf -> 接收緩沖區
調用模塊:	BYTE Read_Parameters()
			BYTE Write_Parameters()
***************************************************************************************/
BYTE RF_ON (void)
{
	BYTE rero;
	rero = Read_Parameters();
    if(rero!=0) return rero;
	TX_buf[0]=0x00;
	TX_buf[1]=RX_buf[0]|0x10;		/* 設置參數寄存器的第4位 */
	rero = Write_Parameters();
    if(rero!=0) return rero;		/* 錯誤 */
	return 0;						/* 正確 */
}


/***************************************************************************************
函數名稱:	BYTE Send_Receive_Data()
功能描述:	向射頻卡發送命令后,依據命令字的不同等待射頻卡返回相應數據
輸入:		無
輸出:		運行結果的返回碼
全局變量:	Tx_Buf ->發送緩沖區
調用模塊:	BYTE Write_IO_data(void)
			void sleep_ms(WORD count)
			BYTE Read_IO_data(void)
***************************************************************************************/
BYTE Send_Receive_Data()
{
	BYTE reval;
	BYTE i=0;
	reval = Write_IO_data();
	if(reval==0){					/* 發送正確 */
		if((TX_buf[2]==0x09)||(TX_buf[2]==0x0F)) return 0;
        RX_buf[0] = 0;	
		sleep_ms(160);
        while ((i++<5)&&(RX_buf[0]==0)){
			reval = Read_IO_data();
			if(reval==0) break;
			//sleep_ms(1000);
		}
		if(reval!=0) return reval;	/* 接收錯誤 */
	}			
	else return reval;				/* 發送錯誤 */
	return 0;
}


/***************************************************************************************
函數名稱:	BYTE xhl_i2c_Master_Xmit(BYTE N)
功能描述:	SMBus主模式發送數據(數據在SMBus中斷內發送)
輸入:		BYTE N(待發送數據字節的長度)
輸出:		運行結果的返回碼
全局變量:	SMB_data_len	->數據長度
			SMB_data_index	->數據索引
			SMB_BUSY		->SMBus忙標志
			SMB_RW			->讀寫標志
			SMB_state		->SMBus運行狀態
			STA				->開始標志
調用模塊:	無
***************************************************************************************/
BYTE xhl_i2c_Master_Xmit(BYTE N)
{
	SMB_data_len=N;
	SMB_data_index=0;
	while(SMB_BUSY);				/* 等候SMBus不忙 */
	SMB_BUSY = 1;					/* 設置到忙 */
   	SMB_RW = 0;                     /* 指示這次傳送是寫 */
	SMB_state=0x55;
	STA = 1;						/* 開始傳送 */
	do{ }while(SMB_state==0x55);
	if(SMB_state==0x01)
		return 0x01;				/* 正確 */
	else
		return 0x00;				/* 錯誤 */
}


/***************************************************************************************
函數名稱:	BYTE xhl_i2c_Master_recv(BYTE N)
功能描述:	SMBus的主模式接收數據
輸入:		BYTE N(待接收數據字節的長度)
輸出:		運行結果的返回碼
全局變量:	SMB_data_len	->數據長度
			SMB_data_index	->數據索引
			SMB_BUSY		->SMBus忙標志
			SMB_RW			->讀寫標志
			SMB_state		->SMBus運行狀態
			STA				->開始標志
調用模塊:	無
***************************************************************************************/
BYTE xhl_i2c_Master_recv(BYTE N)
{	
	SMB_data_len=N;
	SMB_data_index=0;
	while(SMB_BUSY);				/* 等候總線不忙 */
	SMB_BUSY = 1;					/* 設置到忙 */
	SMB_RW = 1;                     /* 指示這次傳送是讀 */
	STA = 1;						/* 開始傳送 */
	SMB_state=0x55;
	do{}while(SMB_state==0x55);
	if(SMB_state==0x01) return 0x01;/* 正確 */
	else return 0x00;				/* 錯誤 */
	//while (SMB_BUSY);				/* 等待傳送完成 */
}

/***************************************************************************************
函數名稱:	void SMBus_ISR(void) interrupt 6
功能描述:	SMBus中斷服務子程序,進行數據的發送和接收
輸入:		無
輸出:		無
全局變量:	SMB_data_len	->數據長度
			SMB_data_index	->數據索引
			SMB_BUSY		->SMBus忙標志
			SMB_RW			->讀寫標志
			SMB_state		->SMBus運行狀態
			STA				->開始標志
			STO				->結束標志
調用模塊:	BYTE sleep_ms(WORD count)
***************************************************************************************/
void SMBus_ISR (void) interrupt 7
{
	bit FAIL;						/* 傳送失敗標志 */
	_nop_();
	switch(SMB0CN & 0xF0){          /* 狀態向量 */
		case SMB_MTSTR:	//1110		/* 主模式發送/接收: 發送START.  
			SMB0DAT = CRX14_ADDR;	/* 輔設備器件地址 */
			SMB0DAT |= SMB_RW;		/* 填充R/W位 */
			STA = 0;				/* 清除START位 */
			break;

		case SMB_MTDB:	//1100		/* 主模式傳送: 數據字節被傳送 */
			if(ACK){				/* 輔設備ACK? */
				if((SMB_data_index)<(SMB_data_len)){
               		if (SMB_RW==WRITE){			/* 如果是寫 */   
						SMB0DAT=TX_buf[SMB_data_index];
						SMB_data_index++;
               		}
					else{}			// If this transfer is a READ, proceed with transfer without
                                    // writing to SMB0DAT (switch to receive mode)
            	}
            	else{               /* 如果上個字節不是輔設備地址 */
					if(SMB_data_index==SMB_data_len){
						if(Read_Bit==0)
							STO=1;		/* 設置STO=1,結束發送 */
						SMB_BUSY = 0;	/* 釋放SMBus接口 */
						SMB_state=0x01;
					}
            	}
         	}
         	else{					/* 如果輔設備NACK */
				FAIL = 1;			/* 傳送失敗,跳到中斷服務程序的最后進行失敗處理 */
			}
			break;

		case SMB_DELAY:
			sleep_ms(100);
			break;
		case SMB_MRDB:	//1000		/* 主模式接收:按字節接收 */
			if(SMB_data_index<SMB_data_len-1){
				RX_buf[SMB_data_index]=SMB0DAT;
				SMB_data_index++;
				ACK=1;				/* 響應ACK */
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品中文字幕在线观看| 奇米综合一区二区三区精品视频| 亚洲一线二线三线视频| 丝袜亚洲另类欧美综合| www..com久久爱| 欧美激情一区在线观看| 亚洲国产一区二区a毛片| 国产传媒久久文化传媒| 6080日韩午夜伦伦午夜伦| 国产精品久久久久久福利一牛影视| 免费成人小视频| 欧美亚洲日本国产| 国产精品丝袜黑色高跟| 极品尤物av久久免费看| 欧美视频一区二区三区| 亚洲乱码国产乱码精品精可以看| 国产久卡久卡久卡久卡视频精品| 欧美电影一区二区三区| 一级做a爱片久久| 成人av在线资源网| 久久久不卡网国产精品二区| 六月丁香婷婷久久| 欧美日韩在线播放| 亚洲第一激情av| 在线精品亚洲一区二区不卡| 中文字幕在线观看不卡视频| 懂色av一区二区在线播放| 亚洲精品在线网站| 久久国产精品99久久人人澡| 91精品久久久久久久99蜜桃| 亚洲福中文字幕伊人影院| 色哟哟欧美精品| 综合久久久久久| 成人高清免费观看| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品香蕉一区二区三区| 久久人人97超碰com| 国产大陆亚洲精品国产| 欧美激情一区二区三区全黄| 大白屁股一区二区视频| 国产精品视频你懂的| 97精品国产露脸对白| 一区2区3区在线看| 5858s免费视频成人| 麻豆精品在线观看| 欧美精品一区二区不卡| 国产一区二区三区四区五区美女 | 国产高清不卡二三区| 久久色视频免费观看| 成人app在线| 亚洲综合视频在线观看| 欧美福利视频导航| 国产综合色在线| 中文字幕一区二| 欧美羞羞免费网站| 美女视频黄频大全不卡视频在线播放| 日韩久久久久久| 成人黄色a**站在线观看| 亚洲欧美怡红院| 制服丝袜中文字幕亚洲| 国产精品伊人色| 亚洲人妖av一区二区| 5月丁香婷婷综合| 成人一区二区三区视频在线观看| 亚洲精品高清视频在线观看| 69av一区二区三区| 国产成人激情av| 亚洲国产日韩a在线播放| 精品日韩av一区二区| 99re热这里只有精品视频| 午夜视频一区二区| 国产欧美一区二区在线| 欧美三级韩国三级日本一级| 国产资源在线一区| 一区二区在线免费观看| 精品剧情v国产在线观看在线| 99在线精品观看| 亚洲aaa精品| 国产精品美女久久久久aⅴ国产馆| 欧美探花视频资源| 成人蜜臀av电影| 日本欧美一区二区三区| 国产精品成人免费| 欧美成人艳星乳罩| 精品污污网站免费看| 国产成人午夜高潮毛片| 奇米影视7777精品一区二区| 亚洲天堂精品在线观看| 久久精品综合网| 日韩一区二区中文字幕| 欧美系列亚洲系列| 成人a级免费电影| 国产中文字幕精品| 欧美aaa在线| 亚洲午夜视频在线观看| 中文字幕一区二区三| 精品国产三级电影在线观看| 欧美日韩精品一区二区在线播放 | 99国产欧美久久久精品| 国产精品资源网站| 激情欧美日韩一区二区| 日日夜夜一区二区| 亚洲在线成人精品| 亚洲男人的天堂在线观看| 国产欧美久久久精品影院 | 欧美亚洲动漫另类| 91啪在线观看| 91美女在线看| 91亚洲国产成人精品一区二区三| 国产精品99久久久久久久vr| 麻豆专区一区二区三区四区五区| 日韩主播视频在线| 石原莉奈一区二区三区在线观看| 亚洲午夜精品在线| 亚洲电影第三页| 五月天视频一区| 日韩电影在线一区二区| 日韩精品电影在线| 日本网站在线观看一区二区三区| 日韩影院在线观看| 毛片av一区二区| 精品亚洲国产成人av制服丝袜| 蜜桃视频免费观看一区| 全部av―极品视觉盛宴亚洲| 免费观看30秒视频久久| 另类小说视频一区二区| 国产一区二区三区黄视频| 韩国女主播成人在线| 国产美女精品人人做人人爽| 国产精品一区二区不卡| 国产东北露脸精品视频| av动漫一区二区| 91国产成人在线| 欧美日韩精品免费观看视频 | 精品国产网站在线观看| 久久女同性恋中文字幕| 国产精品免费av| 亚洲激情图片qvod| 日韩国产在线观看| 国产在线播放一区二区三区| 成人精品免费网站| 欧美午夜一区二区三区| 欧美成人性福生活免费看| 国产亚洲一区字幕| 亚洲男人的天堂网| 秋霞电影网一区二区| 国产成人福利片| 在线观看91视频| 欧美成人伊人久久综合网| 欧美国产综合一区二区| 亚洲美女电影在线| 蜜桃av一区二区三区电影| 成人在线综合网| 欧美日韩一区二区电影| 久久美女艺术照精彩视频福利播放| 国产精品国产三级国产普通话蜜臀| 亚洲与欧洲av电影| 国产成人亚洲综合a∨婷婷| 久久一区二区三区国产精品| 国产精品盗摄一区二区三区| 日本最新不卡在线| 91亚洲精品久久久蜜桃网站| 日韩女优视频免费观看| 亚洲欧美激情在线| 国产毛片一区二区| 欧美福利视频一区| 亚洲欧美色一区| 国内精品免费在线观看| 欧美日韩一区二区在线观看视频| 国产亚洲精品aa| 日本不卡一区二区| 欧美综合亚洲图片综合区| 国产午夜亚洲精品午夜鲁丝片| 亚洲国产精品麻豆| 99精品视频一区二区三区| 精品国产百合女同互慰| 午夜欧美电影在线观看| 91蝌蚪porny| 国产精品每日更新| 国产毛片精品一区| 91精品国产免费| 亚洲国产美女搞黄色| av爱爱亚洲一区| 国产女主播视频一区二区| 日韩福利电影在线观看| 精品视频在线免费看| 亚洲美女偷拍久久| 99久久精品一区二区| 国产亚洲一区字幕| 精品一区二区在线观看| 69久久99精品久久久久婷婷| 亚洲精品欧美专区| 色婷婷久久综合| 综合精品久久久| 菠萝蜜视频在线观看一区| 欧美国产欧美综合| 国产一区二区三区| 欧美精品一区二区三区蜜臀| 久久精品国产亚洲一区二区三区| 91精品福利在线一区二区三区 |