⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 counter.lst

📁 本文给出了频率计的一般设计方法及软件的如何编码
💻 LST
📖 第 1 页 / 共 3 页
字号:
(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 + -