📄 pro.lis
字号:
00F6 9A93 st -y,R25
00F8 2FB6 in R2,0x3f
00FA 2A92 st -y,R2
00FC .dbline -1
00FC .dbline 88
00FC .dbline 90
00FC 80912300 lds R24,_count
0100 8F5F subi R24,255 ; addi 1
0102 282E mov R2,R24
0104 20922300 sts _count,R2
0108 8530 cpi R24,5
010A 30F0 brlo L19
010C .dbline 91
010C .dbline 92
010C 81E0 ldi R24,1
010E 80932200 sts _display_is_ok,R24
0112 .dbline 93
0112 2224 clr R2
0114 20922300 sts _count,R2
0118 .dbline 94
0118 L19:
0118 .dbline -2
0118 L18:
0118 2990 ld R2,y+
011A 2FBE out 0x3f,R2
011C 9991 ld R25,y+
011E 8991 ld R24,y+
0120 2990 ld R2,y+
0122 .dbline 0 ; func end
0122 1895 reti
0124 .dbend
0124 .dbfunc e timer1_init _timer1_init fV
.even
0124 _timer1_init::
0124 .dbline -1
0124 .dbline 99
0124 ; }
0124 ;
0124 ; uchar display_is_ok=0;
0124 ; uchar count=0;
0124 ; //T0比较中断服务程序
0124 ; #pragma interrupt_handler timer0_comp_isr:20
0124 ; void timer0_comp_isr(void)
0124 ; {
0124 ; //中断发生时刻在TCNT0=OCR0]
0124 ; if(++count >=5)
0124 ; {
0124 ; display_is_ok=1;
0124 ; count=0;
0124 ; }
0124 ; }
0124 ;
0124 ; //定时T1初始化
0124 ; void timer1_init(void)
0124 ; {
0124 .dbline 100
0124 ; TCCR1B = 0x00;//停止定时器
0124 2224 clr R2
0126 2EBC out 0x2e,R2
0128 .dbline 101
0128 ; TIMSK |= 0x04;//中断允许
0128 89B7 in R24,0x39
012A 8460 ori R24,4
012C 89BF out 0x39,R24
012E .dbline 102
012E ; TCNT1H = 0x00;
012E 2DBC out 0x2d,R2
0130 .dbline 103
0130 ; TCNT1L = 0x00;//初始值
0130 2CBC out 0x2c,R2
0132 .dbline 104
0132 ; OCR1AH = 0xFF;
0132 8FEF ldi R24,255
0134 8BBD out 0x2b,R24
0136 .dbline 105
0136 ; OCR1AL = 0xFF;//匹配A值
0136 8ABD out 0x2a,R24
0138 .dbline 106
0138 ; OCR1BH = 0xFF;
0138 89BD out 0x29,R24
013A .dbline 107
013A ; OCR1BL = 0xFF;//匹配B值
013A 88BD out 0x28,R24
013C .dbline 108
013C ; ICR1H = 0xFF;
013C 87BD out 0x27,R24
013E .dbline 109
013E ; ICR1L = 0xFF;//输入捕捉匹配值
013E 86BD out 0x26,R24
0140 .dbline 110
0140 ; TCCR1A = 0x0C;
0140 8CE0 ldi R24,12
0142 8FBD out 0x2f,R24
0144 .dbline 111
0144 ; TCCR1B = 0x06;//启动定时器
0144 86E0 ldi R24,6
0146 8EBD out 0x2e,R24
0148 .dbline -2
0148 L21:
0148 .dbline 0 ; func end
0148 0895 ret
014A .dbend
.area vector(rom, abs)
.org 32
0020 0C94A500 jmp _timer1_ovf_isr
.area text(rom, con, rel)
014A .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
014A .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
014A _timer1_ovf_isr::
014A 8A93 st -y,R24
014C 8FB7 in R24,0x3f
014E 8A93 st -y,R24
0150 .dbline -1
0150 .dbline 118
0150 ; }
0150 ;
0150 ;
0150 ; //定时器T1溢出中断服务程序
0150 ; #pragma interrupt_handler timer1_ovf_isr:9
0150 ; void timer1_ovf_isr(void)
0150 ; {
0150 .dbline 121
0150 ; // TCNT1H = 0x00; //重装值高位
0150 ; // TCNT1L = 0x00; //重装值低位
0150 ; T1_OV_Times=1;
0150 81E0 ldi R24,1
0152 80932100 sts _T1_OV_Times,R24
0156 .dbline -2
0156 L22:
0156 8991 ld R24,y+
0158 8FBF out 0x3f,R24
015A 8991 ld R24,y+
015C .dbline 0 ; func end
015C 1895 reti
015E .dbend
015E .dbfunc e timer2_init _timer2_init fV
.even
015E _timer2_init::
015E .dbline -1
015E .dbline 126
015E ; }
015E ;
015E ; //定时器T2初始化
015E ; void timer2_init(void)
015E ; {
015E .dbline 127
015E ; TCCR2 = 0x00;//停止定时器
015E 2224 clr R2
0160 25BC out 0x25,R2
0162 .dbline 128
0162 ; ASSR = 0x08;//异步时钟模式
0162 88E0 ldi R24,8
0164 82BD out 0x22,R24
0166 .dbline 129
0166 ; TCNT2 = 0x80;//初始值
0166 80E8 ldi R24,128
0168 84BD out 0x24,R24
016A .dbline 130
016A ; OCR2 = 0x7F;//匹配值
016A 8FE7 ldi R24,127
016C 83BD out 0x23,R24
016E .dbline 131
016E ; TIMSK |= 0x40;//中断允许
016E 89B7 in R24,0x39
0170 8064 ori R24,64
0172 89BF out 0x39,R24
0174 .dbline 132
0174 ; TCCR2 = 0x06;//启动定时器
0174 86E0 ldi R24,6
0176 85BD out 0x25,R24
0178 .dbline -2
0178 L23:
0178 .dbline 0 ; func end
0178 0895 ret
017A .dbend
.area data(ram, con, rel)
0024 .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
0024 _second_is_ok::
0024 .blkb 1
.area idata
0024 00 .byte 0
.area data(ram, con, rel)
0025 .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
0025 .dbsym e second_is_ok _second_is_ok c
.area vector(rom, abs)
.org 16
0010 0C94BD00 jmp _timer2_ovf_isr
.area data(ram, con, rel)
0025 .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
.area text(rom, con, rel)
017A .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
017A .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
017A _timer2_ovf_isr::
017A 2A92 st -y,R2
017C 3A92 st -y,R3
017E 4A92 st -y,R4
0180 5A92 st -y,R5
0182 6A92 st -y,R6
0184 7A92 st -y,R7
0186 8A92 st -y,R8
0188 9A92 st -y,R9
018A 0A93 st -y,R16
018C 1A93 st -y,R17
018E 2A93 st -y,R18
0190 3A93 st -y,R19
0192 8A93 st -y,R24
0194 9A93 st -y,R25
0196 AA93 st -y,R26
0198 BA93 st -y,R27
019A EA93 st -y,R30
019C 2FB6 in R2,0x3f
019E 2A92 st -y,R2
01A0 0E940000 xcall push_gset2
01A4 .dbline -1
01A4 .dbline 140
01A4 ; }
01A4 ;
01A4 ; uchar second_is_ok=0;
01A4 ; //T2溢出中断服务程序
01A4 ;
01A4 ; #pragma interrupt_handler timer2_ovf_isr:5
01A4 ; void timer2_ovf_isr(void)
01A4 ; {
01A4 .dbline 142
01A4 ;
01A4 ; TCCR1B = 0x00;//停止定时器
01A4 2224 clr R2
01A6 2EBC out 0x2e,R2
01A8 .dbline 143
01A8 ; PORTB &=~(1<<PB0); //关闭闸门
01A8 C098 cbi 0x18,0
01AA .dbline 144
01AA ; second_is_ok=1;
01AA 81E0 ldi R24,1
01AC 80932400 sts _second_is_ok,R24
01B0 .dbline 145
01B0 ; value=TCNT1L;
01B0 2CB4 in R2,0x2c
01B2 3324 clr R3
01B4 4424 clr R4
01B6 5524 clr R5
01B8 30920E00 sts _value+1,R3
01BC 20920D00 sts _value,R2
01C0 50921000 sts _value+2+1,R5
01C4 40920F00 sts _value+2,R4
01C8 .dbline 146
01C8 ; value|=(TCNT1H << 8); //然后读高位
01C8 2DB4 in R2,0x2d
01CA 3324 clr R3
01CC 322C mov R3,R2
01CE 2224 clr R2
01D0 4424 clr R4
01D2 37FC sbrc R3,7
01D4 4094 com R4
01D6 5524 clr R5
01D8 47FC sbrc R4,7
01DA 5094 com R5
01DC 80900F00 lds R8,_value+2
01E0 90901000 lds R9,_value+2+1
01E4 60900D00 lds R6,_value
01E8 70900E00 lds R7,_value+1
01EC 6228 or R6,R2
01EE 7328 or R7,R3
01F0 8428 or R8,R4
01F2 9528 or R9,R5
01F4 70920E00 sts _value+1,R7
01F8 60920D00 sts _value,R6
01FC 90921000 sts _value+2+1,R9
0200 80920F00 sts _value+2,R8
0204 .dbline 148
0204 ; //读取计数值
0204 ; Freq_H16=value;
0204 1301 movw R2,R6
0206 2401 movw R4,R8
0208 30921600 sts _Freq_H16+1,R3
020C 20921500 sts _Freq_H16,R2
0210 50921800 sts _Freq_H16+2+1,R5
0214 40921700 sts _Freq_H16+2,R4
0218 .dbline 149
0218 ; counter=Freq_H16;
0218 40901700 lds R4,_Freq_H16+2
021C 50901800 lds R5,_Freq_H16+2+1
0220 20901500 lds R2,_Freq_H16
0224 30901600 lds R3,_Freq_H16+1
0228 30921E00 sts _counter+1,R3
022C 20921D00 sts _counter,R2
0230 50922000 sts _counter+2+1,R5
0234 40921F00 sts _counter+2,R4
0238 .dbline 150
0238 ; Freq_H16 =Freq_H16*256;
0238 40E0 ldi R20,0
023A 51E0 ldi R21,1
023C 60E0 ldi R22,0
023E 70E0 ldi R23,0
0240 5A92 st -y,R5
0242 4A92 st -y,R4
0244 3A92 st -y,R3
0246 2A92 st -y,R2
0248 8A01 movw R16,R20
024A 9B01 movw R18,R22
024C 0E940000 xcall empy32s
0250 10931600 sts _Freq_H16+1,R17
0254 00931500 sts _Freq_H16,R16
0258 30931800 sts _Freq_H16+2+1,R19
025C 20931700 sts _Freq_H16+2,R18
0260 .dbline 152
0260 ;
0260 ; Freq_L8 =(PIND & 0b11111111); //读取计数值的低8位
0260 80B3 in R24,0x10
0262 9927 clr R25
0264 9070 andi R25,0
0266 1C01 movw R2,R24
0268 4424 clr R4
026A 37FC sbrc R3,7
026C 4094 com R4
026E 5524 clr R5
0270 47FC sbrc R4,7
0272 5094 com R5
0274 30921A00 sts _Freq_L8+1,R3
0278 20921900 sts _Freq_L8,R2
027C 50921C00 sts _Freq_L8+2+1,R5
0280 40921B00 sts _Freq_L8+2,R4
0284 .dbline 153
0284 ; Freq=Freq_H16+Freq_L8;
0284 3801 movw R6,R16
0286 4901 movw R8,R18
0288 620C add R6,R2
028A 731C adc R7,R3
028C 841C adc R8,R4
028E 951C adc R9,R5
0290 70921200 sts _Freq+1,R7
0294 60921100 sts _Freq,R6
0298 90921400 sts _Freq+2+1,R9
029C 80921300 sts _Freq+2,R8
02A0 .dbline 154
02A0 ; if(T1_OV_Times !=0)
02A0 20902100 lds R2,_T1_OV_Times
02A4 2220 tst R2
02A6 31F1 breq L25
02A8 .dbline 155
02A8 ; {
02A8 .dbline 156
02A8 ; Freq+=(unsigned long)0xffff*0xff*T1_OV_Times;
02A8 3324 clr R3
02AA 4424 clr R4
02AC 5524 clr R5
02AE 41E0 ldi R20,1
02B0 5FEF ldi R21,255
02B2 6EEF ldi R22,254
02B4 70E0 ldi R23,0
02B6 5A92 st -y,R5
02B8 4A92 st -y,R4
02BA 3A92 st -y,R3
02BC 2A92 st -y,R2
02BE 8A01 movw R16,R20
02C0 9B01 movw R18,R22
02C2 0E940000 xcall empy32u
02C6 40901300 lds R4,_Freq+2
02CA 50901400 lds R5,_Freq+2+1
02CE 20901100 lds R2,_Freq
02D2 30901200 lds R3,_Freq+1
02D6 200E add R2,R16
02D8 311E adc R3,R17
02DA 421E adc R4,R18
02DC 531E adc R5,R19
02DE 30921200 sts _Freq+1,R3
02E2 20921100 sts _Freq,R2
02E6 50921400 sts _Freq+2+1,R5
02EA 40921300 sts _Freq+2,R4
02EE .dbline 157
02EE ; T1_OV_Times=0;
02EE 2224 clr R2
02F0 20922100 sts _T1_OV_Times,R2
02F4 .dbline 158
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -