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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? twi.lst

?? 一個基于MEGA16的GUI
?? LST
?? 第 1 頁 / 共 2 頁
字號:
   1               		.file	"twi.c"
   2               		.arch atmega16
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 130               	.global	TWI_RW
 132               	TWI_RW:
   1:twi.c         **** /***********************************************
   2:twi.c         **** ****      AVR TWI讀寫讀寫范例                 ***
   3:twi.c         **** ****  	                                     ***
   4:twi.c         **** **** 作者:  HJJourAVR                        ***
   5:twi.c         **** **** 編譯器:WINAVR20050214                   ***
   6:twi.c         **** ****                                         ***
   7:twi.c         **** ****  	www.OurAVR.com	 2005.10.18          ***
   8:twi.c         **** ***********************************************/
   9:twi.c         **** /*
  10:twi.c         **** 本程序簡單的示范了如何使用ATMEGA16的TWI 讀寫AT24C02 IIC EEPROM
  11:twi.c         ****     TWI協(xié)議
  12:twi.c         ****      	(即IIC協(xié)議,請認(rèn)真參考IIC協(xié)議的內(nèi)容,否則根本就不能掌握)
  13:twi.c         ****     一主多從的應(yīng)用,M16作主機
  14:twi.c         ****      	(M16做從機和多主多從的應(yīng)用不多,請自行參考相關(guān)文檔)
  15:twi.c         **** 	中斷模式
  16:twi.c         ****     	(因為AVR的速度很高,而IIC的速度相對較低,
  17:twi.c         ****      	采用查詢模式會長時間獨占CPU,令CPU的利用率明顯下降。
  18:twi.c         ****      	特別是IIC速度受環(huán)境影響只能低速通訊時,對系統(tǒng)的實時性產(chǎn)生嚴(yán)重的影響。
  19:twi.c         ****      	查詢模式可以參考其它文檔和軟件模擬IIC的文檔)
  20:twi.c         ****      AT24C02/04/08的操作特點
  21:twi.c         ****  
  22:twi.c         **** 出于簡化程序考慮,各種數(shù)據(jù)沒有對外輸出,學(xué)習(xí)時建議使用JTAG ICE硬件仿真器
  23:twi.c         **** */
  24:twi.c         **** 
  25:twi.c         **** #include    "config.h"
  26:twi.c         **** 
  27:twi.c         **** 
  28:twi.c         **** //定義全局變量
  29:twi.c         **** uint8 BUFFER[10];						//緩沖區(qū),可以裝載整個AC24C02的數(shù)據(jù)
  30:twi.c         **** 
  31:twi.c         **** struct str_TWI									//TWI數(shù)據(jù)結(jié)構(gòu)
  32:twi.c         **** {
  33:twi.c         ****     volatile uint8	STATUS;				//TWI_操作狀態(tài)
  34:twi.c         ****     uint8	SLA;						//從設(shè)備的器件地址
  35:twi.c         ****     uint16	ADDR;						//從設(shè)備的數(shù)據(jù)地址
  36:twi.c         ****     uint8	*pBUF;						//數(shù)據(jù)緩沖區(qū)指針
  37:twi.c         ****     uint16	DATALEN;					//數(shù)據(jù)長度
  38:twi.c         ****     uint8	STATE;						//TWI讀寫操作步驟
  39:twi.c         ****     uint8	FAILCNT;					//失敗重試次數(shù)
  40:twi.c         **** };
  41:twi.c         **** 
  42:twi.c         **** struct str_TWI strTWI;							//TWI的數(shù)據(jù)結(jié)構(gòu)變量
  43:twi.c         **** 
  44:twi.c         **** //仿真時在watch窗口,監(jiān)控這些全局變量。
  45:twi.c         **** 
  46:twi.c         **** 
  47:twi.c         **** //AT24C02的讀寫函數(shù)(包括隨機讀,連續(xù)讀,字節(jié)寫,頁寫)
  48:twi.c         **** //根據(jù)sla的最低位決定(由中斷程序中判斷)
  49:twi.c         **** //bit0=1 TW_READ  讀
  50:twi.c         **** //bit0=0 TW_WRITE 寫
  51:twi.c         **** //  sla			器件地址(不能搞錯)
  52:twi.c         **** //	addr		EEPROM地址(0~1023)
  53:twi.c         **** //	*ptr		讀寫數(shù)據(jù)緩沖區(qū)
  54:twi.c         **** //	len			讀數(shù)據(jù)長度(1~1024),寫數(shù)據(jù)長度(1 or 8 or 16)
  55:twi.c         **** //  返回值		是否能執(zhí)行當(dāng)前操作
  56:twi.c         **** uint8 TWI_RW(uint8 sla,uint16 addr,uint8 *ptr,uint16 len)
  57:twi.c         **** {
 134               	.LM1:
 135               	/* prologue: frame size=0 */
 136               	/* prologue end (size=0) */
 137 0000 982F      		mov r25,r24
  58:twi.c         **** //    uint8 i;
  59:twi.c         ****     if (strTWI.STATUS==TW_BUSY)
 139               	.LM2:
 140 0002 8091 0000 		lds r24,strTWI
 141 0006 8823      		tst r24
 142 0008 19F4      		brne .L2
  60:twi.c         ****     {//TWI忙,不能進(jìn)行操作
  61:twi.c         ****         return OP_BUSY;
 144               	.LM3:
 145 000a 80E0      		ldi r24,lo8(0)
 146 000c 90E0      		ldi r25,hi8(0)
 147 000e 0895      		ret
 148               	.L2:
  62:twi.c         ****     }
  63:twi.c         ****     strTWI.STATUS=TW_BUSY;
 150               	.LM4:
 151 0010 1092 0000 		sts strTWI,__zero_reg__
  64:twi.c         ****  //   i=(addr>>8)<<1;
  65:twi.c         ****  //   i&=0x06;   strTWI.SLA=sla+i;									//考慮了24C04/08的EEPROM地址高位放在SLA里面
  66:twi.c         ****     strTWI.SLA=sla;
 153               	.LM5:
 154 0014 9093 0000 		sts strTWI+1,r25
  67:twi.c         ****     strTWI.ADDR=addr;
 156               	.LM6:
 157 0018 7093 0000 		sts (strTWI+2)+1,r23
 158 001c 6093 0000 		sts strTWI+2,r22
  68:twi.c         ****     strTWI.pBUF=ptr;
 160               	.LM7:
 161 0020 5093 0000 		sts (strTWI+4)+1,r21
 162 0024 4093 0000 		sts strTWI+4,r20
  69:twi.c         ****     strTWI.DATALEN=len;
 164               	.LM8:
 165 0028 3093 0000 		sts (strTWI+6)+1,r19
 166 002c 2093 0000 		sts strTWI+6,r18
  70:twi.c         ****     strTWI.STATE=ST_START;
 168               	.LM9:
 169 0030 81E0      		ldi r24,lo8(1)
 170 0032 8093 0000 		sts strTWI+8,r24
  71:twi.c         ****     strTWI.FAILCNT=0;
 172               	.LM10:
 173 0036 1092 0000 		sts strTWI+9,__zero_reg__
  72:twi.c         ****     TWCR=(1<<TWSTA)|TW_ACT;						//啟動start信號
 175               	.LM11:
 176 003a 85EA      		ldi r24,lo8(-91)
 177 003c 86BF      		out 86-0x20,r24
  73:twi.c         ****     return OP_RUN;
 179               	.LM12:
 180 003e 81E0      		ldi r24,lo8(1)
 181 0040 90E0      		ldi r25,hi8(1)
  74:twi.c         **** }
 183               	.LM13:
 184 0042 0895      		ret
 185               	/* epilogue: frame size=0 */
 186               	/* epilogue: noreturn */
 187               	/* epilogue end (size=0) */
 188               	/* function TWI_RW size 34 (34) */
 190               	.Lscope0:
 192               	.global	__vector_17
 194               	__vector_17:
  75:twi.c         **** 
  76:twi.c         **** /*
  77:twi.c         **** TWI中斷函數(shù) 
  78:twi.c         **** 	這個函數(shù)流程只是考慮了器件地址后有一個字節(jié)數(shù)據(jù)(命令)地址的IIC器件
  79:twi.c         **** 	(大部分IIC接口器件都是這種類型,常見的例如AT24C01/02/04/08/16,DS1307,DS1721等)
  80:twi.c         **** 	對于有兩個字節(jié)數(shù)據(jù)地址的IIC器件(例如AT24C32/64/128/256等大容量EEPROM),請稍作改動
  81:twi.c         ****  
  82:twi.c         **** //根據(jù)strTWI.SLA的最低位決定 
  83:twi.c         **** //bit0=1 TW_READ  讀
  84:twi.c         **** //bit0=0 TW_WRITE 寫
  85:twi.c         **** 
  86:twi.c         **** 	雖然中斷服務(wù)程序很長,但每次只執(zhí)行一個 case,所以耗時并不長。
  87:twi.c         **** */
  88:twi.c         **** SIGNAL(SIG_2WIRE_SERIAL)
  89:twi.c         **** {//IIC中斷
 196               	.LM14:
 197               	/* prologue: frame size=0 */
 198 0044 1F92      		push __zero_reg__
 199 0046 0F92      		push __tmp_reg__
 200 0048 0FB6      		in __tmp_reg__,__SREG__
 201 004a 0F92      		push __tmp_reg__
 202 004c 1124      		clr __zero_reg__
 203 004e 2F93      		push r18
 204 0050 3F93      		push r19
 205 0052 4F93      		push r20
 206 0054 5F93      		push r21
 207 0056 8F93      		push r24
 208 0058 9F93      		push r25
 209 005a EF93      		push r30
 210 005c FF93      		push r31
 211               	/* prologue end (size=13) */
  90:twi.c         ****     uint8 action,state,status;
  91:twi.c         ****     action=strTWI.SLA&TW_READ;					//取操作模式
 213               	.LM15:
 214 005e 3091 0000 		lds r19,strTWI+1
 215 0062 532F      		mov r21,r19
 216 0064 5170      		andi r21,lo8(1)
  92:twi.c         ****     state=strTWI.STATE;
 218               	.LM16:
 219 0066 4091 0000 		lds r20,strTWI+8
  93:twi.c         ****     status=TWSR&0xF8;							//屏蔽預(yù)分頻位
 221               	.LM17:
 222 006a 21B1      		in r18,33-0x20
 223 006c 287F      		andi r18,lo8(-8)
  94:twi.c         ****     if ((status>=0x60)||(status==0x00))
 225               	.LM18:
 226 006e 822F      		mov r24,r18
 227 0070 8150      		subi r24,lo8(-(-1))
 228 0072 8F35      		cpi r24,lo8(95)
 229 0074 08F0      		brlo .+2
 230 0076 BAC0      		rjmp .L3
  95:twi.c         ****     {//總線錯誤或從機模式引發(fā)的中斷,不予處理
  96:twi.c         ****         return;
  97:twi.c         ****     }
  98:twi.c         ****     switch(state)
 232               	.LM19:
 233 0078 842F      		mov r24,r20
 234 007a 9927      		clr r25
 235 007c 8430      		cpi r24,4
 236 007e 9105      		cpc r25,__zero_reg__
 237 0080 09F4      		brne .+2
 238 0082 4AC0      		rjmp .L17
 239 0084 8530      		cpi r24,5
 240 0086 9105      		cpc r25,__zero_reg__
 241 0088 4CF4      		brge .L38
 242 008a 8230      		cpi r24,2
 243 008c 9105      		cpc r25,__zero_reg__
 244 008e B1F0      		breq .L9
 245 0090 8330      		cpi r24,3
 246 0092 9105      		cpc r25,__zero_reg__
 247 0094 24F5      		brge .L12
 248 0096 0197      		sbiw r24,1
 249 0098 61F0      		breq .L6
 250 009a 92C0      		rjmp .L37
 251               	.L38:
 252 009c 8630      		cpi r24,6
 253 009e 9105      		cpc r25,__zero_reg__
 254 00a0 09F4      		brne .+2
 255 00a2 43C0      		rjmp .L25
 256 00a4 8630      		cpi r24,6
 257 00a6 9105      		cpc r25,__zero_reg__
 258 00a8 E4F1      		brlt .L20
 259 00aa 0797      		sbiw r24,7
 260 00ac 09F4      		brne .+2
 261 00ae 65C0      		rjmp .L32
 262 00b0 87C0      		rjmp .L37
 263               	.L6:
  99:twi.c         ****     {
 100:twi.c         ****     case ST_START:	//START狀態(tài)檢查
 101:twi.c         ****         if(status==TW_START)
 265               	.LM20:
 266 00b2 2830      		cpi r18,lo8(8)
 267 00b4 09F0      		breq .+2
 268 00b6 84C0      		rjmp .L37
 102:twi.c         ****         {//發(fā)送start信號成功
 103:twi.c         ****             TWDR=strTWI.SLA&0xFE;				//發(fā)送器件地址寫SLAW
 270               	.LM21:
 271 00b8 3E7F      		andi r19,lo8(-2)
 272 00ba 31C0      		rjmp .L48
 273               	.L9:
 104:twi.c         ****             TWCR=TW_ACT;         				//觸發(fā)下一步動作,同時清start發(fā)送標(biāo)志
 105:twi.c         ****         }
 106:twi.c         ****         else
 107:twi.c         ****         {//發(fā)送start信號出錯
 108:twi.c         ****             state=ST_FAIL;
 109:twi.c         ****         }
 110:twi.c         ****         break;
 111:twi.c         ****     case ST_SLAW:	//SLAW狀態(tài)檢查
 112:twi.c         ****         if(status==TW_MT_SLA_ACK)
 275               	.LM22:
 276 00bc 2831      		cpi r18,lo8(24)
 277 00be 09F0      		breq .+2
 278 00c0 7FC0      		rjmp .L37
 113:twi.c         ****         {//發(fā)送器件地址成功
 114:twi.c         ****             TWDR=(strTWI.ADDR>>8);					//發(fā)送eeprom地址高位
 280               	.LM23:
 281 00c2 2091 0000 		lds r18,strTWI+2
 282 00c6 3091 0000 		lds r19,(strTWI+2)+1
 283 00ca 832F      		mov r24,r19
 284 00cc 9927      		clr r25
 285 00ce 83B9      		out 35-0x20,r24
 115:twi.c         **** 			strTWI.ADDR  <<=8;
 287               	.LM24:
 288 00d0 922F      		mov r25,r18
 289 00d2 8827      		clr r24
 290 00d4 9093 0000 		sts (strTWI+2)+1,r25
 291 00d8 8093 0000 		sts strTWI+2,r24
 292 00dc 68C0      		rjmp .L43
 293               	.L12:
 116:twi.c         ****             TWCR=TW_ACT;         				//觸發(fā)下一步動作
 117:twi.c         ****         }
 118:twi.c         ****         else
 119:twi.c         ****         {//發(fā)送器件地址出錯
 120:twi.c         ****             state=ST_FAIL;
 121:twi.c         ****         }
 122:twi.c         ****         break;
 123:twi.c         ****     case ST_WADDR:	//ADDR狀態(tài)檢查
 124:twi.c         ****         if(status==TW_MT_DATA_ACK)
 295               	.LM25:
 296 00de 2832      		cpi r18,lo8(40)
 297 00e0 09F0      		breq .+2
 298 00e2 6EC0      		rjmp .L37
 125:twi.c         ****         {//發(fā)送eeprom地址成功
 126:twi.c         ****             if (action==TW_READ)
 300               	.LM26:
 301 00e4 5130      		cpi r21,lo8(1)
 302 00e6 11F4      		brne .L14
 127:twi.c         ****             {//讀操作模式
 128:twi.c         ****                 TWCR=(1<<TWSTA)|TW_ACT;			//發(fā)送restart信號,下一步將跳到RESTART分支
 304               	.LM27:
 305 00e8 85EA      		ldi r24,lo8(-91)
 306 00ea 62C0      		rjmp .L44
 307               	.L14:
 129:twi.c         ****             }
 130:twi.c         ****             else
 131:twi.c         ****             {//寫操作模式
 132:twi.c         ****                 TWDR=*strTWI.pBUF++;         	//寫第一個字節(jié)
 309               	.LM28:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲青青青在线视频| 欧美在线播放高清精品| 亚洲成av人片在线观看| 亚洲啪啪综合av一区二区三区| 一区二区三区在线视频免费| 国产一区三区三区| 日韩成人伦理电影在线观看| 免费观看在线色综合| 蜜桃av噜噜一区二区三区小说| 蜜桃av噜噜一区二区三区小说| av色综合久久天堂av综合| www.av精品| 精品国产91洋老外米糕| 亚洲国产精品国自产拍av| 国产精品国产三级国产普通话蜜臀| 中文字幕亚洲一区二区va在线| 亚洲女同ⅹxx女同tv| 国产在线精品一区在线观看麻豆| 成人久久久精品乱码一区二区三区| 91在线视频官网| 欧美日韩不卡一区| 欧美一区二区国产| 2020国产精品久久精品美国| 国产精品激情偷乱一区二区∴| 久久99久久久欧美国产| 久久福利视频一区二区| 欧美视频第二页| 精品va天堂亚洲国产| 欧美96一区二区免费视频| 欧美日韩国产另类一区| 亚洲另类春色国产| 美日韩黄色大片| 欧美日产国产精品| 亚洲成a人片在线不卡一二三区| 91小视频在线免费看| 欧美大片免费久久精品三p| 国产精品情趣视频| 粉嫩一区二区三区性色av| 欧美视频在线不卡| 亚洲一区二区三区视频在线播放 | 亚洲另类一区二区| eeuss鲁片一区二区三区在线观看| 国产偷国产偷精品高清尤物| 亚洲国产va精品久久久不卡综合| 国产麻豆视频精品| 久久久久久一二三区| 亚洲国产精品久久人人爱蜜臀| 欧美亚洲精品一区| 亚洲国产三级在线| 91麻豆精品国产91久久久久久久久| 国产精品美女久久久久久久| 99视频在线精品| 亚洲精品视频在线观看网站| 欧美亚洲日本一区| 日本aⅴ亚洲精品中文乱码| 日韩视频免费直播| 亚洲成a人在线观看| 51精品国自产在线| 久久精品国产色蜜蜜麻豆| 久久综合丝袜日本网| 成人免费电影视频| 亚洲最色的网站| 欧美挠脚心视频网站| 精品在线亚洲视频| |精品福利一区二区三区| 欧美三级中文字幕在线观看| 亚洲欧美日韩中文播放| 欧美日韩大陆一区二区| 精品一区二区av| 中文字幕欧美一| 4438x成人网最大色成网站| 国产一区二区三区高清播放| 亚洲欧美日韩国产成人精品影院 | 国内成+人亚洲+欧美+综合在线| 久久九九99视频| 在线视频欧美精品| 精品影视av免费| 亚洲你懂的在线视频| 欧美变态口味重另类| 日本视频在线一区| 国产精品色一区二区三区| 欧美日韩精品福利| 成人av免费在线观看| 久久香蕉国产线看观看99| 色悠久久久久综合欧美99| 亚洲激情五月婷婷| 日韩精品一区在线观看| 91豆麻精品91久久久久久| 午夜私人影院久久久久| 91精品婷婷国产综合久久性色| 成人黄色软件下载| 蜜桃传媒麻豆第一区在线观看| 亚洲日本在线a| 欧美日韩视频一区二区| 成人性色生活片| 久久国产生活片100| 午夜视频一区二区三区| 亚洲欧洲无码一区二区三区| 欧美精品一区二区在线观看| 欧美日韩综合色| www.欧美亚洲| 国产精品99久| 一区二区三区日韩在线观看| 国产亚洲欧美激情| 日韩视频在线观看一区二区| 欧美日韩国产大片| 色视频成人在线观看免| av中文字幕一区| 大白屁股一区二区视频| 国产激情91久久精品导航 | 欧美日韩成人高清| www.欧美亚洲| 高清成人免费视频| 国产成人综合在线| 国产精品资源网站| 精彩视频一区二区三区| 老司机一区二区| 裸体健美xxxx欧美裸体表演| 日本亚洲欧美天堂免费| 日韩一区精品字幕| 国产色一区二区| 国产欧美日韩三区| 欧美一区日本一区韩国一区| 在线播放中文字幕一区| www.欧美日韩| 一本色道久久综合亚洲精品按摩| 97精品超碰一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产欧美日韩精品在线| 亚洲国产精品99久久久久久久久 | 国产蜜臀97一区二区三区 | 成人精品gif动图一区| 国产suv精品一区二区三区| 国产成人精品1024| 不卡一区二区在线| 欧美亚洲免费在线一区| 777xxx欧美| 久久综合久久99| 亚洲图片你懂的| 五月婷婷欧美视频| 精品一区二区日韩| youjizz国产精品| 欧美亚洲一区二区在线| 欧美电视剧在线看免费| 国产精品久久久久久久裸模| 亚洲综合免费观看高清完整版在线 | 免费一级片91| 国产精品88av| 91成人在线精品| 日韩欧美一区二区不卡| 欧美国产精品专区| 亚洲一区二区在线播放相泽| 热久久国产精品| 国产99久久久精品| 欧美日韩午夜影院| 亚洲精品在线电影| 亚洲免费高清视频在线| 麻豆精品国产91久久久久久| 成人av一区二区三区| 欧美日韩免费高清一区色橹橹| 久久综合资源网| 亚洲午夜日本在线观看| 国产米奇在线777精品观看| 色欧美日韩亚洲| 国产亚洲欧美激情| 亚洲综合丝袜美腿| 国产在线观看免费一区| 色老综合老女人久久久| 久久久精品天堂| 丝袜美腿亚洲一区| 91亚洲国产成人精品一区二三| 欧美一区二区不卡视频| 亚洲精品伦理在线| 国产综合一区二区| 欧美三级三级三级| 国产精品福利影院| 经典三级一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 香蕉影视欧美成人| 99视频精品全部免费在线| 欧美一级精品在线| 亚洲线精品一区二区三区| 不卡的电视剧免费网站有什么| 日韩情涩欧美日韩视频| 亚洲电影一区二区三区| 99久久精品国产网站| 国产午夜精品久久久久久免费视| 免费在线看成人av| 欧美自拍偷拍一区| 亚洲另类在线一区| 99国产精品99久久久久久| 中文字幕国产一区| 国内精品伊人久久久久av一坑 | 五月婷婷激情综合| 欧美一a一片一级一片| 亚洲精品免费一二三区| 97se亚洲国产综合自在线观| 国产精品国产成人国产三级 | 天天做天天摸天天爽国产一区 | 一区二区三区不卡视频在线观看 |