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

📄 main.lss

📁 AVR红外遥控
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     18c:	80 93 b2 00 	sts	0x00B2, r24
  
  ++cnt_t2;
     190:	80 91 0e 01 	lds	r24, 0x010E
     194:	8f 5f       	subi	r24, 0xFF	; 255
     196:	80 93 0e 01 	sts	0x010E, r24
  
  wdt_reset();
     19a:	a8 95       	wdr
     19c:	8f 91       	pop	r24
     19e:	0f 90       	pop	r0
     1a0:	0f be       	out	0x3f, r0	; 63
     1a2:	0f 90       	pop	r0
     1a4:	1f 90       	pop	r1
     1a6:	18 95       	reti

000001a8 <__vector_10>:

}

// ICP1 输入捕捉
SIGNAL(SIG_INPUT_CAPTURE1) {
     1a8:	1f 92       	push	r1
     1aa:	0f 92       	push	r0
     1ac:	0f b6       	in	r0, 0x3f	; 63
     1ae:	0f 92       	push	r0
     1b0:	11 24       	eor	r1, r1
     1b2:	8f 93       	push	r24
     1b4:	9f 93       	push	r25

  ++cnt_icp1;
     1b6:	80 91 05 01 	lds	r24, 0x0105
     1ba:	90 91 06 01 	lds	r25, 0x0106
     1be:	01 96       	adiw	r24, 0x01	; 1
     1c0:	90 93 06 01 	sts	0x0106, r25
     1c4:	80 93 05 01 	sts	0x0105, r24
     1c8:	9f 91       	pop	r25
     1ca:	8f 91       	pop	r24
     1cc:	0f 90       	pop	r0
     1ce:	0f be       	out	0x3f, r0	; 63
     1d0:	0f 90       	pop	r0
     1d2:	1f 90       	pop	r1
     1d4:	18 95       	reti

000001d6 <__vector_11>:
  
}

EMPTY_INTERRUPT(SIG_OUTPUT_COMPARE1A);
     1d6:	18 95       	reti

000001d8 <__vector_12>:

EMPTY_INTERRUPT(SIG_OUTPUT_COMPARE1B);
     1d8:	18 95       	reti

000001da <__vector_13>:


// T1: 精确1秒
SIGNAL(SIG_OVERFLOW1) {
     1da:	1f 92       	push	r1
     1dc:	0f 92       	push	r0
     1de:	0f b6       	in	r0, 0x3f	; 63
     1e0:	0f 92       	push	r0
     1e2:	11 24       	eor	r1, r1
     1e4:	8f 93       	push	r24
     1e6:	9f 93       	push	r25

  TCNT1 = TIME1;
     1e8:	80 e8       	ldi	r24, 0x80	; 128
     1ea:	9f e8       	ldi	r25, 0x8F	; 143
     1ec:	90 93 85 00 	sts	0x0085, r25
     1f0:	80 93 84 00 	sts	0x0084, r24
  
  sample_v = cnt_icp1;
     1f4:	80 91 05 01 	lds	r24, 0x0105
     1f8:	90 91 06 01 	lds	r25, 0x0106
     1fc:	90 93 0d 01 	sts	0x010D, r25
     200:	80 93 0c 01 	sts	0x010C, r24
  cnt_icp1 = 0;
     204:	10 92 06 01 	sts	0x0106, r1
     208:	10 92 05 01 	sts	0x0105, r1

  sample_i = cnt_int1;
     20c:	80 91 0a 01 	lds	r24, 0x010A
     210:	90 91 0b 01 	lds	r25, 0x010B
     214:	90 93 03 01 	sts	0x0103, r25
     218:	80 93 02 01 	sts	0x0102, r24
  cnt_int1 = 0;
     21c:	10 92 0b 01 	sts	0x010B, r1
     220:	10 92 0a 01 	sts	0x010A, r1

  flag0 |= _BV(FLAG0_T1);
     224:	80 91 07 01 	lds	r24, 0x0107
     228:	82 60       	ori	r24, 0x02	; 2
     22a:	80 93 07 01 	sts	0x0107, r24
  ++cnt_t1;
     22e:	80 91 08 01 	lds	r24, 0x0108
     232:	90 91 09 01 	lds	r25, 0x0109
     236:	01 96       	adiw	r24, 0x01	; 1
     238:	90 93 09 01 	sts	0x0109, r25
     23c:	80 93 08 01 	sts	0x0108, r24
     240:	9f 91       	pop	r25
     242:	8f 91       	pop	r24
     244:	0f 90       	pop	r0
     246:	0f be       	out	0x3f, r0	; 63
     248:	0f 90       	pop	r0
     24a:	1f 90       	pop	r1
     24c:	18 95       	reti

0000024e <__vector_16>:
  
}


