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

📄 main.lss

📁 atmega32对ch375的读写程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     190:	90 e0       	ldi	r25, 0x00	; 0
     192:	84 e9       	ldi	r24, 0x94	; 148
     194:	86 bf       	out	0x36, r24	; 54
   goto   quit;   
} 
     196:	89 2f       	mov	r24, r25
     198:	99 27       	eor	r25, r25
     19a:	08 95       	ret

0000019c <twi_write_str>:


uchar twi_write_str(uchar sla,uchar address,uchar *p,uchar len) 
{ 
     19c:	78 2f       	mov	r23, r24
     19e:	fa 01       	movw	r30, r20
   uchar i,twst,n=0x0,rv=0xff; 
     1a0:	30 e0       	ldi	r19, 0x00	; 0
     1a2:	9f ef       	ldi	r25, 0xFF	; 255
   restart: 
      if(n++>=max) 
     1a4:	83 2f       	mov	r24, r19
     1a6:	3f 5f       	subi	r19, 0xFF	; 255
     1a8:	83 30       	cpi	r24, 0x03	; 3
     1aa:	08 f0       	brcs	.+2      	; 0x1ae <twi_write_str+0x12>
     1ac:	4f c0       	rjmp	.+158    	; 0x24c <twi_write_str+0xb0>
         goto error; 
   begin: 
      TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号 
     1ae:	84 ea       	ldi	r24, 0xA4	; 164
     1b0:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待发送完毕 
     1b2:	06 b6       	in	r0, 0x36	; 54
     1b4:	07 fe       	sbrs	r0, 7
     1b6:	fd cf       	rjmp	.-6      	; 0x1b2 <twi_write_str+0x16>
      switch(twst = (TWSR&0xf8)) 
     1b8:	81 b1       	in	r24, 0x01	; 1
     1ba:	88 7f       	andi	r24, 0xF8	; 248
     1bc:	48 2f       	mov	r20, r24
     1be:	55 27       	eor	r21, r21
     1c0:	40 31       	cpi	r20, 0x10	; 16
     1c2:	51 05       	cpc	r21, r1
     1c4:	31 f0       	breq	.+12     	; 0x1d2 <twi_write_str+0x36>
     1c6:	41 31       	cpi	r20, 0x11	; 17
     1c8:	51 05       	cpc	r21, r1
     1ca:	54 f5       	brge	.+84     	; 0x220 <twi_write_str+0x84>
     1cc:	48 30       	cpi	r20, 0x08	; 8
     1ce:	51 05       	cpc	r21, r1
     1d0:	e9 f5       	brne	.+122    	; 0x24c <twi_write_str+0xb0>
      { 
         case   0x10:		//TW_REP_START://有可能出现 
         case   0x08:		//TW_START: 
               break; 
         case   0x38:		//TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
      TWDR = sla | TW_WRITE;//发送SLA+W 
     1d2:	73 b9       	out	0x03, r23	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     1d4:	84 e8       	ldi	r24, 0x84	; 132
     1d6:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     1d8:	06 b6       	in	r0, 0x36	; 54
     1da:	07 fe       	sbrs	r0, 7
     1dc:	fd cf       	rjmp	.-6      	; 0x1d8 <twi_write_str+0x3c>
      switch(twst = (TWSR&0xf8)) 
     1de:	81 b1       	in	r24, 0x01	; 1
     1e0:	88 7f       	andi	r24, 0xF8	; 248
     1e2:	48 2f       	mov	r20, r24
     1e4:	55 27       	eor	r21, r21
     1e6:	40 32       	cpi	r20, 0x20	; 32
     1e8:	51 05       	cpc	r21, r1
     1ea:	e1 f2       	breq	.-72     	; 0x1a4 <twi_write_str+0x8>
     1ec:	41 32       	cpi	r20, 0x21	; 33
     1ee:	51 05       	cpc	r21, r1
     1f0:	bc f4       	brge	.+46     	; 0x220 <twi_write_str+0x84>
     1f2:	48 31       	cpi	r20, 0x18	; 24
     1f4:	51 05       	cpc	r21, r1
     1f6:	51 f5       	brne	.+84     	; 0x24c <twi_write_str+0xb0>
      { 
         case   0x18:		//TW_MT_SLA_ACK: 
               break; 
         case  0x20:		 //TW_MT_SLA_NACK://器件忙,有可能处于内部写周期 
               goto   restart; 
         case   0x38:		//TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
     /* TWDR = address>>8;//传输地址高8位 
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
      switch((twst = TW_STATUS)) 
      { 
         case   TW_MT_DATA_ACK: 
               break; 
         case   TW_MT_DATA_NACK: 
               goto   quit; 
         case   TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } */
      TWDR = address;//传输地址低8位 
     1f8:	63 b9       	out	0x03, r22	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     1fa:	84 e8       	ldi	r24, 0x84	; 132
     1fc:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     1fe:	06 b6       	in	r0, 0x36	; 54
     200:	07 fe       	sbrs	r0, 7
     202:	fd cf       	rjmp	.-6      	; 0x1fe <twi_write_str+0x62>
      switch(twst = (TWSR&0xf8)) 
     204:	81 b1       	in	r24, 0x01	; 1
     206:	88 7f       	andi	r24, 0xF8	; 248
     208:	48 2f       	mov	r20, r24
     20a:	55 27       	eor	r21, r21
     20c:	40 33       	cpi	r20, 0x30	; 48
     20e:	51 05       	cpc	r21, r1
     210:	f1 f0       	breq	.+60     	; 0x24e <twi_write_str+0xb2>
     212:	41 33       	cpi	r20, 0x31	; 49
     214:	51 05       	cpc	r21, r1
     216:	24 f4       	brge	.+8      	; 0x220 <twi_write_str+0x84>
     218:	48 32       	cpi	r20, 0x28	; 40
     21a:	51 05       	cpc	r21, r1
     21c:	29 f0       	breq	.+10     	; 0x228 <twi_write_str+0x8c>
     21e:	16 c0       	rjmp	.+44     	; 0x24c <twi_write_str+0xb0>
     220:	48 33       	cpi	r20, 0x38	; 56
     222:	51 05       	cpc	r21, r1
     224:	21 f2       	breq	.-120    	; 0x1ae <twi_write_str+0x12>
     226:	12 c0       	rjmp	.+36     	; 0x24c <twi_write_str+0xb0>
      { 
         case   0x28:		//TW_MT_DATA_ACK: 
               break; 
         case   0x30:		//TW_MT_DATA_NACK: 
               goto   quit; 
         case   0x38:		//TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
	  for(i=0;i<len;i++)
     228:	30 e0       	ldi	r19, 0x00	; 0
     22a:	32 17       	cp	r19, r18
     22c:	80 f4       	brcc	.+32     	; 0x24e <twi_write_str+0xb2>
     22e:	44 e8       	ldi	r20, 0x84	; 132
	  {
		  TWDR = *p; 
     230:	81 91       	ld	r24, Z+
     232:	83 b9       	out	0x03, r24	; 3
		  p++;
		  TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     234:	46 bf       	out	0x36, r20	; 54
		  while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     236:	06 b6       	in	r0, 0x36	; 54
     238:	07 fe       	sbrs	r0, 7
     23a:	fd cf       	rjmp	.-6      	; 0x236 <twi_write_str+0x9a>
		  switch(twst =(TWSR&0xf8)) 
     23c:	81 b1       	in	r24, 0x01	; 1
     23e:	88 7f       	andi	r24, 0xF8	; 248
     240:	88 32       	cpi	r24, 0x28	; 40
     242:	21 f4       	brne	.+8      	; 0x24c <twi_write_str+0xb0>
     244:	3f 5f       	subi	r19, 0xFF	; 255
     246:	32 17       	cp	r19, r18
     248:	98 f3       	brcs	.-26     	; 0x230 <twi_write_str+0x94>
     24a:	01 c0       	rjmp	.+2      	; 0x24e <twi_write_str+0xb2>
		  { 
			 case   0x28://TW_MT_DATA_ACK: 
				   break; 
			 default: 
				   goto   error; 
		  } 
	  }
   quit: 
      TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号 
      return   rv; 
   error: 
      rv=0x00; 
     24c:	90 e0       	ldi	r25, 0x00	; 0
     24e:	84 e9       	ldi	r24, 0x94	; 148
     250:	86 bf       	out	0x36, r24	; 54
   goto   quit;   
} 
     252:	89 2f       	mov	r24, r25
     254:	99 27       	eor	r25, r25
     256:	08 95       	ret

00000258 <twi_read_byte>:


uchar twi_read_byte( uchar sla,uchar address) //读字节,地址,寄存器地址。
{ 
     258:	58 2f       	mov	r21, r24
   uchar twst,n=0x0,rv=0xff; 
     25a:	40 e0       	ldi	r20, 0x00	; 0
     25c:	9f ef       	ldi	r25, 0xFF	; 255
   restart: 
      if(n++>=max) 
     25e:	84 2f       	mov	r24, r20
     260:	4f 5f       	subi	r20, 0xFF	; 255
     262:	83 30       	cpi	r24, 0x03	; 3
     264:	08 f0       	brcs	.+2      	; 0x268 <twi_read_byte+0x10>
     266:	75 c0       	rjmp	.+234    	; 0x352 <twi_read_byte+0xfa>
         goto error; 
   begin: 
      TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号 
     268:	84 ea       	ldi	r24, 0xA4	; 164
     26a:	86 bf       	out	0x36, r24	; 54

      while((TWCR & _BV(TWINT))==0x0);//等待发送完毕 
     26c:	06 b6       	in	r0, 0x36	; 54
     26e:	07 fe       	sbrs	r0, 7
     270:	fd cf       	rjmp	.-6      	; 0x26c <twi_read_byte+0x14>
      switch(twst = (TWSR&0xf8)) 
     272:	81 b1       	in	r24, 0x01	; 1
     274:	88 7f       	andi	r24, 0xF8	; 248
     276:	28 2f       	mov	r18, r24
     278:	33 27       	eor	r19, r19
     27a:	20 31       	cpi	r18, 0x10	; 16
     27c:	31 05       	cpc	r19, r1
     27e:	41 f0       	breq	.+16     	; 0x290 <twi_read_byte+0x38>
     280:	21 31       	cpi	r18, 0x11	; 17
     282:	31 05       	cpc	r19, r1
     284:	0c f0       	brlt	.+2      	; 0x288 <twi_read_byte+0x30>
     286:	4a c0       	rjmp	.+148    	; 0x31c <twi_read_byte+0xc4>
     288:	28 30       	cpi	r18, 0x08	; 8
     28a:	31 05       	cpc	r19, r1
     28c:	09 f0       	breq	.+2      	; 0x290 <twi_read_byte+0x38>
     28e:	61 c0       	rjmp	.+194    	; 0x352 <twi_read_byte+0xfa>
      { 
         case   0x10://TW_REP_START://有可能出现 
         case   0x08://TW_START: 
               break; 
         case   0x38://TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
      TWDR = sla | TW_WRITE;//发送SLA+W 
     290:	53 b9       	out	0x03, r21	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     292:	84 e8       	ldi	r24, 0x84	; 132
     294:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     296:	06 b6       	in	r0, 0x36	; 54
     298:	07 fe       	sbrs	r0, 7
     29a:	fd cf       	rjmp	.-6      	; 0x296 <twi_read_byte+0x3e>
      switch(twst = (TWSR&0xf8)) 
     29c:	81 b1       	in	r24, 0x01	; 1
     29e:	88 7f       	andi	r24, 0xF8	; 248
     2a0:	28 2f       	mov	r18, r24
     2a2:	33 27       	eor	r19, r19
     2a4:	20 32       	cpi	r18, 0x20	; 32
     2a6:	31 05       	cpc	r19, r1
     2a8:	d1 f2       	breq	.-76     	; 0x25e <twi_read_byte+0x6>
     2aa:	21 32       	cpi	r18, 0x21	; 33
     2ac:	31 05       	cpc	r19, r1
     2ae:	b4 f5       	brge	.+108    	; 0x31c <twi_read_byte+0xc4>
     2b0:	28 31       	cpi	r18, 0x18	; 24
     2b2:	31 05       	cpc	r19, r1
     2b4:	09 f0       	breq	.+2      	; 0x2b8 <twi_read_byte+0x60>
     2b6:	4d c0       	rjmp	.+154    	; 0x352 <twi_read_byte+0xfa>
      { 
         case   0x18://TW_MT_SLA_ACK: 
               break; 
         case   0x20://TW_MT_SLA_NACK://器件忙,有可能处于内部写周期 
               goto   restart; 
         case   0x38://TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
     /* TWDR = address>>8;//传输地址高8位 
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
      switch((twst = TW_STATUS)) 
      { 
         case   TW_MT_DATA_ACK: 
               break; 
         case   TW_MT_DATA_NACK: 
               goto   quit; 
         case   TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      }*/ 
      TWDR = address;//传输地址低8位 
     2b8:	63 b9       	out	0x03, r22	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     2ba:	84 e8       	ldi	r24, 0x84	; 132
     2bc:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     2be:	06 b6       	in	r0, 0x36	; 54
     2c0:	07 fe       	sbrs	r0, 7
     2c2:	fd cf       	rjmp	.-6      	; 0x2be <twi_read_byte+0x66>
      switch(twst = (TWSR&0xf8)) 
     2c4:	81 b1       	in	r24, 0x01	; 1
     2c6:	88 7f       	andi	r24, 0xF8	; 248
     2c8:	28 2f       	mov	r18, r24
     2ca:	33 27       	eor	r19, r19
     2cc:	20 33       	cpi	r18, 0x30	; 48
     2ce:	31 05       	cpc	r19, r1
     2d0:	09 f4       	brne	.+2      	; 0x2d4 <twi_read_byte+0x7c>
     2d2:	40 c0       	rjmp	.+128    	; 0x354 <twi_read_byte+0xfc>
     2d4:	21 33       	cpi	r18, 0x31	; 49
     2d6:	31 05       	cpc	r19, r1
     2d8:	0c f5       	brge	.+66     	; 0x31c <twi_read_byte+0xc4>
     2da:	28 32       	cpi	r18, 0x28	; 40
     2dc:	31 05       	cpc	r19, r1
     2de:	c9 f5       	brne	.+114    	; 0x352 <twi_read_byte+0xfa>
      { 
         case   0x28://TW_MT_DATA_ACK: 
               break; 
         case   0x30://TW_MT_DATA_NACK: 
               goto   quit; 
         case   0x38://TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
      TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送(重新)开始信号 
     2e0:	84 ea       	ldi	r24, 0xA4	; 164
     2e2:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待发送完毕 
     2e4:	06 b6       	in	r0, 0x36	; 54
     2e6:	07 fe       	sbrs	r0, 7
     2e8:	fd cf       	rjmp	.-6      	; 0x2e4 <twi_read_byte+0x8c>
      switch(twst = (TWSR&0xf8)) 
     2ea:	81 b1       	in	r24, 0x01	; 1
     2ec:	88 7f       	andi	r24, 0xF8	; 248
     2ee:	28 2f       	mov	r18, r24
     2f0:	33 27       	eor	r19, r19
     2f2:	20 31       	cpi	r18, 0x10	; 16
     2f4:	31 05       	cpc	r19, r1
     2f6:	91 f4       	brne	.+36     	; 0x31c <twi_read_byte+0xc4>
      { 
         case   0x10://TW_REP_START://正确的状态 
               break; 
         case   0x38://TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
      TWDR = sla | TW_READ;//发送SLA+R 
     2f8:	85 2f       	mov	r24, r21
     2fa:	81 60       	ori	r24, 0x01	; 1

⌨️ 快捷键说明

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