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

📄 main.lss

📁 atmega32对ch375的读写程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     2fc:	83 b9       	out	0x03, r24	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     2fe:	84 e8       	ldi	r24, 0x84	; 132
     300:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     302:	06 b6       	in	r0, 0x36	; 54
     304:	07 fe       	sbrs	r0, 7
     306:	fd cf       	rjmp	.-6      	; 0x302 <twi_read_byte+0xaa>
      switch(twst = (TWSR&0xf8)) //twst=16
     308:	81 b1       	in	r24, 0x01	; 1
     30a:	88 7f       	andi	r24, 0xF8	; 248
     30c:	28 2f       	mov	r18, r24
     30e:	33 27       	eor	r19, r19
     310:	20 34       	cpi	r18, 0x40	; 64
     312:	31 05       	cpc	r19, r1
     314:	69 f0       	breq	.+26     	; 0x330 <twi_read_byte+0xd8>
     316:	21 34       	cpi	r18, 0x41	; 65
     318:	31 05       	cpc	r19, r1
     31a:	2c f4       	brge	.+10     	; 0x326 <twi_read_byte+0xce>
     31c:	28 33       	cpi	r18, 0x38	; 56
     31e:	31 05       	cpc	r19, r1
     320:	09 f4       	brne	.+2      	; 0x324 <twi_read_byte+0xcc>
     322:	a2 cf       	rjmp	.-188    	; 0x268 <twi_read_byte+0x10>
     324:	16 c0       	rjmp	.+44     	; 0x352 <twi_read_byte+0xfa>
     326:	28 34       	cpi	r18, 0x48	; 72
     328:	31 05       	cpc	r19, r1
     32a:	09 f4       	brne	.+2      	; 0x32e <twi_read_byte+0xd6>
     32c:	98 cf       	rjmp	.-208    	; 0x25e <twi_read_byte+0x6>
     32e:	11 c0       	rjmp	.+34     	; 0x352 <twi_read_byte+0xfa>
      { 
         case   0x40://TW_MR_SLA_ACK: 
               break; 
         case   0x48://TW_MR_SLA_NACK://器件忙,有可能处于内部写周期 
               goto   restart; 
         case   0x38://TW_MR_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 

      TWCR = _BV(TWINT) | _BV(TWEN) ;//清TWINT,开始传输 
     330:	84 e8       	ldi	r24, 0x84	; 132
     332:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     334:	06 b6       	in	r0, 0x36	; 54
     336:	07 fe       	sbrs	r0, 7
     338:	fd cf       	rjmp	.-6      	; 0x334 <twi_read_byte+0xdc>
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     33a:	06 b6       	in	r0, 0x36	; 54
     33c:	07 fe       	sbrs	r0, 7
     33e:	fd cf       	rjmp	.-6      	; 0x33a <twi_read_byte+0xe2>
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     340:	06 b6       	in	r0, 0x36	; 54
     342:	07 fe       	sbrs	r0, 7
     344:	fd cf       	rjmp	.-6      	; 0x340 <twi_read_byte+0xe8>
      switch(twst = (TWSR&0xf8)) 
     346:	81 b1       	in	r24, 0x01	; 1
     348:	88 7f       	andi	r24, 0xF8	; 248
     34a:	88 35       	cpi	r24, 0x58	; 88
     34c:	11 f4       	brne	.+4      	; 0x352 <twi_read_byte+0xfa>
      { 
         case   0x58://TW_MR_DATA_NACK: 
               rv = TWDR; 
     34e:	93 b1       	in	r25, 0x03	; 3
     350:	01 c0       	rjmp	.+2      	; 0x354 <twi_read_byte+0xfc>
               break; 
         default: 
               goto   error; 
      } 
   quit: 
      TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号 
      return   rv; 
   error: 
      rv=0x00; 
     352:	90 e0       	ldi	r25, 0x00	; 0
     354:	84 e9       	ldi	r24, 0x94	; 148
     356:	86 bf       	out	0x36, r24	; 54
   goto   quit; 
} 
     358:	89 2f       	mov	r24, r25
     35a:	99 27       	eor	r25, r25
     35c:	08 95       	ret

0000035e <twi_read_str>:


uchar twi_read_str( uchar sla,uchar address,uchar *p,uchar len) //读字符串,
{ 
     35e:	78 2f       	mov	r23, r24
     360:	fa 01       	movw	r30, r20
   uchar i,twst,n=0x0,rv=0xff; 
     362:	30 e0       	ldi	r19, 0x00	; 0
     364:	af ef       	ldi	r26, 0xFF	; 255
   restart: 
      if(n++>=max) 
     366:	83 2f       	mov	r24, r19
     368:	3f 5f       	subi	r19, 0xFF	; 255
     36a:	83 30       	cpi	r24, 0x03	; 3
     36c:	08 f0       	brcs	.+2      	; 0x370 <twi_read_str+0x12>
     36e:	7f c0       	rjmp	.+254    	; 0x46e <twi_read_str+0x110>
         goto error; 
   begin: 
      TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号 
     370:	84 ea       	ldi	r24, 0xA4	; 164
     372:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待发送完毕 
     374:	06 b6       	in	r0, 0x36	; 54
     376:	07 fe       	sbrs	r0, 7
     378:	fd cf       	rjmp	.-6      	; 0x374 <twi_read_str+0x16>
      switch(twst = (TWSR&0xf8)) 
     37a:	81 b1       	in	r24, 0x01	; 1
     37c:	88 7f       	andi	r24, 0xF8	; 248
     37e:	99 27       	eor	r25, r25
     380:	80 31       	cpi	r24, 0x10	; 16
     382:	91 05       	cpc	r25, r1
     384:	39 f0       	breq	.+14     	; 0x394 <twi_read_str+0x36>
     386:	81 31       	cpi	r24, 0x11	; 17
     388:	91 05       	cpc	r25, r1
     38a:	0c f0       	brlt	.+2      	; 0x38e <twi_read_str+0x30>
     38c:	44 c0       	rjmp	.+136    	; 0x416 <twi_read_str+0xb8>
     38e:	08 97       	sbiw	r24, 0x08	; 8
     390:	09 f0       	breq	.+2      	; 0x394 <twi_read_str+0x36>
     392:	6d c0       	rjmp	.+218    	; 0x46e <twi_read_str+0x110>
      { 
         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 
     394:	73 b9       	out	0x03, r23	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     396:	84 e8       	ldi	r24, 0x84	; 132
     398:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     39a:	06 b6       	in	r0, 0x36	; 54
     39c:	07 fe       	sbrs	r0, 7
     39e:	fd cf       	rjmp	.-6      	; 0x39a <twi_read_str+0x3c>
      switch(twst = (TWSR&0xf8)) 
     3a0:	81 b1       	in	r24, 0x01	; 1
     3a2:	88 7f       	andi	r24, 0xF8	; 248
     3a4:	99 27       	eor	r25, r25
     3a6:	80 32       	cpi	r24, 0x20	; 32
     3a8:	91 05       	cpc	r25, r1
     3aa:	e9 f2       	breq	.-70     	; 0x366 <twi_read_str+0x8>
     3ac:	81 32       	cpi	r24, 0x21	; 33
     3ae:	91 05       	cpc	r25, r1
     3b0:	94 f5       	brge	.+100    	; 0x416 <twi_read_str+0xb8>
     3b2:	48 97       	sbiw	r24, 0x18	; 24
     3b4:	09 f0       	breq	.+2      	; 0x3b8 <twi_read_str+0x5a>
     3b6:	5b c0       	rjmp	.+182    	; 0x46e <twi_read_str+0x110>
      { 
         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位 
     3b8:	63 b9       	out	0x03, r22	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     3ba:	84 e8       	ldi	r24, 0x84	; 132
     3bc:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     3be:	06 b6       	in	r0, 0x36	; 54
     3c0:	07 fe       	sbrs	r0, 7
     3c2:	fd cf       	rjmp	.-6      	; 0x3be <twi_read_str+0x60>
      switch(twst = (TWSR&0xf8)) 
     3c4:	81 b1       	in	r24, 0x01	; 1
     3c6:	88 7f       	andi	r24, 0xF8	; 248
     3c8:	99 27       	eor	r25, r25
     3ca:	80 33       	cpi	r24, 0x30	; 48
     3cc:	91 05       	cpc	r25, r1
     3ce:	09 f4       	brne	.+2      	; 0x3d2 <twi_read_str+0x74>
     3d0:	4f c0       	rjmp	.+158    	; 0x470 <twi_read_str+0x112>
     3d2:	81 33       	cpi	r24, 0x31	; 49
     3d4:	91 05       	cpc	r25, r1
     3d6:	fc f4       	brge	.+62     	; 0x416 <twi_read_str+0xb8>
     3d8:	88 97       	sbiw	r24, 0x28	; 40
     3da:	09 f0       	breq	.+2      	; 0x3de <twi_read_str+0x80>
     3dc:	48 c0       	rjmp	.+144    	; 0x46e <twi_read_str+0x110>
      { 
         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);//发送(重新)开始信号 
     3de:	84 ea       	ldi	r24, 0xA4	; 164
     3e0:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待发送完毕 
     3e2:	06 b6       	in	r0, 0x36	; 54
     3e4:	07 fe       	sbrs	r0, 7
     3e6:	fd cf       	rjmp	.-6      	; 0x3e2 <twi_read_str+0x84>
      switch(twst =(TWSR&0xf8)) 
     3e8:	81 b1       	in	r24, 0x01	; 1
     3ea:	88 7f       	andi	r24, 0xF8	; 248
     3ec:	99 27       	eor	r25, r25
     3ee:	80 31       	cpi	r24, 0x10	; 16
     3f0:	91 05       	cpc	r25, r1
     3f2:	89 f4       	brne	.+34     	; 0x416 <twi_read_str+0xb8>
      { 
         case   0x10://TW_REP_START://正确的状态 
               break; 
         case   0x38://TW_MT_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
      TWDR = sla | TW_READ;//发送SLA+R 
     3f4:	87 2f       	mov	r24, r23
     3f6:	81 60       	ori	r24, 0x01	; 1
     3f8:	83 b9       	out	0x03, r24	; 3
      TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输 
     3fa:	84 e8       	ldi	r24, 0x84	; 132
     3fc:	86 bf       	out	0x36, r24	; 54
      while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     3fe:	06 b6       	in	r0, 0x36	; 54
     400:	07 fe       	sbrs	r0, 7
     402:	fd cf       	rjmp	.-6      	; 0x3fe <twi_read_str+0xa0>
      switch(twst = (TWSR&0xf8)) 
     404:	81 b1       	in	r24, 0x01	; 1
     406:	88 7f       	andi	r24, 0xF8	; 248
     408:	99 27       	eor	r25, r25
     40a:	80 34       	cpi	r24, 0x40	; 64
     40c:	91 05       	cpc	r25, r1
     40e:	61 f0       	breq	.+24     	; 0x428 <twi_read_str+0xca>
     410:	81 34       	cpi	r24, 0x41	; 65
     412:	91 05       	cpc	r25, r1
     414:	24 f4       	brge	.+8      	; 0x41e <twi_read_str+0xc0>
     416:	c8 97       	sbiw	r24, 0x38	; 56
     418:	09 f4       	brne	.+2      	; 0x41c <twi_read_str+0xbe>
     41a:	aa cf       	rjmp	.-172    	; 0x370 <twi_read_str+0x12>
     41c:	28 c0       	rjmp	.+80     	; 0x46e <twi_read_str+0x110>
     41e:	88 34       	cpi	r24, 0x48	; 72
     420:	91 05       	cpc	r25, r1
     422:	09 f4       	brne	.+2      	; 0x426 <twi_read_str+0xc8>
     424:	a0 cf       	rjmp	.-192    	; 0x366 <twi_read_str+0x8>
     426:	23 c0       	rjmp	.+70     	; 0x46e <twi_read_str+0x110>
      { 
         case   0x40://TW_MR_SLA_ACK: 
               break; 
         case   0x48://TW_MR_SLA_NACK://器件忙,有可能处于内部写周期 
               goto   restart; 
         case   0x38://TW_MR_ARB_LOST: 
               goto   begin; 
         default: 
               goto   error; 
      } 
       for(i=0;i<len;i++) 
     428:	30 e0       	ldi	r19, 0x00	; 0
     42a:	32 17       	cp	r19, r18
     42c:	08 f5       	brcc	.+66     	; 0x470 <twi_read_str+0x112>
     42e:	42 2f       	mov	r20, r18
     430:	55 27       	eor	r21, r21
     432:	41 50       	subi	r20, 0x01	; 1
     434:	50 40       	sbci	r21, 0x00	; 0
     436:	74 e8       	ldi	r23, 0x84	; 132
     438:	64 ec       	ldi	r22, 0xC4	; 196
      { 
         if(i==(len-1)) 
     43a:	83 2f       	mov	r24, r19
     43c:	99 27       	eor	r25, r25
     43e:	84 17       	cp	r24, r20
     440:	95 07       	cpc	r25, r21
     442:	11 f4       	brne	.+4      	; 0x448 <twi_read_str+0xea>
         { 
            TWCR = _BV(TWINT) | _BV(TWEN) ;//清TWINT,开始传输(无应答) 
     444:	76 bf       	out	0x36, r23	; 54
     446:	01 c0       	rjmp	.+2      	; 0x44a <twi_read_str+0xec>
         } 
         else 
         { 
            TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWEA) ;//清TWINT,开始传输(有应答) 
     448:	66 bf       	out	0x36, r22	; 54
         } 
         while((TWCR & _BV(TWINT))==0x0);//等待传输完毕 
     44a:	06 b6       	in	r0, 0x36	; 54
     44c:	07 fe       	sbrs	r0, 7
     44e:	fd cf       	rjmp	.-6      	; 0x44a <twi_read_str+0xec>
         switch(twst =(TWSR&0xf8)) 
     450:	81 b1       	in	r24, 0x01	; 1
     452:	88 7f       	andi	r24, 0xF8	; 248
     454:	99 27       	eor	r25, r25
     456:	80 35       	cpi	r24, 0x50	; 80
     458:	91 05       	cpc	r25, r1
     45a:	19 f0       	breq	.+6      	; 0x462 <twi_read_str+0x104>
     45c:	88 35       	cpi	r24, 0x58	; 88
     45e:	91 05       	cpc	r25, r1
     460:	31 f4       	brne	.+12     	; 0x46e <twi_read_str+0x110>
         { 
            case  0x58://TW_MR_DATA_NACK: 
            case   0x50://TW_MR_DATA_ACK: 
                  *p = TWDR; 
     462:	83 b1       	in	r24, 0x03	; 3
     464:	81 93       	st	Z+, r24
     466:	3f 5f       	subi	r19, 0xFF	; 255
     468:	32 17       	cp	r19, r18
     46a:	38 f3       	brcs	.-50     	; 0x43a <twi_read_str+0xdc>
     46c:	01 c0       	rjmp	.+2      	; 0x470 <twi_read_str+0x112>
                  p++; 
                  break; 
            default: 
                  goto   error; 
         } 
      } 
   quit: 
      TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号 
      return   rv; 
   error: 
      rv=0x00; 
     46e:	a0 e0       	ldi	r26, 0x00	; 0
     470:	84 e9       	ldi	r24, 0x94	; 148
     472:	86 bf       	out	0x36, r24	; 54
   goto   quit; 
} 
     474:	8a 2f       	mov	r24, r26
     476:	99 27       	eor	r25, r25
     478:	08 95       	ret

0000047a <CH375FileRead>:
#ifdef FILE_DATA_BUF_LEN
UINT8  FILE_DATA_BUF[ FILE_DATA_BUF_LEN ];	/* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,起始地址建议为偶地址 */
UINT8	CH375FileRead( void )		/* 从当前文件读取数据 */

⌨️ 快捷键说明

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