внешние прерывания attiny13

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Вот, как обещал, ассемблер кода.

Чтобы получить его нужно:

1.посмотреть подробный вывод при компиляции (Файл-Настройки-Показать подробный вывод);

2. найти временный коталог, куда складываются промежуточные результаты компиляции;

3. найти там файл с расширением .elf (к примеру lalalalala.elf);

4. применить к нему команду <Полный путь до нее>\avr-objdump -S lalalalala.elf >> 123.txt

где 123.txt ЛЮБОЕ имя, куда вы хотите сохранить вывод. Искать команду avr-objdum следует в <путь к ардуино ИДЕ>\hardware\tools\avr\bin

====================================

Если есть впросы по ассемблеру - не стесняйся - объясню, пока трезвый ;). Порядок некоторых строк программы изменил оптимизатор.

Прерывание начинается с серии push и заканчивается серией pop.

Математики, как можно заметить, нет. Как я и писал. Если вызвать миллис и микрос - можешь сам проверить - в коде добавится математика.


kakaat13.ino.elf:     file format elf32-avr


Disassembly of section .text:

00000000 <__vectors>:
   0:	09 c0       	rjmp	.+18     	; 0x14 <__ctors_end>
   2:	2e c0       	rjmp	.+92     	; 0x60 <__vector_1>
   4:	15 c0       	rjmp	.+42     	; 0x30 <__bad_interrupt>
   6:	2a c1       	rjmp	.+596    	; 0x25c <__vector_3>
   8:	13 c0       	rjmp	.+38     	; 0x30 <__bad_interrupt>
   a:	12 c0       	rjmp	.+36     	; 0x30 <__bad_interrupt>
   c:	11 c0       	rjmp	.+34     	; 0x30 <__bad_interrupt>
   e:	10 c0       	rjmp	.+32     	; 0x30 <__bad_interrupt>
  10:	0f c0       	rjmp	.+30     	; 0x30 <__bad_interrupt>
  12:	0e c0       	rjmp	.+28     	; 0x30 <__bad_interrupt>

00000014 <__ctors_end>:
  14:	11 24       	eor	r1, r1
  16:	1f be       	out	0x3f, r1	; 63
  18:	cf e9       	ldi	r28, 0x9F	; 159
  1a:	cd bf       	out	0x3d, r28	; 61

0000001c <__do_clear_bss>:
  1c:	20 e0       	ldi	r18, 0x00	; 0
  1e:	a0 e6       	ldi	r26, 0x60	; 96
  20:	b0 e0       	ldi	r27, 0x00	; 0
  22:	01 c0       	rjmp	.+2      	; 0x26 <.do_clear_bss_start>

00000024 <.do_clear_bss_loop>:
  24:	1d 92       	st	X+, r1

00000026 <.do_clear_bss_start>:
  26:	a5 37       	cpi	r26, 0x75	; 117
  28:	b2 07       	cpc	r27, r18
  2a:	e1 f7       	brne	.-8      	; 0x24 <.do_clear_bss_loop>
  2c:	4c d1       	rcall	.+664    	; 0x2c6 <main>
  2e:	4f c1       	rjmp	.+670    	; 0x2ce <_exit>

00000030 <__bad_interrupt>:
  30:	e7 cf       	rjmp	.-50     	; 0x0 <__vectors>

00000032 <_Z10CheckValueii>:
extern volatile unsigned long ovrf;

unsigned long time = 0;
bool CheckValue(int base, int value)
     {
      int x = base - value;
  32:	9c 01       	movw	r18, r24
  34:	26 1b       	sub	r18, r22
  36:	37 0b       	sbc	r19, r23
      //return ((value == base) || ((value > base) && ((value - base) < 200)) || ((value < base) && ((base - value) < 200)));
      return ((x >= 0)?(x < DELTA/tous):(-x < DELTA/tous));
  38:	37 ff       	sbrs	r19, 7
  3a:	03 c0       	rjmp	.+6      	; 0x42 <__SREG__+0x3>
  3c:	31 95       	neg	r19
  3e:	21 95       	neg	r18
  40:	31 09       	sbc	r19, r1
  42:	81 e0       	ldi	r24, 0x01	; 1
  44:	27 30       	cpi	r18, 0x07	; 7
  46:	31 05       	cpc	r19, r1
  48:	08 f0       	brcs	.+2      	; 0x4c <__SREG__+0xd>
  4a:	80 e0       	ldi	r24, 0x00	; 0
     }
  4c:	08 95       	ret

