📄 test.lis
字号:
00B6 ; break;
00B6 L22:
00B6 L23:
00B6 .dbline 89
00B6 80910000 lds R24,_state
00BA 8F5F subi R24,255 ; addi 1
00BC 80930000 sts _state,R24
00C0 .dbline 90
00C0 04E0 ldi R16,4
00C2 B5DF rcall _delay_s
00C4 .dbline 91
00C4 L19:
00C4 .dbline -2
00C4 .dbline 94
00C4 ; }
00C4 ; state++;
00C4 ; delay_s(4);
00C4 ; return;
00C4 ; // LED3_ON();
00C4 ; }
00C4 ; }
00C4 L15:
00C4 00D0 rcall pop_gset1
00C6 .dbline 0 ; func end
00C6 0895 ret
00C8 .dbsym r Counter 20 i
00C8 .dbend
.area vector(rom, abs)
.org 16
0010 64C0 rjmp _timer1_ovf_isr
.area text(rom, con, rel)
00C8 .dbfile D:\工作\video切换\soft\按键切换\test.c
00C8 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
00C8 _timer1_ovf_isr::
00C8 2A92 st -y,R2
00CA 8A93 st -y,R24
00CC 2FB6 in R2,0x3f
00CE 2A92 st -y,R2
00D0 .dbline -1
00D0 .dbline 98
00D0 ;
00D0 ; #pragma interrupt_handler timer1_ovf_isr:9
00D0 ; void timer1_ovf_isr(void)
00D0 ; {
00D0 .dbline 100
00D0 ; //TIMER1 has overflowed
00D0 ; TCNT1H = 0x00 /*INVALID SETTING*/; //reload counter high value
00D0 2224 clr R2
00D2 2DBC out 0x2d,R2
00D4 .dbline 101
00D4 ; TCNT1L = 0x00 /*INVALID SETTING*/; //reload counter low value
00D4 2CBC out 0x2c,R2
00D6 .dbline 102
00D6 ; TCCR1B |= 0xc0; //回到等待上升沿的状态
00D6 8EB5 in R24,0x2e
00D8 806C ori R24,192
00DA 8EBD out 0x2e,R24
00DC .dbline -2
00DC .dbline 103
00DC ; }
00DC L27:
00DC 2990 ld R2,y+
00DE 2FBE out 0x3f,R2
00E0 8991 ld R24,y+
00E2 2990 ld R2,y+
00E4 .dbline 0 ; func end
00E4 1895 reti
00E6 .dbend
.area vector(rom, abs)
.org 10
000A 73C0 rjmp _timer1_capt_isr
.area text(rom, con, rel)
00E6 .dbfile D:\工作\video切换\soft\按键切换\test.c
00E6 .dbfunc e timer1_capt_isr _timer1_capt_isr fV
.even
00E6 _timer1_capt_isr::
00E6 00D0 rcall push_lset
00E8 00D0 rcall push_gset1
00EA .dbline -1
00EA .dbline 107
00EA ;
00EA ; #pragma interrupt_handler timer1_capt_isr:6
00EA ; void timer1_capt_isr(void)
00EA ; {
00EA .dbline 111
00EA ; //timer 1 input capture event, read (int)value in ICR1 using;
00EA ; // value=ICR1L; //Read low byte first (important)
00EA ; // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
00EA ; switch(ICP_Flag)//根据状态值判断捕捉到的是什么跳变信号
00EA 40910300 lds R20,_ICP_Flag
00EE 5527 clr R21
00F0 4030 cpi R20,0
00F2 4507 cpc R20,R21
00F4 89F0 breq L33
00F6 X2:
00F6 4130 cpi R20,1
00F8 E0E0 ldi R30,0
00FA 5E07 cpc R21,R30
00FC 09F0 breq L32
00FE 2BC0 rjmp L29
0100 X3:
0100 .dbline 112
0100 ; {
0100 L32:
0100 .dbline 114
0100 ; case 1://0x40://捕捉到上升沿
0100 ; TCNT1H = 0x00; //reload counter high value
0100 2224 clr R2
0102 2DBC out 0x2d,R2
0104 .dbline 115
0104 ; TCNT1L = 0x00; //reload counter low value
0104 2CBC out 0x2c,R2
0106 .dbline 116
0106 ; TCCR1B &= 0xBF; //ICES1->0,转为捕捉下降沿
0106 8EB5 in R24,0x2e
0108 8F7B andi R24,191
010A 8EBD out 0x2e,R24
010C .dbline 117
010C ; TCCR1B |= 0x82; //开捕捉,开启定时器,8分频
010C 8EB5 in R24,0x2e
010E 8268 ori R24,130
0110 8EBD out 0x2e,R24
0112 .dbline 118
0112 ; ICP_Flag = 0;
0112 20920300 sts _ICP_Flag,R2
0116 .dbline 119
0116 ; break;
0116 1FC0 rjmp L30
0118 L33:
0118 .dbline 122
0118 ;
0118 ; case 0://0x00://捕捉到下降沿
0118 ; TCCR1B &= 0xf8; //关闭定时器
0118 8EB5 in R24,0x2e
011A 887F andi R24,248
011C 8EBD out 0x2e,R24
011E .dbline 123
011E ; ICP_value_down = ICR1L;//Read low byte first (important)
011E 26B4 in R2,0x26
0120 3324 clr R3
0122 30920200 sts _ICP_value_down+1,R3
0126 20920100 sts _ICP_value_down,R2
012A .dbline 124
012A ; ICP_value_down |= (int)ICR1H << 8; //Read high byte and shift into top byte
012A 27B4 in R2,0x27
012C 3324 clr R3
012E 322C mov R3,R2
0130 2224 clr R2
0132 40900100 lds R4,_ICP_value_down
0136 50900200 lds R5,_ICP_value_down+1
013A 4228 or R4,R2
013C 5328 or R5,R3
013E 50920200 sts _ICP_value_down+1,R5
0142 40920100 sts _ICP_value_down,R4
0146 .dbline 125
0146 ; VideoSwitch(ICP_value_down);
0146 8201 movw R16,R4
0148 8BDF rcall _VideoSwitch
014A .dbline 126
014A ; TCCR1B |= 0x40; //ICES1->1完成一个正脉宽捕捉,回到等待上升沿的状态
014A 8EB5 in R24,0x2e
014C 8064 ori R24,64
014E 8EBD out 0x2e,R24
0150 .dbline 127
0150 ; ICP_Flag = 1;
0150 81E0 ldi R24,1
0152 80930300 sts _ICP_Flag,R24
0156 .dbline 128
0156 ; break;
0156 L29:
0156 L30:
0156 .dbline -2
0156 .dbline 130
0156 ; }
0156 ; }
0156 L28:
0156 00D0 rcall pop_gset1
0158 00D0 rcall pop_lset
015A .dbline 0 ; func end
015A 1895 reti
015C .dbend
015C .dbfunc e init_devices _init_devices fV
.even
015C _init_devices::
015C .dbline -1
015C .dbline 134
015C ;
015C ; //call this routine to initialize all peripherals
015C ; void init_devices(void)
015C ; {
015C .dbline 136
015C ; //stop errant interrupts until set up
015C ; CLI(); //disable all interrupts
015C F894 cli
015E .dbline 137
015E ; port_init();
015E 50DF rcall _port_init
0160 .dbline 138
0160 ; timer1_init();
0160 58DF rcall _timer1_init
0162 .dbline 140
0162 ;
0162 ; MCUCR = 0x00;
0162 2224 clr R2
0164 25BE out 0x35,R2
0166 .dbline 141
0166 ; GICR = 0x00;
0166 2BBE out 0x3b,R2
0168 .dbline 142
0168 ; TIMSK = 0x24; //timer interrupt sources
0168 84E2 ldi R24,36
016A 89BF out 0x39,R24
016C .dbline 143
016C ; SEI(); //re-enable interrupts
016C 7894 sei
016E .dbline -2
016E .dbline 145
016E ; //all peripherals are now initialized
016E ; }
016E L34:
016E .dbline 0 ; func end
016E 0895 ret
0170 .dbend
0170 .dbfunc e main _main fV
.even
0170 _main::
0170 .dbline -1
0170 .dbline 148
0170 ;
0170 ; void main()
0170 ; {
0170 .dbline 149
0170 ; init_devices();
0170 F5DF rcall _init_devices
0172 .dbline 150
0172 ; state = 0;
0172 2224 clr R2
0174 20920000 sts _state,R2
0178 .dbline 151
0178 ; ICP_value_down = 0;
0178 3324 clr R3
017A 30920200 sts _ICP_value_down+1,R3
017E 20920100 sts _ICP_value_down,R2
0182 .dbline 152
0182 ; PORTD = 0x08;
0182 88E0 ldi R24,8
0184 82BB out 0x12,R24
0186 .dbline 153
0186 ; PORTC = 0x08;
0186 85BB out 0x15,R24
0188 L36:
0188 .dbline 155
0188 .dbline 156
0188 .dbline 157
0188 L37:
0188 .dbline 154
0188 FFCF rjmp L36
018A X4:
018A .dbline -2
018A .dbline 158
018A ; while(1)
018A ; {
018A ; ;
018A ; }
018A ; }
018A L35:
018A .dbline 0 ; func end
018A 0895 ret
018C .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\工作\video切换\soft\按键切换\test.c
0000 _state::
0000 .blkb 1
0001 .dbsym e state _state c
0001 _ICP_value_down::
0001 .blkb 2
0003 .dbsym e ICP_value_down _ICP_value_down i
0003 _ICP_Flag::
0003 .blkb 1
0004 .dbsym e ICP_Flag _ICP_Flag c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -