INTERRUPT(SIG_OVERFLOW0) //INTERRUPT { 5c: 78 94 sei 5e: 1f 92 push r1 60: 0f 92 push r0 62: 0f b6 in r0, 0x3f ; 63 64: 0f 92 push r0 66: 11 24 eor r1, r1 68: 8f 93 push r24 //产生周期 T=250*(8/8MHz)=256*1uS=250uS
PORTC|=_BV(PC1); //示波器测试点开 6a: a9 9a sbi 0x15, 1 ; 21 DDRC|=_BV(PC1); 6c: a1 9a sbi 0x14, 1 ; 20 __ticks = 1; else if (__tmp > 255) __ticks = 0; /* i.e. 256 */ else __ticks = (uint8_t)__tmp; 6e: 80 e5 ldi r24, 0x50 ; 80 70: 8a 95 dec r24 72: f1 f7 brne .-4 ; 0x70 _delay_us(30);
PORTC&=~_BV(PC1); //示波器测试点关 74: a9 98 cbi 0x15, 1 ; 21
//SREG=0x80; //开总中断 TCNT0=225; //设初始值为1f(31),记数范围:255-30(0X82)=225 76: 81 ee ldi r24, 0xE1 ; 225 78: 82 bf out 0x32, r24 ; 50 7a: 8f 91 pop r24 7c: 0f 90 pop r0 7e: 0f be out 0x3f, r0 ; 63 80: 0f 90 pop r0 82: 1f 90 pop r1 84: 18 95 reti
00000086 <main>:
}
int main(void) { 86: cf e5 ldi r28, 0x5F ; 95 88: d4 e0 ldi r29, 0x04 ; 4 8a: de bf out 0x3e, r29 ; 62 8c: cd bf out 0x3d, r28 ; 61 TCNT0=225; //设初始值为1f(31),记数范围:255-30(0X82)=225 8e: 81 ee ldi r24, 0xE1 ; 225 90: 82 bf out 0x32, r24 ; 50 TCCR0|=_BV(CS01); //预分频,CK/8, 92: 83 b7 in r24, 0x33 ; 51 94: 82 60 ori r24, 0x02 ; 2 96: 83 bf out 0x33, r24 ; 51 TIMSK|=_BV(TOIE0); 98: 89 b7 in r24, 0x39 ; 57 9a: 81 60 ori r24, 0x01 ; 1 9c: 89 bf out 0x39, r24 ; 57 SREG=0x80; //开总中断 9e: 80 e8 ldi r24, 0x80 ; 128 a0: 8f bf out 0x3f, r24 ; 63
while(1) { PORTC&=~_BV(PC1); a2: a9 98 cbi 0x15, 1 ; 21 DDRC|=_BV(PC1); a4: a1 9a sbi 0x14, 1 ; 20 a6: fd cf rjmp .-6 ; 0xa2
一共14条“压栈”和“出栈”指令,pop和push都是双周期指令。
我有空的时候用CTC模式拭一拭。
|