// T0: 刷新LED不闪烁 
SIGNAL(SIG_OVERFLOW0) {
     24e:	1f 92       	push	r1
     250:	0f 92       	push	r0
     252:	0f b6       	in	r0, 0x3f	; 63
     254:	0f 92       	push	r0
     256:	11 24       	eor	r1, r1
     258:	2f 93       	push	r18
     25a:	3f 93       	push	r19
     25c:	4f 93       	push	r20
     25e:	5f 93       	push	r21
     260:	6f 93       	push	r22
     262:	7f 93       	push	r23
     264:	8f 93       	push	r24
     266:	9f 93       	push	r25
     268:	af 93       	push	r26
     26a:	bf 93       	push	r27
     26c:	ef 93       	push	r30
     26e:	ff 93       	push	r31
  
  TCNT0 = TIME0;
     270:	80 ee       	ldi	r24, 0xE0	; 224
     272:	86 bd       	out	0x26, r24	; 38

  if ((bcd_buf[cnt_t0] & 0xf0) == 0) {
     274:	e0 91 04 01 	lds	r30, 0x0104
     278:	ff 27       	eor	r31, r31
     27a:	e1 5f       	subi	r30, 0xF1	; 241
     27c:	fe 4f       	sbci	r31, 0xFE	; 254
     27e:	80 81       	ld	r24, Z
     280:	80 7f       	andi	r24, 0xF0	; 240
     282:	99 f4       	brne	.+38     	; 0x2aa <__vector_16+0x5c>
    led_putchar((bcd_buf[cnt_t0] & 0x0f), cnt_t0, 0);
     284:	60 91 04 01 	lds	r22, 0x0104
     288:	e0 91 04 01 	lds	r30, 0x0104
     28c:	ff 27       	eor	r31, r31
     28e:	e1 5f       	subi	r30, 0xF1	; 241
     290:	fe 4f       	sbci	r31, 0xFE	; 254
     292:	80 81       	ld	r24, Z
     294:	40 e0       	ldi	r20, 0x00	; 0
     296:	8f 70       	andi	r24, 0x0F	; 15
     298:	62 d0       	rcall	.+196    	; 0x35e <led_putchar>
  }
  else {
    led_putchar((bcd_buf[cnt_t0] & 0x0f), cnt_t0, 1);
  }    
  
  cnt_t0 = (cnt_t0 == 12) ? 0 : (cnt_t0 + 1); // 下一个位
     29a:	80 91 04 01 	lds	r24, 0x0104
     29e:	8c 30       	cpi	r24, 0x0C	; 12
     2a0:	99 f0       	breq	.+38     	; 0x2c8 <__vector_16+0x7a>
     2a2:	80 91 04 01 	lds	r24, 0x0104
     2a6:	8f 5f       	subi	r24, 0xFF	; 255
     2a8:	10 c0       	rjmp	.+32     	; 0x2ca <__vector_16+0x7c>
     2aa:	60 91 04 01 	lds	r22, 0x0104
     2ae:	e0 91 04 01 	lds	r30, 0x0104
     2b2:	ff 27       	eor	r31, r31
     2b4:	e1 5f       	subi	r30, 0xF1	; 241
     2b6:	fe 4f       	sbci	r31, 0xFE	; 254
     2b8:	80 81       	ld	r24, Z
     2ba:	41 e0       	ldi	r20, 0x01	; 1
     2bc:	8f 70       	andi	r24, 0x0F	; 15
     2be:	4f d0       	rcall	.+158    	; 0x35e <led_putchar>
     2c0:	80 91 04 01 	lds	r24, 0x0104
     2c4:	8c 30       	cpi	r24, 0x0C	; 12
     2c6:	69 f7       	brne	.-38     	; 0x2a2 <__vector_16+0x54>
     2c8:	80 e0       	ldi	r24, 0x00	; 0
     2ca:	80 93 04 01 	sts	0x0104, r24
     2ce:	ff 91       	pop	r31
     2d0:	ef 91       	pop	r30
     2d2:	bf 91       	pop	r27
     2d4:	af 91       	pop	r26
     2d6:	9f 91       	pop	r25
     2d8:	8f 91       	pop	r24
     2da:	7f 91       	pop	r23
     2dc:	6f 91       	pop	r22
     2de:	5f 91       	pop	r21
     2e0:	4f 91       	pop	r20
     2e2:	3f 91       	pop	r19
     2e4:	2f 91       	pop	r18
     2e6:	0f 90       	pop	r0
     2e8:	0f be       	out	0x3f, r0	; 63
     2ea:	0f 90       	pop	r0
     2ec:	1f 90       	pop	r1
     2ee:	18 95       	reti

000002f0 <init_display>:




void init_display(void) {
     2f0:	84 b1       	in	r24, 0x04	; 4
     2f2:	8c 62       	ori	r24, 0x2C	; 44
     2f4:	84 b9       	out	0x04, r24	; 4
  
  u8_t tmp;
  
  // I/O SPI: SD/SCLK/SS is 0 for idle!
  DDRB |= (_BV(SD)|_BV(SCLK)|_BV(SS));
  PORTB &= ~(_BV(SD)|_BV(SCLK));
     2f6:	85 b1       	in	r24, 0x05	; 5
     2f8:	87 7d       	andi	r24, 0xD7	; 215
     2fa:	85 b9       	out	0x05, r24	; 5
  PORTB |= _BV(SS);
     2fc:	2a 9a       	sbi	0x05, 2	; 5
  
  // SPI mode:
  SPCR = (_BV(SPE)|_BV(MSTR));
     2fe:	80 e5       	ldi	r24, 0x50	; 80
     300:	8c bd       	out	0x2c, r24	; 44
  
  // I/O 74HC595: latch is 0 for lock, oe is 0 for open display
  DDRC |= (_BV(LATCH1)|_BV(LATCH2)|_BV(LATCH3)|_BV(OE));
     302:	87 b1       	in	r24, 0x07	; 7
     304:	8f 60       	ori	r24, 0x0F	; 15
     306:	87 b9       	out	0x07, r24	; 7
  PORTC &= ~(_BV(LATCH1)|_BV(LATCH2)|_BV(LATCH3)|_BV(OE));
     308:	88 b1       	in	r24, 0x08	; 8
     30a:	80 7f       	andi	r24, 0xF0	; 240
     30c:	88 b9       	out	0x08, r24	; 8
  
  // I/O LED14/15/16: dark is 1
  DDRC |= (_BV(LED14)|_BV(LED15));
     30e:	87 b1       	in	r24, 0x07	; 7
     310:	80 63       	ori	r24, 0x30	; 48
     312:	87 b9       	out	0x07, r24	; 7
  PORTC |= (_BV(LED14)|_BV(LED15));
     314:	88 b1       	in	r24, 0x08	; 8
     316:	80 63       	ori	r24, 0x30	; 48
     318:	88 b9       	out	0x08, r24	; 8
  DDRD |= _BV(LED16);
     31a:	55 9a       	sbi	0x0a, 5	; 10
  PORTD |= _BV(LED16);
     31c:	5d 9a       	sbi	0x0b, 5	; 11
  
  // 清显示缓冲区
  for (tmp=0; tmp<13; tmp++) {
    bcd_buf[tmp] = 0;
     31e:	10 92 0f 01 	sts	0x010F, r1
     322:	10 92 10 01 	sts	0x0110, r1
     326:	10 92 11 01 	sts	0x0111, r1
     32a:	10 92 12 01 	sts	0x0112, r1
     32e:	10 92 13 01 	sts	0x0113, r1
     332:	10 92 14 01 	sts	0x0114, r1
     336:	10 92 15 01 	sts	0x0115, r1
     33a:	10 92 16 01 	sts	0x0116, r1
     33e:	10 92 17 01 	sts	0x0117, r1
     342:	10 92 18 01 	sts	0x0118, r1
     346:	10 92 19 01 	sts	0x0119, r1
     34a:	10 92 1a 01 	sts	0x011A, r1
     34e:	10 92 1b 01 	sts	0x011B, r1
     352:	08 95       	ret

00000354 <display_off>:
  }
  
  return;
  
}




// 用于立即关闭所有显示
// 通常在掉电时节能,以便完成剩余的紧急事件。比如:写EEPROM
void display_off(void) {
     354:	43 9a       	sbi	0x08, 3	; 8
  
  // 74HC595 ouput Z, display off
  PORTC |= _BV(OE);
  
  // 指示灯关闭
  LED14_OFF;
     356:	45 9a       	sbi	0x08, 5	; 8
  LED15_OFF;
     358:	44 9a       	sbi	0x08, 4	; 8
  LED16_OFF;
     35a:	5d 9a       	sbi	0x0b, 5	; 11
     35c:	08 95       	ret

0000035e <led_putchar>:
  
  return;
}






// sdata: 显示的BCD码0xo~0x9
// spos:  显示位置
// spt:   0x01显示小数点,00x00不显示小数点
// 该过程主要由T0中断自动调用,也可以外部使用
void led_putchar(u8_t sdata, u8_t spos, u8_t spt) {
     35e:	43 9a       	sbi	0x08, 3	; 8
  
  // 以下参看硬件原理图:操作LED14/15/16
  // 74HC595 ouput Z, display off
  PORTC |= _BV(OE);


  // SPI send out LED segment code,如果该位显示小数点:led_data[i] |= 0x01;
  SPDR = (pgm_read_byte(&led_seg[sdata]) | spt);
     360:	e8 2f       	mov	r30, r24
     362:	ff 27       	eor	r31, r31
     364:	ec 5c       	subi	r30, 0xCC	; 204
     366:	ff 4f       	sbci	r31, 0xFF	; 255
     368:	e4 91       	lpm	r30, Z
     36a:	e4 2b       	or	r30, r20
     36c:	ee bd       	out	0x2e, r30	; 46
  while (!(SPSR & _BV(SPIF)));  
     36e:	0d b4       	in	r0, 0x2d	; 45
     370:	07 fe       	sbrs	r0, 7
     372:	fd cf       	rjmp	.-6      	; 0x36e <led_putchar+0x10>
  PORTC |= _BV(LATCH1);
     374:	41 9a       	sbi	0x08, 1	; 8
  PORTC &= ~_BV(LATCH1);
     376:	41 98       	cbi	0x08, 1	; 8

  // select need of LED0-4
  SPDR = (spos > 6) ? 0x00 : pgm_read_byte(&led_select[spos]);
     378:	67 30       	cpi	r22, 0x07	; 7
     37a:	a8 f0       	brcs	.+42     	; 0x3a6 <led_putchar+0x48>
     37c:	80 e0       	ldi	r24, 0x00	; 0
     37e:	8e bd       	out	0x2e, r24	; 46
  while (!(SPSR & _BV(SPIF))); 
     380:	0d b4       	in	r0, 0x2d	; 45
     382:	07 fe       	sbrs	r0, 7
     384:	fd cf       	rjmp	.-6      	; 0x380 <led_putchar+0x22>
  PORTC |= _BV(LATCH2);
     386:	40 9a       	sbi	0x08, 0	; 8
  PORTC &= ~_BV(LATCH2);
     388:	40 98       	cbi	0x08, 0	; 8
    
  // select need of LED5-12
  SPDR = (spos > 6) ? pgm_read_byte(&led_select[spos]) : 0x00;
     38a:	67 30       	cpi	r22, 0x07	; 7
     38c:	30 f4       	brcc	.+12     	; 0x39a <led_putchar+0x3c>
     38e:	60 e0       	ldi	r22, 0x00	; 0
     390:	6e bd       	out	0x2e, r22	; 46
  while (!(SPSR & _BV(SPIF))); 
     392:	0d b4       	in	r0, 0x2d	; 45
     394:	07 fe       	sbrs	r0, 7
     396:	fd cf       	rjmp	.-6      	; 0x392 <led_putchar+0x34>
     398:	0c c0       	rjmp	.+24     	; 0x3b2 <led_putchar+0x54>
     39a:	e6 2f       	mov	r30, r22
     39c:	ff 27       	eor	r31, r31
     39e:	ec 5b       	subi	r30, 0xBC	; 188
     3a0:	ff 4f       	sbci	r31, 0xFF	; 255
     3a2:	64 91       	lpm	r22, Z
     3a4:	f5 cf       	rjmp	.-22     	; 0x390 <led_putchar+0x32>
     3a6:	e6 2f       	mov	r30, r22
     3a8:	ff 27       	eor	r31, r31
     3aa:	ec 5b       	subi	r30, 0xBC	; 188
     3ac:	ff 4f       	sbci	r31, 0xFF	; 255
     3ae:	84 91       	lpm	r24, Z
     3b0:	e6 cf       	rjmp	.-52     	; 0x37e <led_putchar+0x20>
  PORTC |= _BV(LATCH3);
     3b2:	42 9a       	sbi	0x08, 2	; 8
  PORTC &= ~_BV(LATCH3);
     3b4:	42 98       	cbi	0x08, 2	; 8

  // 74HC595 ouput enable, display on
  PORTC &= ~_BV(OE);

⌨️ 快捷键说明

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