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