📄 ccapature.lis
字号:
00B0 .dbline 49
00B0 ; TEM=TEM*10;
00B0 0AE0 ldi R16,10
00B2 10E0 ldi R17,0
00B4 262F mov R18,R22
00B6 372F mov R19,R23
00B8 00D0 rcall mpy16s
00BA 602F mov R22,R16
00BC 712F mov R23,R17
00BE .dbline 50
00BE ; p[1]=TEM/i;
00BE 2A2D mov R18,R10
00C0 3B2D mov R19,R11
00C2 00D0 rcall div16u
00C4 E42F mov R30,R20
00C6 F52F mov R31,R21
00C8 0183 std z+1,R16
00CA .dbline 51
00CA ; TEM=TEM%i;
00CA 2A2D mov R18,R10
00CC 3B2D mov R19,R11
00CE 062F mov R16,R22
00D0 172F mov R17,R23
00D2 00D0 rcall mod16u
00D4 602F mov R22,R16
00D6 712F mov R23,R17
00D8 .dbline 52
00D8 ; TEM=TEM*10;
00D8 0AE0 ldi R16,10
00DA 10E0 ldi R17,0
00DC 262F mov R18,R22
00DE 372F mov R19,R23
00E0 00D0 rcall mpy16s
00E2 602F mov R22,R16
00E4 712F mov R23,R17
00E6 .dbline 53
00E6 ; p[2]=TEM/i;
00E6 2A2D mov R18,R10
00E8 3B2D mov R19,R11
00EA 00D0 rcall div16u
00EC E42F mov R30,R20
00EE F52F mov R31,R21
00F0 0283 std z+2,R16
00F2 .dbline 54
00F2 ; TEM=TEM%i;
00F2 2A2D mov R18,R10
00F4 3B2D mov R19,R11
00F6 062F mov R16,R22
00F8 172F mov R17,R23
00FA 00D0 rcall mod16u
00FC 602F mov R22,R16
00FE 712F mov R23,R17
0100 .dbline 55
0100 ; TEM=TEM*10;
0100 0AE0 ldi R16,10
0102 10E0 ldi R17,0
0104 262F mov R18,R22
0106 372F mov R19,R23
0108 00D0 rcall mpy16s
010A 602F mov R22,R16
010C 712F mov R23,R17
010E .dbline 56
010E ; p[3]=TEM/i;
010E 2A2D mov R18,R10
0110 3B2D mov R19,R11
0112 00D0 rcall div16u
0114 E42F mov R30,R20
0116 F52F mov R31,R21
0118 0383 std z+3,R16
011A .dbline -2
011A .dbline 57
011A ; }
011A L20:
011A 00D0 rcall pop_gset3
011C .dbline 0 ; func end
011C 0895 ret
011E .dbsym r TEM 22 i
011E .dbsym r p 20 pc
011E .dbsym r i 10 i
011E .dbend
011E .dbfunc e Init_IO _Init_IO fV
.even
011E _Init_IO::
011E .dbline -1
011E .dbline 60
011E ;
011E ; void Init_IO(void) //初始化I/O口
011E ; {DDRA=0xff; //设置A口为推挽1输出
011E .dbline 60
011E 8FEF ldi R24,255
0120 8ABB out 0x1a,R24
0122 .dbline 61
0122 ; PORTA=0xff;
0122 8BBB out 0x1b,R24
0124 .dbline 62
0124 ; DDRC=0xff; //设置C口为推挽1输出
0124 84BB out 0x14,R24
0126 .dbline 63
0126 ; PORTC=0xff;
0126 85BB out 0x15,R24
0128 .dbline 64
0128 ; DDRD=0x00; //设置D口为带上拉电阻输入
0128 2224 clr R2
012A 21BA out 0x11,R2
012C .dbline 65
012C ; PORTD=0x00;
012C 22BA out 0x12,R2
012E .dbline -2
012E .dbline 66
012E ; }
012E L21:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
0130 .dbfunc e Init_Timer1 _Init_Timer1 fV
.even
0130 _Init_Timer1::
0130 .dbline -1
0130 .dbline 69
0130 ;
0130 ; void Init_Timer1(void) //初始化T/C1的输入捕获中断
0130 ; {TIMSK=TIMSK|0x20; //输入捕获使能
0130 .dbline 69
0130 89B7 in R24,0x39
0132 8062 ori R24,32
0134 89BF out 0x39,R24
0136 .dbline 70
0136 ; TCCR1B=0xC2; //输入捕获噪音使能,下降沿捕获,时钟8分频1uS计数一次。
0136 82EC ldi R24,194
0138 8EBD out 0x2e,R24
013A .dbline 71
013A ; TIFR=0x20; //清中断标志
013A 80E2 ldi R24,32
013C 88BF out 0x38,R24
013E .dbline 72
013E ; SREG=SREG&0x7f; //全局中断关
013E 8FB7 in R24,0x3f
0140 8F77 andi R24,127
0142 8FBF out 0x3f,R24
0144 .dbline -2
0144 .dbline 73
0144 ; }
0144 L22:
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbend
0146 .dbfunc e main _main fV
0146 ; i -> R20
.even
0146 _main::
0146 .dbline -1
0146 .dbline 76
0146 ;
0146 ; void main(void)
0146 ; {uchar i;
0146 .dbline 77
0146 ; Init_IO(); //初始化I/O口
0146 EBDF rcall _Init_IO
0148 .dbline 78
0148 ; PORTA=0xff; //点亮以测试所有的数码管
0148 8FEF ldi R24,255
014A 8BBB out 0x1b,R24
014C .dbline 79
014C ; PORTC=0xf0;
014C 80EF ldi R24,240
014E 85BB out 0x15,R24
0150 .dbline 80
0150 ; DelayMs(300);
0150 0CE2 ldi R16,300
0152 11E0 ldi R17,1
0154 55DF rcall _DelayMs
0156 .dbline 81
0156 ; PORTC=0xff; //熄灭所有的数码管
0156 8FEF ldi R24,255
0158 85BB out 0x15,R24
015A .dbline 82
015A ; Pre_Display(); //预显示,数码管显示测试
015A 63DF rcall _Pre_Display
015C .dbline 83
015C ; PORTC=0xff;
015C 8FEF ldi R24,255
015E 85BB out 0x15,R24
0160 .dbline 84
0160 ; Init_Timer1(); //T/C1初试化
0160 E7DF rcall _Init_Timer1
0162 51C0 rjmp L25
0164 X2:
0164 .dbline 86
0164 ; while(1)
0164 ; {
0164 L27:
0164 .dbline 88
0164 .dbline 88
0164 88B7 in R24,0x38
0166 8062 ori R24,32
0168 88BF out 0x38,R24
016A .dbline 89
016A 26B4 in R2,0x26
016C 3324 clr R3
016E 30921A00 sts _CNT+1,R3
0172 20921900 sts _CNT,R2
0176 .dbline 90
0176 26B4 in R2,0x26
0178 37B4 in R3,0x27
017A 30920100 sts _CNT2+1,R3
017E 20920000 sts _CNT2,R2
0182 .dbline 91
0182 20900200 lds R2,_CNT1
0186 30900300 lds R3,_CNT1+1
018A 40900000 lds R4,_CNT2
018E 50900100 lds R5,_CNT2+1
0192 4218 sub R4,R2
0194 5308 sbc R5,R3
0196 50921A00 sts _CNT+1,R5
019A 40921900 sts _CNT,R4
019E .dbline 92
019E 20900000 lds R2,_CNT2
01A2 30900100 lds R3,_CNT2+1
01A6 30920300 sts _CNT1+1,R3
01AA 20920200 sts _CNT1,R2
01AE .dbline 93
01AE 80910000 lds R24,_Flag
01B2 8F5F subi R24,255 ; addi 1
01B4 80930000 sts _Flag,R24
01B8 .dbline 93
01B8 L28:
01B8 .dbline 87
01B8 ; while(TIFR&0x20) //捕获检测
01B8 28B6 in R2,0x38
01BA 25FC sbrc R2,5
01BC D3CF rjmp L27
01BE .dbline 94
01BE ; {TIFR|=0x20; //清除捕获标志
01BE ; CNT=ICR1L; //CNT暂存
01BE ; CNT2=(ICR1H<<8)+ICR1L; //CNT2存放当前捕获值
01BE ; CNT=CNT2-CNT1; //CNT存放两次时间差
01BE ; CNT1=CNT2; //CNT1存放上次捕获值
01BE ; Flag++;} //检测到第一次捕获
01BE ; if(Flag==2) //检测到第二此捕获
01BE 80910000 lds R24,_Flag
01C2 8230 cpi R24,2
01C4 01F5 brne L30
01C6 .dbline 95
01C6 ; {Flag=0; //清除捕获检测标志
01C6 .dbline 95
01C6 2224 clr R2
01C8 20920000 sts _Flag,R2
01CC .dbline 96
01CC ; HZ(CNT,Data); //数据处理
01CC 20E0 ldi R18,<_Data
01CE 30E0 ldi R19,>_Data
01D0 00911900 lds R16,_CNT
01D4 10911A00 lds R17,_CNT+1
01D8 57DF rcall _HZ
01DA .dbline 97
01DA ; for(i=0;i<100;i++) //频率显示
01DA 4427 clr R20
01DC 04C0 rjmp L35
01DE L32:
01DE .dbline 98
01DE 00E0 ldi R16,<_Data
01E0 10E0 ldi R17,>_Data
01E2 34DF rcall _Display
01E4 L33:
01E4 .dbline 97
01E4 4395 inc R20
01E6 L35:
01E6 .dbline 97
01E6 4436 cpi R20,100
01E8 D0F3 brlo L32
01EA .dbline 99
01EA 2224 clr R2
01EC 3324 clr R3
01EE 30921A00 sts _CNT+1,R3
01F2 20921900 sts _CNT,R2
01F6 .dbline 99
01F6 30920300 sts _CNT1+1,R3
01FA 20920200 sts _CNT1,R2
01FE .dbline 99
01FE 30920100 sts _CNT2+1,R3
0202 20920000 sts _CNT2,R2
0206 .dbline 99
0206 L30:
0206 .dbline 99
0206 L25:
0206 .dbline 85
0206 D8CF rjmp L28
0208 X3:
0208 .dbline -2
0208 .dbline 100
0208 ; Display(Data);
0208 ; CNT=0;CNT1=0;CNT2=0;}} //清除捕获值及捕获差值
0208 ; }
0208 L23:
0208 .dbline 0 ; func end
0208 0895 ret
020A .dbsym r i 20 c
020A .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\复件基~1\CCapature.c
0000 _CNT2::
0000 .blkb 2
0002 .dbsym e CNT2 _CNT2 i
0002 _CNT1::
0002 .blkb 2
0004 .dbsym e CNT1 _CNT1 i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -