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

📄 pro.lst

📁 数字频率计数字频率计数字频率计数字频率计
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0094)    }
    0249 9029      LD	R2,Y+
    024A BE2F      OUT	0x3F,R2
    024B 9199      LD	R25,Y+
    024C 9189      LD	R24,Y+
    024D 9029      LD	R2,Y+
    024E 9518      RETI
(0095) }
(0096) 
(0097) //定时T1初始化
(0098) void timer1_init(void)
(0099) {
(0100)  TCCR1B = 0x00;//停止定时器
_timer1_init:
    024F 2422      CLR	R2
    0250 BC2E      OUT	0x2E,R2
(0101)  TIMSK |= 0x04;//中断允许
    0251 B789      IN	R24,0x39
    0252 6084      ORI	R24,4
    0253 BF89      OUT	0x39,R24
(0102)  TCNT1H = 0x00;
    0254 BC2D      OUT	0x2D,R2
(0103)  TCNT1L = 0x00;//初始值
    0255 BC2C      OUT	0x2C,R2
(0104)  OCR1AH = 0xFF;
    0256 EF8F      LDI	R24,0xFF
    0257 BD8B      OUT	0x2B,R24
(0105)  OCR1AL = 0xFF;//匹配A值
    0258 BD8A      OUT	0x2A,R24
(0106)  OCR1BH = 0xFF;
    0259 BD89      OUT	0x29,R24
(0107)  OCR1BL = 0xFF;//匹配B值
    025A BD88      OUT	0x28,R24
(0108)  ICR1H  = 0xFF;
    025B BD87      OUT	0x27,R24
(0109)  ICR1L  = 0xFF;//输入捕捉匹配值
    025C BD86      OUT	0x26,R24
(0110)  TCCR1A = 0x0C;
    025D E08C      LDI	R24,0xC
    025E BD8F      OUT	0x2F,R24
(0111)  TCCR1B = 0x06;//启动定时器
    025F E086      LDI	R24,6
    0260 BD8E      OUT	0x2E,R24
    0261 9508      RET
_timer1_ovf_isr:
    0262 938A      ST	R24,-Y
    0263 B78F      IN	R24,0x3F
    0264 938A      ST	R24,-Y
(0112) }
(0113) 
(0114) 
(0115) //定时器T1溢出中断服务程序
(0116) #pragma interrupt_handler timer1_ovf_isr:9
(0117) void timer1_ovf_isr(void)
(0118) {
(0119) // TCNT1H = 0x00; //重装值高位
(0120) // TCNT1L = 0x00; //重装值低位
(0121)  T1_OV_Times=1;
    0265 E081      LDI	R24,1
    0266 93800081  STS	T1_OV_Times,R24
    0268 9189      LD	R24,Y+
    0269 BF8F      OUT	0x3F,R24
    026A 9189      LD	R24,Y+
    026B 9518      RETI
(0122) }
(0123) 
(0124) //定时器T2初始化
(0125) void timer2_init(void)
(0126) {
(0127)  TCCR2  = 0x00;//停止定时器
_timer2_init:
    026C 2422      CLR	R2
    026D BC25      OUT	0x25,R2
(0128)  ASSR   = 0x08;//异步时钟模式
    026E E088      LDI	R24,0x8
    026F BD82      OUT	0x22,R24
(0129)  TCNT2  = 0x80;//初始值
    0270 E880      LDI	R24,0x80
    0271 BD84      OUT	0x24,R24
(0130)  OCR2   = 0x7F;//匹配值
    0272 E78F      LDI	R24,0x7F
    0273 BD83      OUT	0x23,R24
(0131)  TIMSK |= 0x40;//中断允许
    0274 B789      IN	R24,0x39
    0275 6480      ORI	R24,0x40
    0276 BF89      OUT	0x39,R24
(0132)  TCCR2  = 0x06;//启动定时器
    0277 E086      LDI	R24,6
    0278 BD85      OUT	0x25,R24
    0279 9508      RET
_timer2_ovf_isr:
    027A 922A      ST	R2,-Y
    027B 923A      ST	R3,-Y
    027C 924A      ST	R4,-Y
    027D 925A      ST	R5,-Y
    027E 926A      ST	R6,-Y
    027F 927A      ST	R7,-Y
    0280 928A      ST	R8,-Y
    0281 929A      ST	R9,-Y
    0282 930A      ST	R16,-Y
    0283 931A      ST	R17,-Y
    0284 932A      ST	R18,-Y
    0285 933A      ST	R19,-Y
    0286 938A      ST	R24,-Y
    0287 939A      ST	R25,-Y
    0288 93AA      ST	R26,-Y
    0289 93BA      ST	R27,-Y
    028A 93EA      ST	R30,-Y
    028B B62F      IN	R2,0x3F
    028C 922A      ST	R2,-Y
    028D 940E064C  CALL	push_gset2
(0133) }
(0134) 
(0135) uchar second_is_ok=0;
(0136) //T2溢出中断服务程序
(0137) 
(0138) #pragma interrupt_handler timer2_ovf_isr:5
(0139) void timer2_ovf_isr(void)
(0140) {
(0141)  
(0142)  TCCR1B = 0x00;//停止定时器
    028F 2422      CLR	R2
    0290 BC2E      OUT	0x2E,R2
(0143)  PORTB &=~(1<<PB0);  //关闭闸门
    0291 98C0      CBI	0x18,0
(0144)  second_is_ok=1;
    0292 E081      LDI	R24,1
    0293 93800084  STS	second_is_ok,R24
(0145)  value=TCNT1L;
    0295 B42C      IN	R2,0x2C
    0296 2433      CLR	R3
    0297 2444      CLR	R4
    0298 2455      CLR	R5
    0299 9230006E  STS	value+1,R3
    029B 9220006D  STS	value,R2
    029D 92500070  STS	value+3,R5
    029F 9240006F  STS	value+2,R4
(0146)  value|=(TCNT1H << 8); //然后读高位
    02A1 B42D      IN	R2,0x2D
    02A2 2433      CLR	R3
    02A3 2C32      MOV	R3,R2
    02A4 2422      CLR	R2
    02A5 2444      CLR	R4
    02A6 FC37      SBRC	R3,7
    02A7 9440      COM	R4
    02A8 2455      CLR	R5
    02A9 FC47      SBRC	R4,7
    02AA 9450      COM	R5
    02AB 9080006F  LDS	R8,value+2
    02AD 90900070  LDS	R9,value+3
    02AF 9060006D  LDS	R6,value
    02B1 9070006E  LDS	R7,value+1
    02B3 2862      OR	R6,R2
    02B4 2873      OR	R7,R3
    02B5 2884      OR	R8,R4
    02B6 2895      OR	R9,R5
    02B7 9270006E  STS	value+1,R7
    02B9 9260006D  STS	value,R6
    02BB 92900070  STS	value+3,R9
    02BD 9280006F  STS	value+2,R8
(0147)   //读取计数值
(0148) Freq_H16=value;
    02BF 0113      MOVW	R2,R6
    02C0 0124      MOVW	R4,R8
    02C1 92300076  STS	Freq_H16+1,R3
    02C3 92200075  STS	Freq_H16,R2
    02C5 92500078  STS	Freq_H16+3,R5
    02C7 92400077  STS	Freq_H16+2,R4
(0149) counter=Freq_H16;
    02C9 90400077  LDS	R4,Freq_H16+2
    02CB 90500078  LDS	R5,Freq_H16+3
    02CD 90200075  LDS	R2,Freq_H16
    02CF 90300076  LDS	R3,Freq_H16+1
    02D1 9230007E  STS	counter+1,R3
    02D3 9220007D  STS	counter,R2
    02D5 92500080  STS	counter+3,R5
    02D7 9240007F  STS	counter+2,R4
(0150) Freq_H16 =Freq_H16*256;
    02D9 E040      LDI	R20,0
    02DA E051      LDI	R21,1
    02DB E060      LDI	R22,0
    02DC E070      LDI	R23,0
    02DD 925A      ST	R5,-Y
    02DE 924A      ST	R4,-Y
    02DF 923A      ST	R3,-Y
    02E0 922A      ST	R2,-Y
    02E1 018A      MOVW	R16,R20
    02E2 019B      MOVW	R18,R22
    02E3 940E0610  CALL	empy32s
    02E5 93100076  STS	Freq_H16+1,R17
    02E7 93000075  STS	Freq_H16,R16
    02E9 93300078  STS	Freq_H16+3,R19
    02EB 93200077  STS	Freq_H16+2,R18
(0151) 
(0152) Freq_L8 =(PIND & 0b11111111);    //读取计数值的低8位
    02ED B380      IN	R24,0x10
    02EE 2799      CLR	R25
    02EF 7090      ANDI	R25,0
    02F0 011C      MOVW	R2,R24
    02F1 2444      CLR	R4
    02F2 FC37      SBRC	R3,7
    02F3 9440      COM	R4
    02F4 2455      CLR	R5
    02F5 FC47      SBRC	R4,7
    02F6 9450      COM	R5
    02F7 9230007A  STS	Freq_L8+1,R3
    02F9 92200079  STS	Freq_L8,R2
    02FB 9250007C  STS	Freq_L8+3,R5
    02FD 9240007B  STS	Freq_L8+2,R4
(0153) Freq=Freq_H16+Freq_L8;
    02FF 0138      MOVW	R6,R16
    0300 0149      MOVW	R8,R18
    0301 0C62      ADD	R6,R2
    0302 1C73      ADC	R7,R3
    0303 1C84      ADC	R8,R4
    0304 1C95      ADC	R9,R5
    0305 92700072  STS	Freq+1,R7
    0307 92600071  STS	Freq,R6
    0309 92900074  STS	Freq+3,R9
    030B 92800073  STS	Freq+2,R8
(0154)  if(T1_OV_Times !=0)
    030D 90200081  LDS	R2,T1_OV_Times
    030F 2022      TST	R2
    0310 F131      BEQ	0x0337
(0155)  {
(0156)    Freq+=(unsigned long)0xffff*0xff*T1_OV_Times;
    0311 2433      CLR	R3
    0312 2444      CLR	R4
    0313 2455      CLR	R5
    0314 E041      LDI	R20,1
    0315 EF5F      LDI	R21,0xFF
    0316 EF6E      LDI	R22,0xFE
    0317 E070      LDI	R23,0
    0318 925A      ST	R5,-Y
    0319 924A      ST	R4,-Y
    031A 923A      ST	R3,-Y
    031B 922A      ST	R2,-Y
    031C 018A      MOVW	R16,R20
    031D 019B      MOVW	R18,R22
    031E 940E0610  CALL	empy32s
    0320 90400073  LDS	R4,Freq+2
    0322 90500074  LDS	R5,Freq+3
    0324 90200071  LDS	R2,Freq
    0326 90300072  LDS	R3,Freq+1
    0328 0E20      ADD	R2,R16
    0329 1E31      ADC	R3,R17
    032A 1E42      ADC	R4,R18
    032B 1E53      ADC	R5,R19
    032C 92300072  STS	Freq+1,R3
    032E 92200071  STS	Freq,R2
    0330 92500074  STS	Freq+3,R5
    0332 92400073  STS	Freq+2,R4
(0157)    T1_OV_Times=0;
    0334 2422      CLR	R2
    0335 92200081  STS	T1_OV_Times,R2
(0158)  }
(0159)  PORTB |=(1<<PB7);                 //74LS393清零
    0337 9AC7      SBI	0x18,7
(0160)  TCNT1H=0;
    0338 2422      CLR	R2
    0339 BC2D      OUT	0x2D,R2
(0161)  TCNT1L=0;                        //清空T1计数器
    033A BC2C      OUT	0x2C,R2
(0162)  PORTB &=~(1<<PB7);               //使能计数功能
    033B 98C7      CBI	0x18,7
(0163)  PORTB |=(1<<PB0);                //打开闸门
    033C 9AC0      SBI	0x18,0
(0164)  TCNT2 = 0x80;                    //定时时间1秒
    033D E880      LDI	R24,0x80
    033E BD84      OUT	0x24,R24
(0165)  TCCR1B = 0x06;
    033F E086      LDI	R24,6
    0340 BD8E      OUT	0x2E,R24
    0341 940E0640  CALL	pop_gset2
    0343 9029      LD	R2,Y+
    0344 BE2F      OUT	0x3F,R2
    0345 91E9      LD	R30,Y+
    0346 91B9      LD	R27,Y+
    0347 91A9      LD	R26,Y+
    0348 9199      LD	R25,Y+
    0349 9189      LD	R24,Y+
    034A 9139      LD	R19,Y+
    034B 9129      LD	R18,Y+
    034C 9119      LD	R17,Y+
    034D 9109      LD	R16,Y+
    034E 9099      LD	R9,Y+
    034F 9089      LD	R8,Y+
    0350 9079      LD	R7,Y+
    0351 9069      LD	R6,Y+
    0352 9059      LD	R5,Y+
    0353 9049      LD	R4,Y+
    0354 9039      LD	R3,Y+
    0355 9029      LD	R2,Y+
    0356 9518      RETI
_PutChar:
  freq                 --> Y+0
    0357 940E064C  CALL	push_gset2
    0359 9724      SBIW	R28,4
(0166) }
(0167) 
(0168) void PutChar()
(0169) {
(0170)     unsigned long freq=0;
    035A E040      LDI	R20,0
    035B E050      LDI	R21,0
    035C E060      LDI	R22,0
    035D E070      LDI	R23,0
    035E 01FE      MOVW	R30,R28
    035F 8340      STD	Z+0,R20
    0360 8351      STD	Z+1,R21
    0361 8362      STD	Z+2,R22
    0362 8373      STD	Z+3,R23
(0171) 	freq=Freq;
    0363 90400073  LDS	R4,Freq+2
    0365 90500074  LDS	R5,Freq+3
    0367 90200071  LDS	R2,Freq
    0369 90300072  LDS	R3,Freq+1
    036B 01FE      MOVW	R30,R28
    036C 8220      STD	Z+0,R2
    036D 8231      STD	Z+1,R3
    036E 8242      STD	Z+2,R4
    036F 8253      STD	Z+3,R5
(0172)     temp[0]= freq /10000000+0x30;
    0370 E840      LDI	R20,0x80
    0371 E956      LDI	R21,0x96
    0372 E968      LDI	R22,0x98
    0373 E070      LDI	R23,0
    0374 01FE      MOVW	R30,R28
    0375 8020      LDD	R2,Z+0
    0376 8031      LDD	R3,Z+1
    0377 8042      LDD	R4,Z+2
    0378 8053      LDD	R5,Z+3
    0379 937A      ST	R23,-Y
    037A 936A      ST	R22,-Y
    037B 935A      ST	R21,-Y
    037C 934A      ST	R20,-Y
    037D 0181      MOVW	R16,R2
    037E 0192      MOVW	R18,R4
    037F 940E0577  CALL	div32u
    0381 0118      MOVW	R2,R16
    0382 0129      MOVW	R4,R18
    0383 E340      LDI	R20,0x30
    0384 E050      LDI	R21,0
    0385 E060      LDI	R22,0
    0386 E070      LDI	R23,0
    0387 0E24      ADD	R2,R20
    0388 1E35      ADC	R3,R21
    0389 1E46      ADC	R4,R22
    038A 1E57      ADC	R5,R23
    038B 922000C0  STS	temp,R2
(0173)     freq = freq %10000000;
    038D E840      LDI	R20,0x80
    038E E956      LDI	R21,0x96
    038F E968      LDI	R22,0x98
    0390 E070      LDI	R23,0
    0391 01FE      MOVW	R30,R28
    0392 8020      LDD	R2,Z+0
    0393 8031      LDD	R3,Z+1
    0394 8042      LDD	R4,Z+2
    0395 8053      LDD	R5,Z+3
    0396 937A      ST	R23,-Y
    0397 936A      ST	R22,-Y
    0398 935A      ST	R21,-Y
    0399 934A      ST	R20,-Y
    039A 0181      MOVW	R16,R2
    039B 0192      MOVW	R18,R4
    039C 940E0579  CALL	mod32u
    039E 01FE      MOVW	R30,R28
    039F 8300      STD	Z+0,R16
    03A0 8311      STD	Z+1,R17
    03A1 8322      STD	Z+2,R18
    03A2 8333      STD	Z+3,R19
(0174)     temp[1]=freq  /1000000+0x30;
    03A3 E440      LDI	R20,0x40
    03A4 E452      LDI	R21,0x42
    03A5 E06F      LDI	R22,0xF
    03A6 E070      LDI	R23,0
    03A7 01FE      MOVW	R30,R28
    03A8 8020      LDD	R2,Z+0
    03A9 8031      LDD	R3,Z+1
    03AA 8042      LDD	R4,Z+2
    03AB 8053      LDD	R5,Z+3
    03AC 937A      ST	R23,-Y
    03AD 936A      ST	R22,-Y
    03AE 935A      ST	R21,-Y
    03AF 934A      ST	R20,-Y
    03B0 0181      MOVW	R16,R2
    03B1 0192      MOVW	R18,R4
    03B2 940E0577  CALL	div32u
    03B4 0118      MOVW	R2,R16
    03B5 0129      MOVW	R4,R18
    03B6 E340      LDI	R20,0x30
    03B7 E050      LDI	R21,0
    03B8 E060      LDI	R22,0
    03B9 E070      LDI	R23,0
    03BA 0E24      ADD	R2,R20
    03BB 1E35      ADC	R3,R21
    03BC 1E46      ADC	R4,R22
    03BD 1E57      ADC	R5,R23
    03BE 922000C1  STS	temp+1,R2
(0175)     freq  =freq  %1000000;
    03C0 E440      LDI	R20,0x40
    03C1 E452      LDI	R21,0x42
    03C2 E06F      LDI	R22,0xF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -