📄 capature.lis
字号:
009E 30E0 ldi R19,0
00A0 00D0 rcall div16u
00A2 E42F mov R30,R20
00A4 F52F mov R31,R21
00A6 0283 std z+2,R16
00A8 .dbline 37
00A8 ; i=i%10;
00A8 2AE0 ldi R18,10
00AA 30E0 ldi R19,0
00AC 062F mov R16,R22
00AE 172F mov R17,R23
00B0 00D0 rcall mod16u
00B2 602F mov R22,R16
00B4 712F mov R23,R17
00B6 .dbline 38
00B6 ; p[3]=i;
00B6 E42F mov R30,R20
00B8 F52F mov R31,R21
00BA 6383 std z+3,R22
00BC .dbline -2
00BC .dbline 39
00BC ; }
00BC L15:
00BC 00D0 rcall pop_gset2
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym r p 20 pc
00C0 .dbsym r i 22 i
00C0 .dbend
00C0 .dbfunc e Init_IO _Init_IO fV
.even
00C0 _Init_IO::
00C0 .dbline -1
00C0 .dbline 42
00C0 ;
00C0 ; void Init_IO(void) //初始化I/O口
00C0 ; {DDRA=0xff; //设置A口为推挽1输出
00C0 .dbline 42
00C0 8FEF ldi R24,255
00C2 8ABB out 0x1a,R24
00C4 .dbline 43
00C4 ; PORTA=0xff;
00C4 8BBB out 0x1b,R24
00C6 .dbline 44
00C6 ; DDRC=0xff; //设置C口为推挽1输出
00C6 84BB out 0x14,R24
00C8 .dbline 45
00C8 ; PORTC=0xff;
00C8 85BB out 0x15,R24
00CA .dbline 46
00CA ; DDRD=0x00; //设置D口为不带上拉电阻输入
00CA 2224 clr R2
00CC 21BA out 0x11,R2
00CE .dbline 47
00CE ; PORTD=0x00;
00CE 22BA out 0x12,R2
00D0 .dbline -2
00D0 .dbline 48
00D0 ; }
00D0 L16:
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbend
00D2 .dbfunc e Init_Timer1 _Init_Timer1 fV
.even
00D2 _Init_Timer1::
00D2 .dbline -1
00D2 .dbline 51
00D2 ;
00D2 ; void Init_Timer1(void) //初始化T/C1的输入捕获中断
00D2 ; {TIMSK=TIMSK|0x20; //输入捕获使能
00D2 .dbline 51
00D2 89B7 in R24,0x39
00D4 8062 ori R24,32
00D6 89BF out 0x39,R24
00D8 .dbline 52
00D8 ; TCCR1B=0x82; //输入捕获噪音清除使能,下降沿捕获,时钟8分频1uS计数一次。
00D8 82E8 ldi R24,130
00DA 8EBD out 0x2e,R24
00DC .dbline 53
00DC ; TIFR=0x00; //清中断标志
00DC 2224 clr R2
00DE 28BE out 0x38,R2
00E0 .dbline 54
00E0 ; SREG=SREG|0x80; //全局中断开
00E0 7894 bset 7
00E2 .dbline -2
00E2 .dbline 55
00E2 ; }
00E2 L17:
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbend
00E4 .dbfunc e main _main fV
.even
00E4 _main::
00E4 .dbline -1
00E4 .dbline 58
00E4 ;
00E4 ; void main(void)
00E4 ; {Init_IO(); //初始化I/O口
00E4 .dbline 58
00E4 EDDF rcall _Init_IO
00E6 .dbline 59
00E6 ; PORTA=0xff; //点亮以测试所有的数码管
00E6 8FEF ldi R24,255
00E8 8BBB out 0x1b,R24
00EA .dbline 60
00EA ; PORTC=0x00;
00EA 2224 clr R2
00EC 25BA out 0x15,R2
00EE .dbline 61
00EE ; Init_Timer1();
00EE F1DF rcall _Init_Timer1
00F0 .dbline 62
00F0 ; DelayMs(3000); //延时
00F0 08EB ldi R16,3000
00F2 1BE0 ldi R17,11
00F4 85DF rcall _DelayMs
00F6 .dbline 63
00F6 ; PORTC=0xff; //熄灭所有的数码管
00F6 8FEF ldi R24,255
00F8 85BB out 0x15,R24
00FA 0AC0 rjmp L20
00FC L19:
00FC .dbline 65
00FC .dbline 65
00FC 20E0 ldi R18,<_Data
00FE 30E0 ldi R19,>_Data
0100 00910000 lds R16,_CNT
0104 10910100 lds R17,_CNT+1
0108 A8DF rcall _Process
010A .dbline 66
010A 00E0 ldi R16,<_Data
010C 10E0 ldi R17,>_Data
010E 89DF rcall _Display
0110 .dbline 67
0110 L20:
0110 .dbline 64
0110 F5CF rjmp L19
0112 X2:
0112 .dbline -2
0112 .dbline 68
0112 ; while(1)
0112 ; {Process(CNT,Data); //计数值处理
0112 ; Display(Data); //动态扫描显示
0112 ; }
0112 ; }
0112 L18:
0112 .dbline 0 ; func end
0112 0895 ret
0114 .dbend
.area vector(rom, abs)
.org 10
000A 8AC0 rjmp _Capture
.area text(rom, con, rel)
0114 .dbfile C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\AVRpractice\BOOK\定时器1\输入捕获\Capature.c
0114 .dbfunc e Capture _Capture fV
.even
0114 _Capture::
0114 2A92 st -y,R2
0116 3A92 st -y,R3
0118 4A92 st -y,R4
011A 5A92 st -y,R5
011C 2FB6 in R2,0x3f
011E 2A92 st -y,R2
0120 .dbline -1
0120 .dbline 72
0120 ;
0120 ; #pragma interrupt_handler Capture:6
0120 ; void Capture(void)
0120 ; {CNT2=CNT2+ICR1L; //CNT2存放当前捕获值
0120 .dbline 72
0120 26B4 in R2,0x26
0122 3324 clr R3
0124 40900200 lds R4,_CNT2
0128 50900300 lds R5,_CNT2+1
012C 420C add R4,R2
012E 531C adc R5,R3
0130 50920300 sts _CNT2+1,R5
0134 40920200 sts _CNT2,R4
0138 .dbline 73
0138 ; CNT2=(CNT2<<8)+ICR1H;
0138 27B4 in R2,0x27
013A 342C mov R3,R4
013C 30920300 sts _CNT2+1,R3
0140 20920200 sts _CNT2,R2
0144 .dbline 74
0144 ; CNT=CNT2-CNT1; //CNT1存放上次捕获值
0144 20900400 lds R2,_CNT1
0148 30900500 lds R3,_CNT1+1
014C 40900200 lds R4,_CNT2
0150 50900300 lds R5,_CNT2+1
0154 4218 sub R4,R2
0156 5308 sbc R5,R3
0158 50920100 sts _CNT+1,R5
015C 40920000 sts _CNT,R4
0160 .dbline 75
0160 ; CNT1=CNT2; //CNT存放两次时间差
0160 20900200 lds R2,_CNT2
0164 30900300 lds R3,_CNT2+1
0168 30920500 sts _CNT1+1,R3
016C 20920400 sts _CNT1,R2
0170 .dbline -2
0170 .dbline 76
0170 ; }
0170 L22:
0170 2990 ld R2,y+
0172 2FBE out 0x3f,R2
0174 5990 ld R5,y+
0176 4990 ld R4,y+
0178 3990 ld R3,y+
017A 2990 ld R2,y+
017C .dbline 0 ; func end
017C 1895 reti
017E .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\AVRpractice\BOOK\定时器1\输入捕获\Capature.c
0000 _CNT::
0000 .blkb 2
0002 .dbsym e CNT _CNT i
0002 _CNT2::
0002 .blkb 2
0004 .dbsym e CNT2 _CNT2 i
0004 _CNT1::
0004 .blkb 2
0006 .dbsym e CNT1 _CNT1 i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -