⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c-master.lst

📁 at90can128底层驱动 有SPI,TWI,总线,CAN接口等
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0263 6081      ORI	R24,1
    0264 938000BC  STS	0xBC,R24
(0270)     Twi_set_start();
    0266 918000BC  LDS	R24,0xBC
    0268 6280      ORI	R24,0x20
    0269 938000BC  STS	0xBC,R24
(0271)     return twi_err;
    026B 91000101  LDS	R16,twi_err
    026D C006      RJMP	0x0274
(0272)   }
(0273)   Twi_set_stop();
    026E 918000BC  LDS	R24,0xBC
    0270 6180      ORI	R24,0x10
    0271 938000BC  STS	0xBC,R24
(0274)   return TWI_NOT_FREE;
    0273 E007      LDI	R16,7
    0274 9508      RET
_twi_interrupt:
    0275 940E030C  CALL	push_lset
(0275) }
(0276) 
(0277) /*****************************************************************************
(0278) 函数介绍:TWI中断例程
(0279) 输入参数:
(0280) 输出参数:
(0281) 返回值:无
(0282) *****************************************************************************/
(0283) //#pragma vector = TWI_vect
(0284) //__interrupt void twi_interrupt()
(0285) #pragma interrupt_handler twi_interrupt:36
(0286) void twi_interrupt()
(0287) {
(0288)   twi_decode_status();
    0277 DDFF      RCALL	_twi_decode_status
    0278 940E0323  CALL	pop_lset
    027A 9518      RETI
_TWI_MW:
  info                 --> Y,+8
  nbbytes              --> R22
  slave_addr           --> R20
    027B 940E02F3  CALL	push_gset2
    027D 2F62      MOV	R22,R18
    027E 2F40      MOV	R20,R16
    027F 9724      SBIW	R28,4
(0289) //  Twi_clear_si(); //REMOVE FROM MAIN LOOP, ADDED IN ALL NECESARY CASE (See JSB /RLE)
(0290) }
(0291) 
(0292) /*****************************************************************************
(0293) 函数介绍:主机发送模式
(0294) 输入参数:	slave_addr:从机地址
(0295) 			nbbytes:最大字节数
(0296) 			*info:数据缓存地址
(0297) 输出参数:
(0298) 返回值:无
(0299) *****************************************************************************/
(0300) void TWI_MW(uchar slave_addr,uchar nbbytes,uchar *info)    //用户程序
(0301) {
(0302) 	//twi_send_message_polling(slave_addr, TWI_WRITE, nbbytes, info);	//查询方式
(0303) 	twi_send_message_interrupt(slave_addr, TWI_WRITE, nbbytes, info);	//中断方式
    0280 8408      LDD	R0,Y+8
    0281 8419      LDD	R1,Y+9
    0282 821B      STD	Y+3,R1
    0283 820A      STD	Y+2,R0
    0284 8368      STD	Y+0,R22
    0285 2722      CLR	R18
    0286 2F04      MOV	R16,R20
    0287 DFBA      RCALL	_twi_send_message_interrupt
    0288 9624      ADIW	R28,4
    0289 940E02EA  CALL	pop_gset2
    028B 9508      RET
_TWI_MR:
  info                 --> Y,+8
  nbbytes              --> R22
  slave_addr           --> R20
    028C 940E02F3  CALL	push_gset2
    028E 2F62      MOV	R22,R18
    028F 2F40      MOV	R20,R16
    0290 9724      SBIW	R28,4
(0304) }
(0305) 
(0306) /*****************************************************************************
(0307) 函数介绍:主机接收模式
(0308) 输入参数:	slave_addr:从机地址
(0309) 			nbbytes:最大字节数
(0310) 			*info:数据缓存地址
(0311) 输出参数:
(0312) 返回值:无
(0313) *****************************************************************************/
(0314) void TWI_MR(uchar slave_addr,uchar nbbytes,uchar *info)
(0315) {
(0316) 	//twi_send_message_polling(slave_addr, TWI_READ, nbbytes, info);	//查询方式
(0317) 	twi_send_message_interrupt(slave_addr, TWI_READ, nbbytes, info);	//中断方式
    0291 8408      LDD	R0,Y+8
    0292 8419      LDD	R1,Y+9
    0293 821B      STD	Y+3,R1
    0294 820A      STD	Y+2,R0
    0295 8368      STD	Y+0,R22
    0296 E021      LDI	R18,1
    0297 2F04      MOV	R16,R20
    0298 DFA9      RCALL	_twi_send_message_interrupt
    0299 9624      ADIW	R28,4
    029A 940E02EA  CALL	pop_gset2
    029C 9508      RET
_main:
  Mkeybuf              --> Y,+5
  Mdisbuf              --> Y,+2
  i                    --> R20
    029D 9729      SBIW	R28,0x9
(0318) }
(0319) 
(0320) 
(0321) 
(0322) void main(void)
(0323) {
(0324) int i;
(0325) 	
(0326) 	uchar Mdisbuf[3]={0x90,0x55,0x55};
    029E E984      LDI	R24,0x94
    029F E090      LDI	R25,0
    02A0 01FE      MOVW	R30,R28
    02A1 9632      ADIW	R30,2
    02A2 E003      LDI	R16,3
    02A3 E010      LDI	R17,0
    02A4 93FA      ST	R31,-Y
    02A5 93EA      ST	R30,-Y
    02A6 939A      ST	R25,-Y
    02A7 938A      ST	R24,-Y
    02A8 940E033A  CALL	asgncblk
(0327) 	uchar Mkeybuf[4];
(0328) 	
(0329) 	twi_busy = 0;
    02AA 2422      CLR	R2
    02AB 92200102  STS	twi_busy,R2
(0330) 	
(0331) 	CLI();
    02AD 94F8      BCLR	7
(0332) 	twi_lib_init();
    02AE DDBE      RCALL	_twi_lib_init
(0333) 	SEI();
    02AF 9478      BSET	7
    02B0 C035      RJMP	0x02E6
(0334) 	
(0335) 
(0336) /*while(1)	
(0337) 	if(!twi_busy)
(0338) 		TWI_MR(0x4F, 2, Mkeybuf);  //向从机温度传感器0x4F读取2个数据	
(0339) */
(0340) while(1)
(0341) {	
(0342) 	if(!twi_busy)	
    02B1 90200102  LDS	R2,twi_busy
    02B3 2022      TST	R2
    02B4 F439      BNE	0x02BC
(0343) 		TWI_MR(0x21, 4, Mkeybuf);
    02B5 01CE      MOVW	R24,R28
    02B6 9605      ADIW	R24,5
    02B7 8399      STD	Y+1,R25
    02B8 8388      STD	Y+0,R24
    02B9 E024      LDI	R18,4
    02BA E201      LDI	R16,0x21
    02BB DFD0      RCALL	_TWI_MR
(0344) 	
(0345) 	if(!twi_busy){
    02BC 90200102  LDS	R2,twi_busy
    02BE 2022      TST	R2
    02BF F449      BNE	0x02C9
(0346) 		Mdisbuf[2]=0x09;//点亮			
    02C0 E089      LDI	R24,0x9
    02C1 838C      STD	Y+4,R24
(0347) 		TWI_MW(0x21, 3, Mdisbuf); //向从机0x21写入3个数据
    02C2 01CE      MOVW	R24,R28
    02C3 9602      ADIW	R24,2
    02C4 8399      STD	Y+1,R25
    02C5 8388      STD	Y+0,R24
    02C6 E023      LDI	R18,3
    02C7 E201      LDI	R16,0x21
    02C8 DFB2      RCALL	_TWI_MW
(0348) 	}
(0349) 	for(i=0;i<2000;i++);
    02C9 2744      CLR	R20
    02CA 2755      CLR	R21
    02CB 5F4F      SUBI	R20,0xFF
    02CC 4F5F      SBCI	R21,0xFF
    02CD 3D40      CPI	R20,0xD0
    02CE E0E7      LDI	R30,7
    02CF 075E      CPC	R21,R30
    02D0 F3D4      BLT	0x02CB
(0350) 	if(!twi_busy){
    02D1 90200102  LDS	R2,twi_busy
    02D3 2022      TST	R2
    02D4 F449      BNE	0x02DE
(0351) 		Mdisbuf[2]=0x89;//灭			
    02D5 E889      LDI	R24,0x89
    02D6 838C      STD	Y+4,R24
(0352) 		TWI_MW(0x21, 3, Mdisbuf); //向从机0x21写入3个数据
    02D7 01CE      MOVW	R24,R28
    02D8 9602      ADIW	R24,2
    02D9 8399      STD	Y+1,R25
    02DA 8388      STD	Y+0,R24
    02DB E023      LDI	R18,3
    02DC E201      LDI	R16,0x21
    02DD DF9D      RCALL	_TWI_MW
(0353) 	}
(0354) 	for(i=0;i<2000;i++);
    02DE 2744      CLR	R20
    02DF 2755      CLR	R21
    02E0 5F4F      SUBI	R20,0xFF
    02E1 4F5F      SBCI	R21,0xFF
    02E2 3D40      CPI	R20,0xD0
    02E3 E0E7      LDI	R30,7
    02E4 075E      CPC	R21,R30
    02E5 F3D4      BLT	0x02E0
    02E6 CFCA      RJMP	0x02B1
(0355) }
(0356) /*
(0357) while(1)	
(0358) 	if(!twi_busy)
(0359) 		TWI_MR(0x21, 4, Mkeybuf); 	//向从机0x21读取4个数据,中断方式
(0360) */
(0361) 	while(1);	
FILE: <library>
    02E7 CFFF      RJMP	0x02E7
    02E8 9629      ADIW	R28,0x9
    02E9 9508      RET
pop_gset2:
    02EA E0E2      LDI	R30,2
    02EB 940C02F9  JMP	pop
push_gset5:
    02ED 92FA      ST	R15,-Y
    02EE 92EA      ST	R14,-Y
push_gset4:
    02EF 92DA      ST	R13,-Y
    02F0 92CA      ST	R12,-Y
push_gset3:
    02F1 92BA      ST	R11,-Y
    02F2 92AA      ST	R10,-Y
push_gset2:
    02F3 937A      ST	R23,-Y
    02F4 936A      ST	R22,-Y
push_gset1:
    02F5 935A      ST	R21,-Y
    02F6 934A      ST	R20,-Y
    02F7 9508      RET
pop_gset1:
    02F8 E0E1      LDI	R30,1
pop:
    02F9 9149      LD	R20,Y+
    02FA 9159      LD	R21,Y+
    02FB FDE0      SBRC	R30,0
    02FC 9508      RET
    02FD 9169      LD	R22,Y+
    02FE 9179      LD	R23,Y+
    02FF FDE1      SBRC	R30,1
    0300 9508      RET
    0301 90A9      LD	R10,Y+
    0302 90B9      LD	R11,Y+
    0303 FDE2      SBRC	R30,2
    0304 9508      RET
    0305 90C9      LD	R12,Y+
    0306 90D9      LD	R13,Y+
    0307 FDE3      SBRC	R30,3
    0308 9508      RET
    0309 90E9      LD	R14,Y+
    030A 90F9      LD	R15,Y+
    030B 9508      RET
push_lset:
    030C 93FA      ST	R31,-Y
    030D 93EA      ST	R30,-Y
    030E 93BA      ST	R27,-Y
    030F 93AA      ST	R26,-Y
    0310 939A      ST	R25,-Y
    0311 938A      ST	R24,-Y
    0312 933A      ST	R19,-Y
    0313 932A      ST	R18,-Y
    0314 931A      ST	R17,-Y
    0315 930A      ST	R16,-Y
    0316 929A      ST	R9,-Y
    0317 928A      ST	R8,-Y
    0318 927A      ST	R7,-Y
    0319 926A      ST	R6,-Y
    031A 925A      ST	R5,-Y
    031B 924A      ST	R4,-Y
    031C 923A      ST	R3,-Y
    031D 922A      ST	R2,-Y
    031E 921A      ST	R1,-Y
    031F 920A      ST	R0,-Y
    0320 B60F      IN	R0,0x3F
    0321 920A      ST	R0,-Y
    0322 9508      RET
pop_lset:
    0323 9009      LD	R0,Y+
    0324 BE0F      OUT	0x3F,R0
    0325 9009      LD	R0,Y+
    0326 9019      LD	R1,Y+
    0327 9029      LD	R2,Y+
    0328 9039      LD	R3,Y+
    0329 9049      LD	R4,Y+
    032A 9059      LD	R5,Y+
    032B 9069      LD	R6,Y+
    032C 9079      LD	R7,Y+
    032D 9089      LD	R8,Y+
    032E 9099      LD	R9,Y+
    032F 9109      LD	R16,Y+
    0330 9119      LD	R17,Y+
    0331 9129      LD	R18,Y+
    0332 9139      LD	R19,Y+
    0333 9189      LD	R24,Y+
    0334 9199      LD	R25,Y+
    0335 91A9      LD	R26,Y+
    0336 91B9      LD	R27,Y+
    0337 91E9      LD	R30,Y+
    0338 91F9      LD	R31,Y+
    0339 9508      RET
asgncblk:
    033A 93AA      ST	R26,-Y
    033B 93BA      ST	R27,-Y
    033C 93EA      ST	R30,-Y
    033D 93FA      ST	R31,-Y
    033E 920A      ST	R0,-Y
    033F 81AF      LDD	R26,Y+7
    0340 85B8      LDD	R27,Y+8
    0341 81ED      LDD	R30,Y+5
    0342 81FE      LDD	R31,Y+6
    0343 3000      CPI	R16,0
    0344 0701      CPC	R16,R17
    0345 F031      BEQ	0x034C
    0346 95C8      LPM
    0347 920D      ST	R0,X+
    0348 9631      ADIW	R30,1
    0349 5001      SUBI	R16,1
    034A 4010      SBCI	R17,0
    034B CFF7      RJMP	0x0343
    034C 9009      LD	R0,Y+
    034D 91F9      LD	R31,Y+
    034E 91E9      LD	R30,Y+
    034F 91B9      LD	R27,Y+
    0350 91A9      LD	R26,Y+
    0351 9624      ADIW	R28,4
    0352 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -