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

📄 countermeter.lst

📁 一个用AVR做出的一个频率计
💻 LST
📖 第 1 页 / 共 3 页
字号:
 230:countermeter.c **** 	//设置PORTB为输出高电平	
 231:countermeter.c **** 	DDRB  = 0XFF;	
 678               	.LM61:
 679 033e 8FEF      		ldi r24,lo8(-1)
 680 0340 8093 3700 		sts 55,r24
 232:countermeter.c ****     PORTB = 0XFF;
 682               	.LM62:
 683 0344 8FEF      		ldi r24,lo8(-1)
 684 0346 8093 3800 		sts 56,r24
 233:countermeter.c **** 	//设置PORTD为输出高电平
 234:countermeter.c **** 	DDRD  = 0XFF;		
 686               	.LM63:
 687 034a 8FEF      		ldi r24,lo8(-1)
 688 034c 8093 3100 		sts 49,r24
 235:countermeter.c ****     PORTD = 0XFF;
 690               	.LM64:
 691 0350 8FEF      		ldi r24,lo8(-1)
 692 0352 8093 3200 		sts 50,r24
 236:countermeter.c ****     
 237:countermeter.c **** 	//设置定时器T0
 238:countermeter.c **** 	// 计数时钟为晶振频率64分频 周期为 = 1/(4000000/64 )-> 16 uS
 239:countermeter.c ****     TCCR0 = (1<<CS01)|(1<<CS00);  //0x03;//
 694               	.LM65:
 695 0356 83E0      		ldi r24,lo8(3)
 696 0358 8093 5300 		sts 83,r24
 240:countermeter.c **** 	//使能定时器T0溢出中断	
 241:countermeter.c ****     TIMSK |= (1<<TOIE0);   
 698               	.LM66:
 699 035c 8091 5900 		lds r24,89
 700 0360 8160      		ori r24,lo8(1)
 701 0362 8093 5900 		sts 89,r24
 242:countermeter.c **** 	//使能全局中断
 243:countermeter.c **** 	sei();
 703               	.LM67:
 704               	/* #APP */
 705 0366 7894      		sei
 244:countermeter.c **** 
 245:countermeter.c **** 
 246:countermeter.c **** /*	输出比较寄存器初值在 fclk/8 (500 kHz, 2 uS) 下的门控值:
 247:countermeter.c **** 	
 248:countermeter.c ****  	  500 	= 1 mS
 249:countermeter.c **** 	 5000 	= 10 mS
 250:countermeter.c **** 	50000	= 100 mS
 251:countermeter.c **** 	
 252:countermeter.c **** 	在 fclk/256 (15.625 kHz, 64 uS) :下的门控值:
 253:countermeter.c **** 	
 254:countermeter.c ****  	15625  	= 1 S
 255:countermeter.c **** */
 256:countermeter.c **** 	// 清零16位计数器T1
 257:countermeter.c ****     TCNT1H = 0;	
 707               	.LM68:
 708               	/* #NOAPP */
 709 0368 1092 4D00 		sts 77,__zero_reg__
 258:countermeter.c ****     TCNT1L = 0;
 711               	.LM69:
 712 036c 1092 4C00 		sts 76,__zero_reg__
 259:countermeter.c **** 	// 设置输出比较寄存器初值为 200
 260:countermeter.c ****     OCR1AH = 0;	
 714               	.LM70:
 715 0370 1092 4B00 		sts 75,__zero_reg__
 261:countermeter.c ****     OCR1AL = 200;
 717               	.LM71:
 718 0374 88EC      		ldi r24,lo8(-56)
 719 0376 8093 4A00 		sts 74,r24
 262:countermeter.c ****     //比较匹配时置位 OC1A/OC1B ( 输出高电平)
 263:countermeter.c ****     TCCR1A = (1<<COM1A1)|(1<<COM1A0);   //0xC0;// 
 721               	.LM72:
 722 037a 80EC      		ldi r24,lo8(-64)
 723 037c 8093 4F00 		sts 79,r24
 264:countermeter.c **** 	//启动定时器T1	
 265:countermeter.c ****     TCCR1B = (1<<CS10);  //0x01;//
 725               	.LM73:
 726 0380 81E0      		ldi r24,lo8(1)
 727 0382 8093 4E00 		sts 78,r24
 728               	.L18:
 266:countermeter.c **** 
 267:countermeter.c **** 	//等待比较匹配标志位置位
 268:countermeter.c ****     while ( ! (unsigned char) ( TIFR & (1<<OCF1A)) );
 730               	.LM74:
 731 0386 8091 5800 		lds r24,88
 732 038a 9927      		clr r25
 733 038c 9295      		swap r25
 734 038e 8295      		swap r24
 735 0390 8F70      		andi r24,0x0f
 736 0392 8927      		eor r24,r25
 737 0394 9F70      		andi r25,0x0f
 738 0396 8927      		eor r24,r25
 739 0398 8170      		andi r24,lo8(1)
 740 039a 9070      		andi r25,hi8(1)
 741 039c 0097      		sbiw r24,0
 742 039e 09F4      		brne .L19
 743 03a0 F2CF      		rjmp .L18
 744               	.L19:
 269:countermeter.c **** 	//清楚标志
 270:countermeter.c ****     TIFR |= (1<< OCF1A);    
 746               	.LM75:
 747 03a2 8091 5800 		lds r24,88
 748 03a6 8061      		ori r24,lo8(16)
 749 03a8 8093 5800 		sts 88,r24
 271:countermeter.c **** 	//定时器T1停止计数
 272:countermeter.c ****     TCCR1B = 0;
 751               	.LM76:
 752 03ac 1092 4E00 		sts 78,__zero_reg__
 753               	.L20:
 273:countermeter.c **** 	// compare bit no HI, start 
 274:countermeter.c **** 	// doing some useful work
 275:countermeter.c **** 	while (1)
 276:countermeter.c **** 	{
 277:countermeter.c **** 		//用最小的门控尝试
 278:countermeter.c **** 		capture(500);		// 1 mS
 755               	.LM77:
 756 03b0 84EF      		ldi r24,lo8(500)
 757 03b2 91E0      		ldi r25,hi8(500)
 758 03b4 0E94 0000 		call capture
 279:countermeter.c **** 		//读取计数值		
 280:countermeter.c **** 		count = read_counters();
 760               	.LM78:
 761 03b8 0E94 0000 		call read_counters
 762 03bc 8B87      		std Y+11,r24
 763 03be 9C87      		std Y+12,r25
 281:countermeter.c **** 		dp = 3;		// 小数点位置
 765               	.LM79:
 766 03c0 83E0      		ldi r24,lo8(3)
 767 03c2 8D83      		std Y+5,r24
 282:countermeter.c **** 		ms = 2;		// 频率单位 MHz
 769               	.LM80:
 770 03c4 82E0      		ldi r24,lo8(2)
 771 03c6 8E83      		std Y+6,r24
 283:countermeter.c **** 		
 284:countermeter.c **** 		if (count < 4096)     // 小于 4.096 MHz
 773               	.LM81:
 774 03c8 8B85      		ldd r24,Y+11
 775 03ca 9C85      		ldd r25,Y+12
 776 03cc 20E1      		ldi r18,hi8(4096)
 777 03ce 8030      		cpi r24,lo8(4096)
 778 03d0 9207      		cpc r25,r18
 779 03d2 70F5      		brsh .L22
 285:countermeter.c **** 		{
 286:countermeter.c **** 			//尝试下一个门控值
 287:countermeter.c **** 			capture(5000);		// 10 mS
 781               	.LM82:
 782 03d4 88E8      		ldi r24,lo8(5000)
 783 03d6 93E1      		ldi r25,hi8(5000)
 784 03d8 0E94 0000 		call capture
 288:countermeter.c **** 			//读取计数值	
 289:countermeter.c **** 			count = read_counters();
 786               	.LM83:
 787 03dc 0E94 0000 		call read_counters
 788 03e0 8B87      		std Y+11,r24
 789 03e2 9C87      		std Y+12,r25
 290:countermeter.c **** 			dp = 4;		// 小数点位置
 791               	.LM84:
 792 03e4 84E0      		ldi r24,lo8(4)
 793 03e6 8D83      		std Y+5,r24
 291:countermeter.c **** 			ms = 2;		// 频率单位 MHz
 795               	.LM85:
 796 03e8 82E0      		ldi r24,lo8(2)
 797 03ea 8E83      		std Y+6,r24
 292:countermeter.c **** 
 293:countermeter.c **** 			if (count < 4096)	// 小于 409.6 kHz
 799               	.LM86:
 800 03ec 8B85      		ldd r24,Y+11
 801 03ee 9C85      		ldd r25,Y+12
 802 03f0 20E1      		ldi r18,hi8(4096)
 803 03f2 8030      		cpi r24,lo8(4096)
 804 03f4 9207      		cpc r25,r18
 805 03f6 E0F4      		brsh .L22
 294:countermeter.c **** 			{
 295:countermeter.c **** 				// 尝试下一个门控值
 296:countermeter.c **** 				capture(50000);	// 100 mS
 807               	.LM87:
 808 03f8 80E5      		ldi r24,lo8(-15536)
 809 03fa 93EC      		ldi r25,hi8(-15536)
 810 03fc 0E94 0000 		call capture
 297:countermeter.c **** 				//读取计数值		
 298:countermeter.c **** 				count = read_counters();
 812               	.LM88:
 813 0400 0E94 0000 		call read_counters
 814 0404 8B87      		std Y+11,r24
 815 0406 9C87      		std Y+12,r25
 299:countermeter.c **** 				dp = 2;		// 小数点位置
 817               	.LM89:
 818 0408 82E0      		ldi r24,lo8(2)
 819 040a 8D83      		std Y+5,r24
 300:countermeter.c **** 				ms = 1;		// 频率单位 kHz
 821               	.LM90:
 822 040c 81E0      		ldi r24,lo8(1)
 823 040e 8E83      		std Y+6,r24
 301:countermeter.c **** 			
 302:countermeter.c **** 				if (count < 4096)	//  小于 40.96 kHz
 825               	.LM91:
 826 0410 8B85      		ldd r24,Y+11
 827 0412 9C85      		ldd r25,Y+12
 828 0414 20E1      		ldi r18,hi8(4096)
 829 0416 8030      		cpi r24,lo8(4096)
 830 0418 9207      		cpc r25,r18
 831 041a 50F4      		brsh .L22
 303:countermeter.c **** 				{
 304:countermeter.c **** 					// 尝试下一个门控值
 305:countermeter.c **** 					capture(15625);		// 1 S
 833               	.LM92:
 834 041c 89E0      		ldi r24,lo8(15625)
 835 041e 9DE3      		ldi r25,hi8(15625)
 836 0420 0E94 0000 		call capture
 306:countermeter.c **** 					//	读取计数值	
 307:countermeter.c **** 					count = read_counters();
 838               	.LM93:
 839 0424 0E94 0000 		call read_counters
 840 0428 8B87      		std Y+11,r24
 841 042a 9C87      		std Y+12,r25
 308:countermeter.c **** 					dp = 0;		// 小数点位置
 843               	.LM94:
 844 042c 1D82      		std Y+5,__zero_reg__
 309:countermeter.c **** 					ms = 0;		// 频率单位 Hz
 846               	.LM95:
 847 042e 1E82      		std Y+6,__zero_reg__
 848               	.L22:
 310:countermeter.c **** 				}
 311:countermeter.c **** 			}
 312:countermeter.c **** 		}
 313:countermeter.c **** 		
 314:countermeter.c **** 		//将二进制16位计数值转换位BCD码
 315:countermeter.c **** 		lv = 0;
 850               	.LM96:
 851 0430 1F82      		std Y+7,__zero_reg__
 852 0432 1886      		std Y+8,__zero_reg__
 853 0434 1986      		std Y+9,__zero_reg__
 854 0436 1A86      		std Y+10,__zero_reg__
 316:countermeter.c **** 		for (j=0;j<8;j++)
 856               	.LM97:
 857 0438 1B82      		std Y+3,__zero_reg__
 858 043a 1C82      		std Y+4,__zero_reg__
 859               	.L25:
 860 043c 8B81      		ldd r24,Y+3
 861 043e 9C81      		ldd r25,Y+4
 862 0440 8830      		cpi r24,8
 863 0442 9105      		cpc r25,__zero_reg__
 864 0444 0CF0      		brlt .+2
 865 0446 46C0      		rjmp .L26
 317:countermeter.c **** 		{
 318:countermeter.c **** 			i = count % 10;
 867               	.LM98:
 868 0448 8B85      		ldd r24,Y+11
 869 044a 9C85      		ldd r25,Y+12
 870 044c 2AE0      		ldi r18,lo8(10)
 871 044e 30E0      		ldi r19,hi8(10)
 872 0450 B901      		movw r22,r18
 873 0452 0E94 0000 		call __udivmodhi4
 874 0456 8983      		std Y+1,r24
 875 0458 9A83      		std Y+2,r25
 319:countermeter.c **** 			lv >>= 4;
 877               	.LM99:
 878 045a 8F81      		ldd r24,Y+7
 879 045c 9885      		ldd r25,Y+8
 880 045e A985      		ldd r26,Y+9
 881 0460 BA85      		ldd r27,Y+10
 882 0462 6894      		set
 883 0464 13F8      		bld __zero_reg__,4-1
 884 0466 B695      	1:	lsr r27
 885 0468 A795      		ror r26
 886 046a 9795      		ror r25
 887 046c 8795      		ror r24
 888 046e 1694      		lsr __zero_reg__
 889 0470 D1F7      		brne 1b
 890 0472 8F83      		std Y+7,r24
 891 0474 9887      		std Y+8,r25
 892 0476 A987      		std Y+9,r26
 893 0478 BA87      		std Y+10,r27
 320:countermeter.c **** 			lv |= ((unsigned long)i << 28);
 895               	.LM100:
 896 047a 8981      		ldd r24,Y+1
 897 047c 9A81      		ldd r25,Y+2
 898 047e AA27      		clr r26
 899 0480 97FD      		sbrc r25,7
 900 0482 A095      		com r26
 901 0484 BA2F      		mov r27,r26
 902 0486 9C01      		movw r18,r24
 903 0488 AD01      		movw r20,r26
 904 048a 012E      		mov r0,r17
 905 048c 1CE1      		ldi r17,28
 906 048e 220F      	1:	lsl r18
 907 0490 331F      		rol r19
 908 0492 441F      		rol r20
 909 0494 551F      		rol r21
 910 0496 1A95      		dec r17
 911 0498 D1F7      		brne 1b
 912 049a 102D      		mov r17,r0
 913 049c 8F81      		ldd r24,Y+7
 914 049e 9885      		ldd r25,Y+8
 915 04a0 A985      		ldd r26,Y+9
 916 04a2 BA85      		ldd r27,Y+10
 917 04a4 822B      		or r24,r18
 918 04a6 932B      		or r25,r19
 919 04a8 A42B      		or r26,r20
 920 04aa B52B      		or r27,r21
 921 04ac 8F83      		std Y+7,r24
 922 04ae 9887      		std Y+8,r25
 923 04b0 A987      		std Y+9,r26
 924 04b2 BA87      		std Y+10,r27
 321:countermeter.c **** 			count /= 10;
 926               	.LM101:
 927 04b4 8B85      		ldd r24,Y+11
 928 04b6 9C85      		ldd r25,Y+12
 929 04b8 2AE0      		ldi r18,lo8(10)
 930 04ba 30E0      		ldi r19,hi8(10)
 931 04bc B901      		movw r22,r18
 932 04be 0E94 0000 		call __udivmodhi4
 933 04c2 CB01      		movw r24,r22
 934 04c4 8B87      		std Y+11,r24
 935 04c6 9C87      		std Y+12,r25
 937               	.LM102:
 938 04c8 8B81      		ldd r24,Y+3
 939 04ca 9C81      		ldd r25,Y+4
 940 04cc 0196      		adiw r24,1
 941 04ce 8B83      		std Y+3,r24
 942 04d0 9C83      		std Y+4,r25
 943 04d2 B4CF      		rjmp .L25
 944               	.L26:
 322:countermeter.c **** 		}
 323:countermeter.c **** 
 324:countermeter.c **** 		//设置显示参数
 325:countermeter.c **** 		decimal_point = dp;
 946               	.LM103:
 947 04d4 8D81      		ldd r24,Y+5
 948 04d6 8093 0000 		sts decimal_point,r24
 326:countermeter.c **** 		mode_setting  = ms;
 950               	.LM104:
 951 04da 8E81      		ldd r24,Y+6
 952 04dc 8093 0000 		sts mode_setting,r24
 327:countermeter.c **** 		led_value     = lv;
 954               	.LM105:
 955 04e0 8F81      		ldd r24,Y+7
 956 04e2 9885      		ldd r25,Y+8
 957 04e4 A985      		ldd r26,Y+9
 958 04e6 BA85      		ldd r27,Y+10
 959 04e8 8093 0000 		sts led_value,r24
 960 04ec 9093 0000 		sts (led_value)+1,r25
 961 04f0 A093 0000 		sts (led_value)+2,r26
 962 04f4 B093 0000 		sts (led_value)+3,r27
 963 04f8 5BCF      		rjmp .L20
 964               	/* epilogue: frame size=12 */
 965               	/* epilogue: noreturn */
 966               	/* epilogue end (size=0) */
 967               	/* function main size 233 (229) */
 977               	.Lscope4:
 983               		.text
 985               	Letext:
 986               	/* File "countermeter.c": code  648 = 0x0288 ( 540), prologues  58, epilogues  50 */
DEFINED SYMBOLS
                            *ABS*:00000000 countermeter.c
                            *ABS*:0000003f __SREG__
                            *ABS*:0000003e __SP_H__
                            *ABS*:0000003d __SP_L__
                            *ABS*:00000000 __tmp_reg__
                            *ABS*:00000001 __zero_reg__
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:74     .data:00000000 digits
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:93     .bss:00000000 active_led
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:99     .bss:00000001 led_value
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:105    .bss:00000005 decimal_point
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:111    .bss:00000006 mode_setting
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:117    .text:00000000 __vector_9
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:287    .text:00000126 delay
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:368    .text:00000198 read_counters
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:525    .text:00000260 capture
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:660    .text:0000032a main
C:\DOCUME~1\machao\LOCALS~1\Temp/cceYaaaa.s:985    .text:000004fa Letext

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
__udivmodhi4
__stack

⌨️ 快捷键说明

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