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

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

?? twi.s

?? PTR8000無線通信模塊的單片機控制程序
?? S
字號:
	.module twi.c
	.area vector(rom, abs)
	.org 34
	rjmp _twi_isr
	.area text(rom, con, rel)
	.dbfile E:\iccavr\無線+I2C\test1--sr\twi.c
	.dbfunc e StopDelay _StopDelay fV
;              i -> R16,R17
	.even
_StopDelay::
	.dbline -1
	.dbline 40
; 
; /*函數的使用說明:
; 1.該twi模塊包含四種工作模式,主發,主收,從收,從發,其中主發由
;   twiWriteByte(從機地址,要發送的數據)實現,主收由twiReadByte(從機地址)實現,從機
;   的發送與接收均通過中斷實現
; 2.在從機模式下,需調用twi_init()來使能并初始化twi總線
; 3.在主機模式下,調用twiWriteByte(從機地址,要發送的數據)向指定的從機寫入數據,
;   調用twiReadByte(從機地址)從指定的從機讀取數據,然后可通過查詢錯誤狀態error_state
;   的值決定下一步如何操作。
; */
; 
; //************************* 頭文件 ******************************************
; #include "twi.h"
; 
; //TWI同程序的接口參數
; //receive_data,error_state不用設置
; extern char receive_data;  		 // 接收到的數據
; extern char error_state;   		 // twi錯誤狀態
; //以下三個參數根據需求進行設置
; extern char slave_address;      // 設置從機地址,Bits 7..1:存放從機地址,Bit 0:最低位為廣播識別使能位
; extern char bit_race;           // 設置主機模式的比特率,SCL=CPU頻率/(16+2*(TWBR)*4TWPS),TWPS在4的指數位置
; extern char send_data;     	    // 從機發送模式下從機向主機發送的數據
; 
; //*************************** twi錯誤狀態說明*********************************
; // 0:twi傳送無錯誤
; // 1:在主發模式下,SLA+W已發送,返回NOT ACK
; // 2:在主發模式下,DATA已發送,返回NOT ACK
; // 3:在主發模式下,SLA+W或者數據的仲裁失敗
; // 4:在主收模式下,SLA+R或者數據的仲裁失敗
; // 5:在主收模式下,SLA+R已發送,返回NOT ACK
; // 6:在主發模式下,START信號發送不成功
; // 7:在主收模式下,START信號發送不成功
; // 8:在主收模式下,數據接受完成
; // 9:在主收模式下,數據接受不成功
; //*****************************************************************************
; 
; //*************************** twi stop 信號延時時間 ****************************
; //******************************************************************************
; void StopDelay(void)
; {
	.dbline 42
	clr R16
	clr R17
	rjmp L5
L2:
	.dbline 42
L3:
	.dbline 42
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 42
; 	unsigned int i;
; 	for(i = 0;i < 20;i ++);
	cpi R16,20
	ldi R30,0
	cpc R17,R30
	brlo L2
	.dbline -2
	.dbline 43
; }
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e start _start fV
	.even
_start::
	.dbline -1
	.dbline 47
; //******************************* twi 啟動總線*********************************
; //******************************************************************************
; void start(void)
; {
	.dbline 48
; 	TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);	//發出start信號
	ldi R24,164
	out 0x36,R24
	.dbline 49
; 	_NOP();
	nop
	.dbline 50
; 	_NOP();
	nop
	.dbline -2
	.dbline 51
; }
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e stop _stop fV
	.even
_stop::
	.dbline -1
	.dbline 55
; //************************** twi 釋放總線************************************
; //***************************************************************************
; void stop(void)
; {
	.dbline 56
; 	TWCR = (1 << TWINT) |(1 << TWEN)|(1 << TWSTO); //發出stop信號	
	ldi R24,148
	out 0x36,R24
	.dbline 57
; 	StopDelay();           //等待總線恢復
	rcall _StopDelay
	.dbline 58
; 	TWCR= 0x45;
	ldi R24,69
	out 0x36,R24
	.dbline -2
	.dbline 59
; }
L7:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_init _twi_init fV
	.even
_twi_init::
	.dbline -1
	.dbline 71
; //****************************** twi 初始化*************************************
; // TWCR: 控制寄存器,用來控制TWI操作,說明如下:
; // Bit 7-TWINT:中斷標志位,Bit 6-TWEA:使能應答位,Bit 5-TWSTA:START狀態位
; // Bit 4-TWSTO:STOP狀態位,Bit 3-TWWC: 寫沖突標志,Bit 2-TWEN:TWI使能位
; // Bit 1-RES:保留,Bit 0-TWIE:中斷使能                   
; // TWSR: 狀態寄存器,Bits 7..3:表示了TWI總線的當前狀態,讀取時需屏蔽低三位的值,Bits 1..0-TWPS:TWI預分頻位
; // TWBR: 比特率寄存器,用來設置TWI的工作頻率,計算公式為:SCL=CPU頻率/(16+2*(TWBR)*4TWPS),TWPS在4的指數位置
; // TWAR: 從機地址寄存器,Bits 7..1:存放從機地址,Bit 0:最低位為廣播識別使能位
; // TWDR: 數據寄存器,用來存放接收或要發送的地址和數據
; //******************************************************************************
; void twi_init(void)
; {
	.dbline 72
; 	TWCR= 0x00;    			//disable twi
	clr R2
	out 0x36,R2
	.dbline 73
; 	TWBR= bit_race;   		//set bit rate
	lds R2,_bit_race
	out 0x0,R2
	.dbline 74
; 	TWSR= 0x00;             //set prescale為1
	clr R2
	out 0x1,R2
	.dbline 75
; 	TWAR= slave_address;    //set slave address
	lds R2,_slave_address
	out 0x2,R2
	.dbline 76
; 	TWCR= 0x45;          //enable twi
	ldi R24,69
	out 0x36,R24
	.dbline -2
	.dbline 77
; }
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e twi_isr _twi_isr fc
;     TWSR_state -> R16
	.even
_twi_isr::
	st -y,R2
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 190
; //************************** 檢測發送時的狀態碼 ****************************
; //**************************************************************************
; /*void checkstate(void)
; {
; 	unsigned char TWSR_state;
; 	TWSR_state = TWSR & 0xf8; //屏蔽第三位讀取狀態
; 	switch(TWSR_state)
; 	{
; 	case 0x08:error_state=0;break;  // START已發送
; 	case 0x18:error_state=0;break;  // SLA+W已發送,接收到ACK
; 	case 0x20:error_state=1;break;  // SLA+W已發送,接收到NOT ACK
; 	case 0x28:error_state=0;break;  // 數據已發送,接收到ACK
; 	case 0x30:error_state=2;break;  // 數據已發送,接收到NOT ACK
; 	case 0x38:error_state=3;break;  // SLA+W或數據的仲裁失敗
; 	default: break;
; 	}
; 	TWCR=0x45;
; }
; //********** twi主機發送,向地址為WriteAddress的從機發送1個字節數據************
; // 入口參數1:WriteAddress:從機地址
; // TWDR中存放的高七位為地址,最低位表示讀寫控制,0為寫,1為讀
; // 入口參數2:data,向從機寫的數據
; //******************************************************************************
; void twiWriteByte(unsigned char WriteAddress,char data)
; {
; 	unsigned char TWCR_state;
; 	char i=0;
; 	error_state=0;
; 	
; 	//初始化 twi 
; 	twi_init();
; 	
; 	//發送START信號 
; 	start();
; 	TWCR_state = TWCR & 0x80;
; 	while((TWCR_state == 0x00))
; 	{ 
; 		i++; 
; 		if(i>=10){error_state=6;break;}
; 		TWCR_state = TWCR & 0x80;    //輪循等待START信號發送完成
; 	}	
; 	
; 	//若START發送成功,發送從機地址
; 	if(error_state==0)
; 	{
; 		TWDR = WriteAddress;        //發地址
; 		_NOP();
; 		_NOP();
; 		
; 		TWCR = (1 << TWINT) | (1 << TWEN);
; 		TWCR_state = TWCR & 0x80;
; 		while(TWCR_state == 0x00)
; 		{TWCR_state = TWCR & 0x80;}	  //輪循查詢地址是否發送
; 		checkstate();
; 	}
; 	
; 	//若從機地址發送成功,向從機發送數據
; 	if(error_state==0)
; 	{
; 		TWDR = data;               //發數據
; 		_NOP();
; 		_NOP();
; 		TWCR = (1 << TWINT) | (1 << TWEN);
; 		TWCR_state = TWCR & 0x80;
; 		while(TWCR_state == 0x00) TWCR_state = TWCR & 0x80;	//輪循查詢數據是否發送
; 		checkstate();
; 	}
; 	
; 	//發送STOP,退出總線控制
; 	stop();
; }
; //************** twi主機接收,從地址為ReadAaddress的從機接收1個字節*************
; // 入口參數1:ReadAaddress:從機地址
; // TWDR中存放的高七位為地址,最低位表示讀寫控制,0為寫,1為讀
; //******************************************************************************
; void twiReadByte(unsigned char ReadAaddress)
; {
; 	unsigned char TWCR_state;
; 	char i=0;
; 	error_state=0;
; 	
; 	//初始化 twi 
; 	twi_init();
; 	
; 	//發送START信號
; 	start();
; 	TWCR_state = TWCR & 0x80;
; 	while((TWCR_state == 0x00))
; 	{ 
; 		i++; 
; 		if(i>=10){error_state=7;break;}
; 		TWCR_state = TWCR & 0x80;    //輪循等待START信號發送完成
; 	}	
; 	
; 	//若START信號發送完成,發送讀地址,并讀取數據
; 	if(error_state==0)
; 	{
; 		TWDR = ReadAaddress;         //發地址
; 		_NOP();
; 		_NOP();
; 		TWCR = (1 << TWINT) | (1 << TWEN)|( 1<<TWIE )|(1 << TWEA);
; 		while(error_state==0) 
; 		{i++;if(i>150){error_state=9;break;}};
; 	}
; 	
; 	//發送STOP,退出總線控制
; 	stop();
; }*/
; //************** twi 中斷例程,接收數據 ****************************************
; //******************************************************************************
; //twi中斷服務程序
; char twi_isr(void)
; {
	.dbline 192
; 	unsigned char TWSR_state;
; 	TWSR_state = TWSR & 0xf8;
	in R16,0x1
	andi R16,248
	.dbline 193
; 	switch(TWSR_state)
	clr R17
	cpi R16,128
	ldi R30,0
	cpc R17,R30
	breq L14
	ldi R24,128
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L20
L19:
	cpi R16,0
	cpc R16,R17
	breq L18
X0:
	cpi R16,0
	ldi R30,0
	cpc R17,R30
	brlt L11
L21:
	cpi R16,96
	ldi R30,0
	cpc R17,R30
	breq L13
	rjmp L11
L20:
	cpi R16,160
	ldi R30,0
	cpc R17,R30
	breq L16
	ldi R24,160
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L23
L22:
	cpi R16,136
	ldi R30,0
	cpc R17,R30
	breq L15
	rjmp L11
L23:
	cpi R16,248
	ldi R30,0
	cpc R17,R30
	breq L11
	rjmp L11
X1:
	.dbline 194
; 	{
L13:
	.dbline 196
; 		//從機接收模式下的中斷程序
;     case 0x60: TWCR=0xc5;break;      	       // SLA+W已經接收,ACK已返回(從機被尋址,等待主機發送數據)
	ldi R24,197
	out 0x36,R24
	.dbline 196
	rjmp L11
L14:
	.dbline 197
;     case 0x80: receive_data = TWDR;TWCR=0xc5;break;  // 數據已接收,ACK已返回(接收數據)
	in R2,0x3
	sts _receive_data,R2
	.dbline 197
	ldi R24,197
	out 0x36,R24
	.dbline 197
	rjmp L11
L15:
	.dbline 198
;     case 0x88: TWCR=0xc5;break;			       // 數據已接收,NOT ACK已返回(下一步:退出總線)
	ldi R24,197
	out 0x36,R24
	.dbline 198
	rjmp L11
L16:
	.dbline 199
; 	case 0xA0: TWCR=0xc5;break;			       // 接收到STOP或重復的START信號(停止接收數據)
	ldi R24,197
	out 0x36,R24
	.dbline 199
	rjmp L11
X2:
	.dbline 215
; 		
; 	/*	//主機接收模式下的中斷程序
;     case 0x38: error_state=4;TWCR=0xc5;break;  // SLA+R或NOT ACK仲裁失敗(下一步:退出總線)
; 	case 0x40: TWCR=0xc5; break;               // SLA+R已發送,接收到ACK(從機被尋址,主機等待接收數據)
; 	case 0x48: error_state=5;TWCR=0xc5;break;  // SLA+R已發送,接收到NOT ACK(下一步:退出總線)
;     case 0x50: receive_data = TWDR;_NOP();_NOP();error_state=8;TWCR = 0xc4;break;	// 接收到數據,ACK已返回(接收數據)
; 	case 0x58: receive_data = TWDR;_NOP();_NOP();error_state=8;TWCR = 0xc4;break;   // 接收到數據,NOT ACK已返回(下一步:退出總線)
; 		
; 		//從機發送模式
; 	case 0xA8: TWDR= send_data;_NOP();_NOP();TWCR= 0x85; break; // SLA+R已接收,ACK已返回(從機被尋址,開送發送數據)
; 	case 0xB8: TWCR= 0xc5;break;              // TWDR里的數據已發送,接受到ACK(主機接收到數據,繼續發送數據)
; 	case 0xC0: TWCR= 0xc5;break;			  // TWDR里的數據已發送,接受到NOT ACK(下一步:退出總線)
; 	case 0xC8: TWCR= 0xc5;break;              // TWEA=0,接收到ACK(停止發送數據,退出發送)
; 		*/
; 		//其他狀態碼
; 	case 0xf8: break;						  // 等待或進行當前傳輸
L18:
	.dbline 216
; 	case 0x00: TWCR= 0x95;break;              // 非法的START或STOP引起的總線錯誤(釋放總線)
	ldi R24,149
	out 0x36,R24
	.dbline 216
	.dbline 217
;     default:   break;
L11:
	.dbline 219
; 	}
; 	return receive_data;					  // 返回接收到的數據
	lds R16,_receive_data
	.dbline -2
L9:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r TWSR_state 16 c
	.dbend

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精彩视频在线观看| 欧美精品一级二级三级| 国产精品主播直播| 免费看欧美女人艹b| 亚洲电影一级黄| 亚洲精品videosex极品| 亚洲欧美日韩国产成人精品影院 | 99精品桃花视频在线观看| 国产风韵犹存在线视精品| 丰满放荡岳乱妇91ww| 国产a视频精品免费观看| 成人一区二区三区| 99精品热视频| 在线观看一区二区视频| 欧美精品xxxxbbbb| 欧美成人精精品一区二区频| 日韩免费性生活视频播放| 精品国精品国产尤物美女| 2023国产精品自拍| 国产精品久久久久久久久图文区| 中文幕一区二区三区久久蜜桃| 中文在线免费一区三区高中清不卡| 欧美国产日产图区| 一区二区三区在线观看国产| 午夜电影网一区| 极品少妇一区二区三区精品视频| 另类小说综合欧美亚洲| 国产成人精品亚洲777人妖| 成+人+亚洲+综合天堂| 色天天综合色天天久久| 91麻豆精品国产| 久久久综合激的五月天| 国产精品传媒入口麻豆| 亚洲国产成人tv| 国产综合久久久久久鬼色| 丁香五精品蜜臀久久久久99网站 | 韩国欧美一区二区| 99精品视频中文字幕| 欧美日韩视频一区二区| 精品日韩一区二区三区免费视频| 中文欧美字幕免费| 视频一区国产视频| 国产精品综合二区| 欧美羞羞免费网站| 久久亚洲影视婷婷| 一区二区三区资源| 国模娜娜一区二区三区| 色久优优欧美色久优优| 精品少妇一区二区三区视频免付费 | 日韩美女主播在线视频一区二区三区| 久久精品一区蜜桃臀影院| 有坂深雪av一区二区精品| 久久99日本精品| 色久优优欧美色久优优| 精品国产91乱码一区二区三区 | 极品尤物av久久免费看| 91久久久免费一区二区| 久久奇米777| 亚洲国产一区二区在线播放| 国产麻豆精品久久一二三| 欧美视频在线播放| 国产精品女主播在线观看| 日本亚洲三级在线| 91视频国产观看| 久久精品视频免费| 美女高潮久久久| 91官网在线观看| 国产精品丝袜一区| 久久99精品网久久| 欧美日韩精品一区二区在线播放 | 久久精品国产99国产精品| 91麻豆自制传媒国产之光| 欧美电视剧在线看免费| 一区2区3区在线看| 成人免费看的视频| 2欧美一区二区三区在线观看视频| 亚洲另类在线视频| 成人少妇影院yyyy| 欧美精品一区二区不卡| 日本美女视频一区二区| 99久久er热在这里只有精品66| 国产偷国产偷亚洲高清人白洁| 美女一区二区视频| 欧美久久久久久久久中文字幕| 亚洲天堂免费在线观看视频| 国产福利电影一区二区三区| 日韩精品一区二区三区在线播放| 亚洲午夜久久久久久久久电影网 | 国产在线播放一区三区四| 91精品国产综合久久久久久漫画| 一区二区成人在线| 日本韩国一区二区三区| 一色桃子久久精品亚洲| 国产成人精品免费一区二区| 久久一日本道色综合| 极品美女销魂一区二区三区免费| 在线观看国产91| 一区二区三区四区在线免费观看| aaa国产一区| 欧美国产日韩亚洲一区| 国产盗摄视频一区二区三区| 欧美成人vps| 久久99在线观看| 亚洲精品一区在线观看| 韩国女主播成人在线| 2021中文字幕一区亚洲| 国产一区二区日韩精品| 久久亚洲二区三区| 国产成人亚洲综合色影视| 欧美经典一区二区三区| 风间由美一区二区三区在线观看| 久久综合网色—综合色88| 激情六月婷婷综合| 国产日韩欧美一区二区三区乱码| 国产精品18久久久久久久网站| 国产欧美综合色| 91亚洲午夜精品久久久久久| 亚洲精品福利视频网站| 欧美色图在线观看| 青青草伊人久久| 亚洲精品在线观看网站| 丁香婷婷综合色啪| 亚洲乱码国产乱码精品精可以看| 99精品视频在线观看| 亚洲曰韩产成在线| 欧美成人一区二区三区片免费| 国精产品一区一区三区mba桃花| 国产欧美日韩麻豆91| 色欧美日韩亚洲| 午夜电影网一区| 久久久久久影视| 91一区在线观看| 亚洲午夜国产一区99re久久| 欧美精品久久一区| 国内精品在线播放| 自拍视频在线观看一区二区| 91国偷自产一区二区开放时间| 日本不卡一区二区三区高清视频| 精品处破学生在线二十三| 成人一级片在线观看| 亚洲电影第三页| 国产日韩欧美精品在线| 色婷婷久久久综合中文字幕| 亚洲国产精品久久久男人的天堂| 久久夜色精品一区| 欧美伊人久久久久久久久影院| 青青草国产精品亚洲专区无| 久久蜜臀中文字幕| 在线中文字幕一区二区| 精品一区二区日韩| 一区二区三区四区蜜桃| 欧美va日韩va| 欧美性感一区二区三区| 精品一区二区在线看| 亚洲三级久久久| 26uuu另类欧美| 欧美性色黄大片| 国产91在线观看| 三级久久三级久久久| 国产精品久久夜| 日韩欧美的一区二区| 94-欧美-setu| 国产原创一区二区| 亚洲国产精品综合小说图片区| 国产亚洲va综合人人澡精品| 欧美午夜精品理论片a级按摩| 风流少妇一区二区| 精品在线你懂的| 洋洋av久久久久久久一区| 国产午夜精品在线观看| 在线不卡中文字幕| 色悠久久久久综合欧美99| 国内精品嫩模私拍在线| 亚洲图片欧美综合| 国产精品免费久久久久| 欧美电影精品一区二区| 欧美亚洲图片小说| 99久久99久久免费精品蜜臀| 狠狠网亚洲精品| 性欧美疯狂xxxxbbbb| 亚洲精品成a人| 成人欧美一区二区三区黑人麻豆| 精品国产髙清在线看国产毛片| 欧美日韩国产美女| 91久久免费观看| 91麻豆成人久久精品二区三区| 国产精品91一区二区| 久久99精品国产麻豆婷婷洗澡| 天天av天天翘天天综合网色鬼国产 | 欧美日本高清视频在线观看| 91免费国产在线观看| 国产精品99久| 国产一区二区毛片| 国产综合色精品一区二区三区| 免费成人av在线| 日本午夜精品视频在线观看| 亚洲亚洲精品在线观看| 亚洲国产日韩av| 亚洲午夜羞羞片| 婷婷久久综合九色综合伊人色|