0000004e <setup>:



void setup()
{
 cli();
  4e:	f8 94       	cli

 DDRB |= (1 << PB0); //шестая ножка- выход                          
  50:	b8 9a       	sbi	0x17, 0	; 23
 MCUCR =0x01;
  52:	81 e0       	ldi	r24, 0x01	; 1
  54:	85 bf       	out	0x35, r24	; 53
 GIMSK = _BV(INT0);
  56:	80 e4       	ldi	r24, 0x40	; 64
  58:	8b bf       	out	0x3b, r24	; 59
 
 sei();
  5a:	78 94       	sei
  5c:	08 95       	ret

0000005e <loop>:
}

void loop() {
  5e:	08 95       	ret

00000060 <__vector_1>:
}


ISR(INT0_vect) 
  { 
  60:	1f 92       	push	r1
  62:	0f 92       	push	r0
  64:	0f b6       	in	r0, 0x3f	; 63
  66:	0f 92       	push	r0
  68:	11 24       	eor	r1, r1
  6a:	8f 92       	push	r8
  6c:	9f 92       	push	r9
  6e:	af 92       	push	r10
  70:	bf 92       	push	r11
  72:	cf 92       	push	r12
  74:	df 92       	push	r13
  76:	ef 92       	push	r14
  78:	ff 92       	push	r15
  7a:	0f 93       	push	r16
  7c:	1f 93       	push	r17
  7e:	2f 93       	push	r18
  80:	3f 93       	push	r19
  82:	4f 93       	push	r20
  84:	5f 93       	push	r21
  86:	6f 93       	push	r22
  88:	7f 93       	push	r23
  8a:	8f 93       	push	r24
  8c:	9f 93       	push	r25
  8e:	af 93       	push	r26
  90:	bf 93       	push	r27
  92:	cf 93       	push	r28
  94:	df 93       	push	r29
  96:	ef 93       	push	r30
  98:	ff 93       	push	r31
  uint32_t  cm = ovrf;
  9a:	c0 90 71 00 	lds	r12, 0x0071	; 0x800071 <ovrf>
  9e:	d0 90 72 00 	lds	r13, 0x0072	; 0x800072 <ovrf+0x1>
  a2:	e0 90 73 00 	lds	r14, 0x0073	; 0x800073 <ovrf+0x2>
  a6:	f0 90 74 00 	lds	r15, 0x0074	; 0x800074 <ovrf+0x3>
  aa:	80 91 69 00 	lds	r24, 0x0069	; 0x800069 <prevtime>
  ae:	90 91 6a 00 	lds	r25, 0x006A	; 0x80006a <prevtime+0x1>
  uint32_t cml = cm;

  if (!(PINB&(1<<1)))         
  b2:	b1 99       	sbic	0x16, 1	; 22
  b4:	31 c0       	rjmp	.+98     	; 0x118 <__stack+0x79>
    {
    hilen = cm - prevtime;
  b6:	e6 01       	movw	r28, r12
  b8:	c8 1b       	sub	r28, r24
  ba:	d9 0b       	sbc	r29, r25
  bc:	d0 93 66 00 	sts	0x0066, r29	; 0x800066 <hilen+0x1>
  c0:	c0 93 65 00 	sts	0x0065, r28	; 0x800065 <hilen>
    if (CheckValue(loTime/tous, hilen) && CheckValue(2*loTime/tous, lolen)) 
  c4:	be 01       	movw	r22, r28
  c6:	8b e0       	ldi	r24, 0x0B	; 11
  c8:	90 e0       	ldi	r25, 0x00	; 0
  ca:	b3 df       	rcall	.-154    	; 0x32 <_Z10CheckValueii>
  cc:	00 91 67 00 	lds	r16, 0x0067	; 0x800067 <lolen>
  d0:	10 91 68 00 	lds	r17, 0x0068	; 0x800068 <lolen+0x1>
  d4:	80 90 60 00 	lds	r8, 0x0060	; 0x800060 <_edata>
  d8:	90 90 61 00 	lds	r9, 0x0061	; 0x800061 <_edata+0x1>
  dc:	a0 90 62 00 	lds	r10, 0x0062	; 0x800062 <_edata+0x2>
  e0:	b0 90 63 00 	lds	r11, 0x0063	; 0x800063 <_edata+0x3>
  e4:	88 23       	and	r24, r24
  e6:	09 f4       	brne	.+2      	; 0xea <__stack+0x4b>
  e8:	7b c0       	rjmp	.+246    	; 0x1e0 <__stack+0x141>
  ea:	b8 01       	movw	r22, r16
  ec:	87 e1       	ldi	r24, 0x17	; 23
  ee:	90 e0       	ldi	r25, 0x00	; 0
  f0:	a0 df       	rcall	.-192    	; 0x32 <_Z10CheckValueii>
  f2:	88 23       	and	r24, r24
  f4:	09 f4       	brne	.+2      	; 0xf8 <__stack+0x59>
  f6:	74 c0       	rjmp	.+232    	; 0x1e0 <__stack+0x141>
      {
      cameCode = (cameCode << 1) | 1;
  f8:	d5 01       	movw	r26, r10
  fa:	c4 01       	movw	r24, r8
  fc:	88 0f       	add	r24, r24
  fe:	99 1f       	adc	r25, r25
 100:	aa 1f       	adc	r26, r26
 102:	bb 1f       	adc	r27, r27
 104:	81 60       	ori	r24, 0x01	; 1
 106:	80 93 60 00 	sts	0x0060, r24	; 0x800060 <_edata>
 10a:	90 93 61 00 	sts	0x0061, r25	; 0x800061 <_edata+0x1>
 10e:	a0 93 62 00 	sts	0x0062, r26	; 0x800062 <_edata+0x2>
 112:	b0 93 63 00 	sts	0x0063, r27	; 0x800063 <_edata+0x3>
 116:	7c c0       	rjmp	.+248    	; 0x210 <__stack+0x171>
      cameCounter++;
      }
    else cameCounter = 0;
    }
  else
    lolen = cm - prevtime;   
 118:	96 01       	movw	r18, r12
 11a:	28 1b       	sub	r18, r24
 11c:	39 0b       	sbc	r19, r25
 11e:	30 93 68 00 	sts	0x0068, r19	; 0x800068 <lolen+0x1>
 122:	20 93 67 00 	sts	0x0067, r18	; 0x800067 <lolen>
  
  prevtime = cm;
 126:	c0 92 69 00 	sts	0x0069, r12	; 0x800069 <prevtime>
 12a:	d0 92 6a 00 	sts	0x006A, r13	; 0x80006a <prevtime+0x1>
 12e:	e0 92 6b 00 	sts	0x006B, r14	; 0x80006b <prevtime+0x2>
 132:	f0 92 6c 00 	sts	0x006C, r15	; 0x80006c <prevtime+0x3>
  
  if (lolen > 1000/tous && (cameCounter == 24)) 
 136:	80 91 67 00 	lds	r24, 0x0067	; 0x800067 <lolen>
 13a:	90 91 68 00 	lds	r25, 0x0068	; 0x800068 <lolen+0x1>
 13e:	87 97       	sbiw	r24, 0x27	; 39
 140:	c8 f0       	brcs	.+50     	; 0x174 <__stack+0xd5>
 142:	80 91 64 00 	lds	r24, 0x0064	; 0x800064 <cameCounter>
 146:	88 31       	cpi	r24, 0x18	; 24
 148:	a9 f4       	brne	.+42     	; 0x174 <__stack+0xd5>
    {
    cameCode = cameCode & 0xfff;
 14a:	80 91 60 00 	lds	r24, 0x0060	; 0x800060 <_edata>
 14e:	90 91 61 00 	lds	r25, 0x0061	; 0x800061 <_edata+0x1>
 152:	a0 91 62 00 	lds	r26, 0x0062	; 0x800062 <_edata+0x2>
 156:	b0 91 63 00 	lds	r27, 0x0063	; 0x800063 <_edata+0x3>
 15a:	9f 70       	andi	r25, 0x0F	; 15
 15c:	aa 27       	eor	r26, r26
 15e:	bb 27       	eor	r27, r27
 160:	80 93 60 00 	sts	0x0060, r24	; 0x800060 <_edata>
 164:	90 93 61 00 	sts	0x0061, r25	; 0x800061 <_edata+0x1>
 168:	a0 93 62 00 	sts	0x0062, r26	; 0x800062 <_edata+0x2>
 16c:	b0 93 63 00 	sts	0x0063, r27	; 0x800063 <_edata+0x3>
 
    cameCounter = 0;
 170:	10 92 64 00 	sts	0x0064, r1	; 0x800064 <cameCounter>
    }

  if (cameCode == 1234) 
 174:	80 91 60 00 	lds	r24, 0x0060	; 0x800060 <_edata>
 178:	90 91 61 00 	lds	r25, 0x0061	; 0x800061 <_edata+0x1>
 17c:	a0 91 62 00 	lds	r26, 0x0062	; 0x800062 <_edata+0x2>
 180:	b0 91 63 00 	lds	r27, 0x0063	; 0x800063 <_edata+0x3>
 184:	82 3d       	cpi	r24, 0xD2	; 210
 186:	94 40       	sbci	r25, 0x04	; 4
 188:	a1 05       	cpc	r26, r1
 18a:	b1 05       	cpc	r27, r1
 18c:	09 f0       	breq	.+2      	; 0x190 <__stack+0xf1>
 18e:	49 c0       	rjmp	.+146    	; 0x222 <__stack+0x183>
 
    {
    if(cml -  time>200*toms) PINB = (1<<0);
 190:	80 91 6d 00 	lds	r24, 0x006D	; 0x80006d <time>
 194:	90 91 6e 00 	lds	r25, 0x006E	; 0x80006e <time+0x1>
 198:	a0 91 6f 00 	lds	r26, 0x006F	; 0x80006f <time+0x2>
 19c:	b0 91 70 00 	lds	r27, 0x0070	; 0x800070 <time+0x3>
 1a0:	a7 01       	movw	r20, r14
 1a2:	96 01       	movw	r18, r12
 1a4:	28 1b       	sub	r18, r24
 1a6:	39 0b       	sbc	r19, r25
 1a8:	4a 0b       	sbc	r20, r26
 1aa:	5b 0b       	sbc	r21, r27
 1ac:	da 01       	movw	r26, r20
 1ae:	c9 01       	movw	r24, r18
 1b0:	89 3e       	cpi	r24, 0xE9	; 233
 1b2:	9c 41       	sbci	r25, 0x1C	; 28
 1b4:	a1 05       	cpc	r26, r1
 1b6:	b1 05       	cpc	r27, r1
 1b8:	10 f0       	brcs	.+4      	; 0x1be <__stack+0x11f>
 1ba:	81 e0       	ldi	r24, 0x01	; 1
 1bc:	86 bb       	out	0x16, r24	; 22
    time = cml;  
 1be:	c0 92 6d 00 	sts	0x006D, r12	; 0x80006d <time>
 1c2:	d0 92 6e 00 	sts	0x006E, r13	; 0x80006e <time+0x1>
 1c6:	e0 92 6f 00 	sts	0x006F, r14	; 0x80006f <time+0x2>
 1ca:	f0 92 70 00 	sts	0x0070, r15	; 0x800070 <time+0x3>
    cameCode = 0;
 1ce:	10 92 60 00 	sts	0x0060, r1	; 0x800060 <_edata>
 1d2:	10 92 61 00 	sts	0x0061, r1	; 0x800061 <_edata+0x1>
 1d6:	10 92 62 00 	sts	0x0062, r1	; 0x800062 <_edata+0x2>
 1da:	10 92 63 00 	sts	0x0063, r1	; 0x800063 <_edata+0x3>
 1de:	21 c0       	rjmp	.+66     	; 0x222 <__stack+0x183>
    if (CheckValue(loTime/tous, hilen) && CheckValue(2*loTime/tous, lolen)) 
      {
      cameCode = (cameCode << 1) | 1;
      cameCounter++;
      }
    else if (CheckValue(2*loTime/tous, hilen) && CheckValue(loTime/tous, lolen)) 
 1e0:	be 01       	movw	r22, r28
 1e2:	87 e1       	ldi	r24, 0x17	; 23
 1e4:	90 e0       	ldi	r25, 0x00	; 0
 1e6:	25 df       	rcall	.-438    	; 0x32 <_Z10CheckValueii>
 1e8:	88 23       	and	r24, r24
 1ea:	c1 f0       	breq	.+48     	; 0x21c <__stack+0x17d>
 1ec:	b8 01       	movw	r22, r16
 1ee:	8b e0       	ldi	r24, 0x0B	; 11
 1f0:	90 e0       	ldi	r25, 0x00	; 0
 1f2:	1f df       	rcall	.-450    	; 0x32 <_Z10CheckValueii>
 1f4:	88 23       	and	r24, r24
 1f6:	91 f0       	breq	.+36     	; 0x21c <__stack+0x17d>
      {
      cameCode = (cameCode << 1) | 0;
 1f8:	88 0c       	add	r8, r8
 1fa:	99 1c       	adc	r9, r9
 1fc:	aa 1c       	adc	r10, r10
 1fe:	bb 1c       	adc	r11, r11
 200:	80 92 60 00 	sts	0x0060, r8	; 0x800060 <_edata>
 204:	90 92 61 00 	sts	0x0061, r9	; 0x800061 <_edata+0x1>
 208:	a0 92 62 00 	sts	0x0062, r10	; 0x800062 <_edata+0x2>
 20c:	b0 92 63 00 	sts	0x0063, r11	; 0x800063 <_edata+0x3>
      cameCounter++;
 210:	80 91 64 00 	lds	r24, 0x0064	; 0x800064 <cameCounter>
 214:	8f 5f       	subi	r24, 0xFF	; 255
 216:	80 93 64 00 	sts	0x0064, r24	; 0x800064 <cameCounter>
 21a:	85 cf       	rjmp	.-246    	; 0x126 <__stack+0x87>
      }
    else cameCounter = 0;
 21c:	10 92 64 00 	sts	0x0064, r1	; 0x800064 <cameCounter>
 220:	82 cf       	rjmp	.-252    	; 0x126 <__stack+0x87>
    {
    if(cml -  time>200*toms) PINB = (1<<0);
    time = cml;  
    cameCode = 0;
    }
}
 222:	ff 91       	pop	r31
 224:	ef 91       	pop	r30
 226:	df 91       	pop	r29
 228:	cf 91       	pop	r28
 22a:	bf 91       	pop	r27
 22c:	af 91       	pop	r26
 22e:	9f 91       	pop	r25
 230:	8f 91       	pop	r24
 232:	7f 91       	pop	r23
 234:	6f 91       	pop	r22
 236:	5f 91       	pop	r21
 238:	4f 91       	pop	r20
 23a:	3f 91       	pop	r19
 23c:	2f 91       	pop	r18
 23e:	1f 91       	pop	r17
 240:	0f 91       	pop	r16
 242:	ff 90       	pop	r15
 244:	ef 90       	pop	r14
 246:	df 90       	pop	r13
 248:	cf 90       	pop	r12
 24a:	bf 90       	pop	r11
 24c:	af 90       	pop	r10
 24e:	9f 90       	pop	r9
 250:	8f 90       	pop	r8
 252:	0f 90       	pop	r0
 254:	0f be       	out	0x3f, r0	; 63
 256:	0f 90       	pop	r0
 258:	1f 90       	pop	r1
 25a:	18 95       	reti

0000025c <__vector_3>:
*/

#include "wiring_private.h"
#include <avr/interrupt.h>
volatile unsigned long ovrf=0;
ISR(TIM0_OVF_vect){
 25c:	1f 92       	push	r1
 25e:	0f 92       	push	r0
 260:	0f b6       	in	r0, 0x3f	; 63
 262:	0f 92       	push	r0
 264:	11 24       	eor	r1, r1
 266:	8f 93       	push	r24
 268:	9f 93       	push	r25
 26a:	af 93       	push	r26
 26c:	bf 93       	push	r27
	ovrf++; //Increment counter every 256 clock cycles
 26e:	80 91 71 00 	lds	r24, 0x0071	; 0x800071 <ovrf>
 272:	90 91 72 00 	lds	r25, 0x0072	; 0x800072 <ovrf+0x1>
 276:	a0 91 73 00 	lds	r26, 0x0073	; 0x800073 <ovrf+0x2>
 27a:	b0 91 74 00 	lds	r27, 0x0074	; 0x800074 <ovrf+0x3>
 27e:	01 96       	adiw	r24, 0x01	; 1
 280:	a1 1d       	adc	r26, r1
 282:	b1 1d       	adc	r27, r1
 284:	80 93 71 00 	sts	0x0071, r24	; 0x800071 <ovrf>
 288:	90 93 72 00 	sts	0x0072, r25	; 0x800072 <ovrf+0x1>
 28c:	a0 93 73 00 	sts	0x0073, r26	; 0x800073 <ovrf+0x2>
 290:	b0 93 74 00 	sts	0x0074, r27	; 0x800074 <ovrf+0x3>
}
 294:	bf 91       	pop	r27
 296:	af 91       	pop	r26
 298:	9f 91       	pop	r25
 29a:	8f 91       	pop	r24
 29c:	0f 90       	pop	r0
 29e:	0f be       	out	0x3f, r0	; 63
 2a0:	0f 90       	pop	r0
 2a2:	1f 90       	pop	r1
 2a4:	18 95       	reti

000002a6 <init>:
	asm __volatile__("1: sbiw %0,1\n\t"
			 "brne 1b" : "=w" (us) : "0" (us));
}
void init(){
	//Setup timer interrupt and PWM pins
	TCCR0B |= _BV(CS00);
 2a6:	83 b7       	in	r24, 0x33	; 51
 2a8:	81 60       	ori	r24, 0x01	; 1
 2aa:	83 bf       	out	0x33, r24	; 51
	TCCR0A |= _BV(WGM00)|_BV(WGM01);
 2ac:	8f b5       	in	r24, 0x2f	; 47
 2ae:	83 60       	ori	r24, 0x03	; 3
 2b0:	8f bd       	out	0x2f, r24	; 47
	TIMSK0 |= 2;
 2b2:	89 b7       	in	r24, 0x39	; 57
 2b4:	82 60       	ori	r24, 0x02	; 2
 2b6:	89 bf       	out	0x39, r24	; 57
	TCNT0=0; 
 2b8:	12 be       	out	0x32, r1	; 50
	sei();
 2ba:	78 94       	sei
	ADMUX=0;
 2bc:	17 b8       	out	0x07, r1	; 7
	#elif F_CPU <= 1200000 && F_CPU > 200000
	ADCSRA |= _BV(ADEN) | _BV(ADPS1);
	#elif F_CPU > 1200000 && F_CPU < 6400001
	ADCSRA |= _BV(ADEN) | _BV(ADPS2);
	#else
	ADCSRA |= _BV(ADEN) | _BV(ADPS1) | _BV(ADPS0) | _BV(ADPS2);
 2be:	86 b1       	in	r24, 0x06	; 6
 2c0:	87 68       	ori	r24, 0x87	; 135
 2c2:	86 b9       	out	0x06, r24	; 6
 2c4:	08 95       	ret

000002c6 <main>:
//            GND  4|    |5  PB0 (D X) PWM
//                  +----+
*/
#include <WProgram.h>
int main(){
	init(); //Call init routine 
 2c6:	ef df       	rcall	.-34     	; 0x2a6 <init>
	setup(); //Call user provided setup()
 2c8:	c2 de       	rcall	.-636    	; 0x4e <setup>
	while(1){loop();} //Continuiously call user provided loop()
 2ca:	c9 de       	rcall	.-622    	; 0x5e <loop>
 2cc:	fe cf       	rjmp	.-4      	; 0x2ca <main+0x4>

000002ce <_exit>:
 2ce:	f8 94       	cli

000002d0 <__stop_program>:
 2d0:	ff cf       	rjmp	.-2      	; 0x2d0 <__stop_program>

 

iopq
Offline
Зарегистрирован: 05.07.2016

спасибо вам за столь подробное объяснение. ассемблерный код для меня пока сильно сложен. мне надо время для усворения полученной информации а дальше и до ассемблера доберусь. 

 F_CPU это как в атмел студии написать "#define F_CPU 9600000"? просто эту запись делает ардуина и нам не показывает?

а что если написать #define F_CPU 4800000 а фьюзы выставить на 9,6 мгц? 

ISR(TIM0_OVF_vect){
	ovrf++; //Increment counter every 256 clock cycles
}


нашел я этот таймер. получается что что- то подобное есть и у 328 меги и можно милиис и микрос заменять?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

1. да это просто как дефайн

2. если написать 4800, а фьюзы выставить на 9600, то миллис будут идти в два раза быстрее

3. да, у 328 есть, в том же файле wiring.c, там с миллис совсем просто, а с микрос - сильно сложнее. На ресурсах 328ой лучше пользоваться миллис и микрос.

---------------------

и 4. так сказать "бонусом" - тинька13 это уже совсем ужос-ужос, берите хоть 85-ую. Программирование тиньки13 это уже, скорее, учебная задача, на умение сократить размер кода. Практического смысла ровно НОЛЬ. Так уж прогресс устроен. Мастеров по ремонту карет уже нет, как и по пошиву цилиндров.

Програмист - пусть удобно пишет, а разработчики процессоров и контроллеров сделают камень за меньшие деньги с большими ресурсами.