📄 timer2.lis
字号:
0072 ; init_int();
0072 EBDF rcall _init_int
0074 .dbline 52
0074 ; init_timer2();
0074 F4DF rcall _init_timer2
0076 .dbline 53
0076 ; SEI(); //打开全局中断
0076 7894 sei
0078 .dbline -2
0078 .dbline 54
0078 ; }
0078 L13:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbend
.area vector(rom, abs)
.org 2
0002 3DC0 rjmp _int0_fun
.area text(rom, con, rel)
007A .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2\Timer2.C
007A .dbfunc e int0_fun _int0_fun fV
.even
007A _int0_fun::
007A 8A93 st -y,R24
007C 9A93 st -y,R25
007E 8FB7 in R24,0x3f
0080 8A93 st -y,R24
0082 .dbline -1
0082 .dbline 59
0082 ;
0082 ; //INT0中断函数
0082 ; #pragma interrupt_handler int0_fun:iv_INT0
0082 ; void int0_fun(void)
0082 ; {
0082 .dbline 60
0082 ; KeyDown++;
0082 80910000 lds R24,_KeyDown
0086 8F5F subi R24,255 ; addi 1
0088 80930000 sts _KeyDown,R24
008C .dbline -2
008C .dbline 61
008C ; }
008C L14:
008C 8991 ld R24,y+
008E 8FBF out 0x3f,R24
0090 9991 ld R25,y+
0092 8991 ld R24,y+
0094 .dbline 0 ; func end
0094 1895 reti
0096 .dbend
0096 .dbfunc e main _main fV
.even
0096 _main::
0096 .dbline -1
0096 .dbline 65
0096 ;
0096 ; //主函数
0096 ; void main(void)
0096 ; {
0096 .dbline 66
0096 ; init_devices();
0096 EBDF rcall _init_devices
0098 3FC0 rjmp L17
009A L16:
009A .dbline 68
009A ; while(1)
009A ; {
009A .dbline 69
009A ; switch(KeyDown)
009A 40910000 lds R20,_KeyDown
009E 5527 clr R21
00A0 4130 cpi R20,1
00A2 E0E0 ldi R30,0
00A4 5E07 cpc R21,R30
00A6 A9F0 breq L22
00A8 4230 cpi R20,2
00AA E0E0 ldi R30,0
00AC 5E07 cpc R21,R30
00AE D1F0 breq L23
00B0 4330 cpi R20,3
00B2 E0E0 ldi R30,0
00B4 5E07 cpc R21,R30
00B6 C9F0 breq L24
00B8 4430 cpi R20,4
00BA E0E0 ldi R30,0
00BC 5E07 cpc R21,R30
00BE C1F0 breq L25
00C0 4530 cpi R20,5
00C2 E0E0 ldi R30,0
00C4 5E07 cpc R21,R30
00C6 B9F0 breq L26
00C8 4630 cpi R20,6
00CA E0E0 ldi R30,0
00CC 5E07 cpc R21,R30
00CE B1F0 breq L27
00D0 1AC0 rjmp L19
00D2 X0:
00D2 .dbline 70
00D2 ; {
00D2 L22:
00D2 .dbline 74
00D2 ; case 1:
00D2 ; //打开T/C2,选择相位可调PWM模式
00D2 ; //COM2[1:0]=3正向比较输出,系统时钟64分频
00D2 ; TCCR2|=(1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<CS22);
00D2 85B5 in R24,0x25
00D4 8467 ori R24,116
00D6 85BD out 0x25,R24
00D8 .dbline 75
00D8 ; KeyDown++;
00D8 80910000 lds R24,_KeyDown
00DC 8F5F subi R24,255 ; addi 1
00DE 80930000 sts _KeyDown,R24
00E2 .dbline 76
00E2 ; break;
00E2 14C0 rjmp L20
00E4 L23:
00E4 .dbline 78
00E4 ; case 2: //恒定第电平
00E4 ; OCR2 = 0x00;
00E4 2224 clr R2
00E6 23BC out 0x23,R2
00E8 .dbline 79
00E8 ; break;
00E8 11C0 rjmp L20
00EA L24:
00EA .dbline 81
00EA ; case 3: //恒定高电平
00EA ; OCR2 = 0xFF;
00EA 8FEF ldi R24,255
00EC 83BD out 0x23,R24
00EE .dbline 82
00EE ; break;
00EE 0EC0 rjmp L20
00F0 L25:
00F0 .dbline 84
00F0 ; case 4: //高低电平占空比200:56
00F0 ; OCR2 = 56;
00F0 88E3 ldi R24,56
00F2 83BD out 0x23,R24
00F4 .dbline 85
00F4 ; break;
00F4 0BC0 rjmp L20
00F6 L26:
00F6 .dbline 87
00F6 ; case 5: //高低电平占空比56:200
00F6 ; OCR2 = 200;
00F6 88EC ldi R24,200
00F8 83BD out 0x23,R24
00FA .dbline 88
00FA ; break;
00FA 08C0 rjmp L20
00FC L27:
00FC .dbline 90
00FC ; case 6:
00FC ; TCCR2=0x00; //关闭T/C0
00FC 2224 clr R2
00FE 25BC out 0x25,R2
0100 .dbline 91
0100 ; KeyDown=0;
0100 20920000 sts _KeyDown,R2
0104 .dbline 92
0104 ; break;
0104 03C0 rjmp L20
0106 L19:
0106 .dbline 94
0106 ; default:
0106 ; KeyDown=0;
0106 2224 clr R2
0108 20920000 sts _KeyDown,R2
010C .dbline 95
010C ; break;
010C L20:
010C .dbline 97
010C 20900000 lds R2,_KeyDown
0110 25BA out 0x15,R2
0112 .dbline 98
0112 0AE0 ldi R16,10
0114 10E0 ldi R17,0
0116 7EDF rcall _delay_ms
0118 .dbline 99
0118 L17:
0118 .dbline 67
0118 C0CF rjmp L16
011A X1:
011A .dbline -2
011A .dbline 100
011A ; }
011A ; PORTC=KeyDown;
011A ; delay_ms(10);
011A ; }
011A ; }
011A L15:
011A .dbline 0 ; func end
011A 0895 ret
011C .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2\Timer2.C
0000 _KeyDown::
0000 .blkb 1
0001 .dbsym e KeyDown _KeyDown c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -