📄 counter.lst
字号:
(0359)
(0360) // compare bit no HI, start
(0361) // doing some useful work
(0362)
(0363)
(0364) while (1)
(0365) {
(0366) // try a capture at min gate
(0367) capture(500); // 1 mS
0159 EF04 LDI R16,0xF4
015A E011 LDI R17,1
015B DFAF RCALL _capture
(0368) // get the data
(0369) count = read_counters();
015C DF7B RCALL _read_counters
015D 831D STD Y+5,R17
015E 830C STD Y+4,R16
(0370) dp = 3; // decimal point
015F E083 LDI R24,3
0160 838E STD Y+6,R24
(0371) ms = 2; // indicate MHz
0161 E082 LDI R24,2
0162 2EA8 MOV R10,R24
(0372)
(0373) if (count < 4096) // less than 4.096 MHz
0163 818C LDD R24,Y+4
0164 819D LDD R25,Y+5
0165 3080 CPI R24,0
0166 E1E0 LDI R30,0x10
0167 079E CPC R25,R30
0168 F548 BCC 0x0192
(0374) {
(0375) // try a capture at next gate value
(0376) capture(5000); // 10 mS
0169 E808 LDI R16,0x88
016A E113 LDI R17,0x13
016B DF9F RCALL _capture
(0377) // get the data
(0378) count = read_counters();
016C DF6B RCALL _read_counters
016D 831D STD Y+5,R17
016E 830C STD Y+4,R16
(0379) dp = 4; // decimal point
016F E084 LDI R24,4
0170 838E STD Y+6,R24
(0380) ms = 2; // indicate MHz
0171 E082 LDI R24,2
0172 2EA8 MOV R10,R24
(0381)
(0382) if (count < 4096) // less than 409.6 kHz
0173 818C LDD R24,Y+4
0174 819D LDD R25,Y+5
0175 3080 CPI R24,0
0176 E1E0 LDI R30,0x10
0177 079E CPC R25,R30
0178 F4C8 BCC 0x0192
(0383) {
(0384) // try a capture at next gate value
(0385) capture(50000); // 100 mS
0179 E500 LDI R16,0x50
017A EC13 LDI R17,0xC3
017B DF8F RCALL _capture
(0386) // get the data
(0387) count = read_counters();
017C DF5B RCALL _read_counters
017D 831D STD Y+5,R17
017E 830C STD Y+4,R16
(0388) dp = 3; // decimal point
017F E083 LDI R24,3
0180 838E STD Y+6,R24
(0389) ms = 1; // indicate kHz
0181 24AA CLR R10
0182 94A3 INC R10
(0390)
(0391) if (count < 4096) // less than 40.96 kHz
0183 818C LDD R24,Y+4
0184 819D LDD R25,Y+5
0185 3080 CPI R24,0
0186 E1E0 LDI R30,0x10
0187 079E CPC R25,R30
0188 F448 BCC 0x0192
(0392) {
(0393) // try a capture at next gate value
(0394) capture(15625); // 1 S
0189 E009 LDI R16,0x9
018A E31D LDI R17,0x3D
018B DF7F RCALL _capture
(0395) // get the data
(0396) count = read_counters();
018C DF4B RCALL _read_counters
018D 831D STD Y+5,R17
018E 830C STD Y+4,R16
(0397) dp = 0; // decimal point
018F 2400 CLR R0
0190 820E STD Y+6,R0
(0398) ms = 0; // indicate Hz
0191 24AA CLR R10
(0399) }
(0400) }
(0401) }
(0402)
(0403) // convert BINARY counter_value (int) to BCD in led_value (long)
(0404) lv = 0;
0192 E040 LDI R20,0
0193 E050 LDI R21,0
0194 E060 LDI R22,0
0195 E070 LDI R23,0
0196 2FEC MOV R30,R28
0197 2FFD MOV R31,R29
0198 8340 STD Z+0,R20
0199 8351 STD Z+1,R21
019A 8362 STD Z+2,R22
019B 8373 STD Z+3,R23
(0405) for (j=0;j<8;j++)
019C 24CC CLR R12
019D 24DD CLR R13
(0406) {
(0407) i = count % 10;
019E E02A LDI R18,0xA
019F E030 LDI R19,0
01A0 810C LDD R16,Y+4
01A1 811D LDD R17,Y+5
01A2 D05D RCALL mod16u
01A3 2EE0 MOV R14,R16
01A4 2EF1 MOV R15,R17
(0408) lv >>= 4;
01A5 E084 LDI R24,4
01A6 E090 LDI R25,0
01A7 2FEC MOV R30,R28
01A8 2FFD MOV R31,R29
01A9 8020 LDD R2,Z+0
01AA 8031 LDD R3,Z+1
01AB 8042 LDD R4,Z+2
01AC 8053 LDD R5,Z+3
01AD 938A ST R24,-Y
01AE 2D02 MOV R16,R2
01AF 2D13 MOV R17,R3
01B0 2D24 MOV R18,R4
01B1 2D35 MOV R19,R5
01B2 D0A9 RCALL lsr32
01B3 2FEC MOV R30,R28
01B4 2FFD MOV R31,R29
01B5 8300 STD Z+0,R16
01B6 8311 STD Z+1,R17
01B7 8322 STD Z+2,R18
01B8 8333 STD Z+3,R19
(0409) lv |= ((unsigned long)i << 28);
01B9 E18C LDI R24,0x1C
01BA E090 LDI R25,0
01BB 2C2E MOV R2,R14
01BC 2C3F MOV R3,R15
01BD 2444 CLR R4
01BE FC37 SBRC R3,7
01BF 9440 COM R4
01C0 2455 CLR R5
01C1 FC47 SBRC R4,7
01C2 9450 COM R5
01C3 938A ST R24,-Y
01C4 2D02 MOV R16,R2
01C5 2D13 MOV R17,R3
01C6 2D24 MOV R18,R4
01C7 2D35 MOV R19,R5
01C8 D087 RCALL lsl32
01C9 2FEC MOV R30,R28
01CA 2FFD MOV R31,R29
01CB 8020 LDD R2,Z+0
01CC 8031 LDD R3,Z+1
01CD 8042 LDD R4,Z+2
01CE 8053 LDD R5,Z+3
01CF 2A20 OR R2,R16
01D0 2A31 OR R3,R17
01D1 2A42 OR R4,R18
01D2 2A53 OR R5,R19
01D3 2FEC MOV R30,R28
01D4 2FFD MOV R31,R29
01D5 8220 STD Z+0,R2
01D6 8231 STD Z+1,R3
01D7 8242 STD Z+2,R4
01D8 8253 STD Z+3,R5
(0410) count /= 10;
01D9 E02A LDI R18,0xA
01DA E030 LDI R19,0
01DB 810C LDD R16,Y+4
01DC 811D LDD R17,Y+5
01DD D024 RCALL div16u
01DE 831D STD Y+5,R17
01DF 830C STD Y+4,R16
01E0 2D8C MOV R24,R12
01E1 2D9D MOV R25,R13
01E2 9601 ADIW R24,1
01E3 2EC8 MOV R12,R24
01E4 2ED9 MOV R13,R25
01E5 3088 CPI R24,0x8
01E6 E0E0 LDI R30,0
01E7 079E CPC R25,R30
01E8 F40C BGE 0x01EA
01E9 CFB4 RJMP 0x019E
(0411) }
(0412)
(0413) // set display variables
(0414) decimal_point = dp;
01EA 800E LDD R0,Y+6
01EB 92000072 STS 0x72,R0
(0415) mode_setting = ms;
01ED 92A00073 STS 0x73,R10
(0416) led_value = lv;
01EF 2FEC MOV R30,R28
01F0 2FFD MOV R31,R29
01F1 8020 LDD R2,Z+0
01F2 8031 LDD R3,Z+1
01F3 8042 LDD R4,Z+2
01F4 8053 LDD R5,Z+3
01F5 9230006F STS 0x6F,R3
01F7 9220006E STS 0x6E,R2
01F9 92500071 STS 0x71,R5
01FB 92400070 STS 0x70,R4
01FD CF5B RJMP 0x0159
(0417)
(0418) } // loop
(0419)
(0420) }
FILE: <library>
01FE 9627 ADIW R28,7
01FF 9508 RET
mod16u:
0200 9468 BSET 6
0201 C001 RJMP xdiv16u
div16u:
0202 94E8 BCLR 6
xdiv16u:
0203 92EA ST R14,-Y
0204 92FA ST R15,-Y
0205 938A ST R24,-Y
0206 24EE CLR R14
0207 24FF CLR R15
0208 E180 LDI R24,0x10
0209 0F00 LSL R16
020A 1F11 ROL R17
020B 1CEE ROL R14
020C 1CFF ROL R15
020D 16E2 CP R14,R18
020E 06F3 CPC R15,R19
020F F018 BCS 0x0213
0210 1AE2 SUB R14,R18
0211 0AF3 SBC R15,R19
0212 9503 INC R16
0213 958A DEC R24
0214 F7A1 BNE 0x0209
0215 F416 BRTC 0x0218
0216 2D0E MOV R16,R14
0217 2D1F MOV R17,R15
0218 9189 LD R24,Y+
0219 90F9 LD R15,Y+
021A 90E9 LD R14,Y+
021B 9508 RET
mod8u:
021C 9468 BSET 6
021D C001 RJMP xdiv8u
div8u:
021E 94E8 BCLR 6
xdiv8u:
021F 932A ST R18,-Y
0220 92FA ST R15,-Y
0221 92EA ST R14,-Y
0222 24FF CLR R15
0223 24EE CLR R14
0224 E120 LDI R18,0x10
0225 0F00 LSL R16
0226 1CFF ROL R15
0227 1CEE ROL R14
0228 16E1 CP R14,R17
0229 F010 BCS 0x022C
022A 1AE1 SUB R14,R17
022B 9503 INC R16
022C 952A DEC R18
022D F7B9 BNE 0x0225
022E F40E BRTC 0x0230
022F 2D0E MOV R16,R14
0230 90E9 LD R14,Y+
0231 90F9 LD R15,Y+
0232 9129 LD R18,Y+
0233 9508 RET
pop_gset2:
0234 E0E2 LDI R30,2
0235 C004 RJMP pop
push_gset1:
0236 935A ST R21,-Y
0237 934A ST R20,-Y
0238 9508 RET
pop_gset1:
0239 E0E1 LDI R30,1
pop:
023A 9149 LD R20,Y+
023B 9159 LD R21,Y+
023C FDE0 SBRC R30,0
023D 9508 RET
023E 9169 LD R22,Y+
023F 9179 LD R23,Y+
0240 FDE1 SBRC R30,1
0241 9508 RET
0242 90A9 LD R10,Y+
0243 90B9 LD R11,Y+
0244 FDE2 SBRC R30,2
0245 9508 RET
0246 90C9 LD R12,Y+
0247 90D9 LD R13,Y+
0248 FDE3 SBRC R30,3
0249 9508 RET
024A 90E9 LD R14,Y+
024B 90F9 LD R15,Y+
024C 9508 RET
push_gset2:
024D 937A ST R23,-Y
024E 936A ST R22,-Y
024F CFE6 RJMP push_gset1
lsl32:
0250 920F PUSH R0
0251 9009 LD R0,Y+
0252 2000 TST R0
0253 F031 BEQ 0x025A
0254 0F00 LSL R16
0255 1F11 ROL R17
0256 1F22 ROL R18
0257 1F33 ROL R19
0258 940A DEC R0
0259 CFF8 RJMP 0x0252
025A 900F POP R0
025B 9508 RET
lsr32:
025C 920F PUSH R0
025D 9009 LD R0,Y+
025E 2000 TST R0
025F F031 BEQ 0x0266
0260 9536 LSR R19
0261 9527 ROR R18
0262 9517 ROR R17
0263 9507 ROR R16
0264 940A DEC R0
0265 CFF8 RJMP 0x025E
0266 900F POP R0
0267 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -