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

📄 bcd.lst

📁 基于AVRGCC的时钟DS1302的完整应用源代码
💻 LST
字号:
   1               		.file	"bcd.c"
   2               		.arch atmega162
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  53               	.global	bcd2bin
  55               	bcd2bin:
   1:bcd.c         **** #include <avr/io.h>
   2:bcd.c         **** 
   3:bcd.c         **** #ifdef BCD_USE_TABLE
   4:bcd.c         **** 
   5:bcd.c         **** #include <avr/pgmspace.h >
   6:bcd.c         **** 
   7:bcd.c         **** const unsigned char PROGMEM bcd2bin_data[] = {
   8:bcd.c         ****      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 0, 0, 0, 0, 0, 0,
   9:bcd.c         **** 	10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0,
  10:bcd.c         **** 	20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
  11:bcd.c         **** 	30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0,
  12:bcd.c         **** 	40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
  13:bcd.c         **** 	50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, 0,
  14:bcd.c         **** 	60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0,
  15:bcd.c         **** 	70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0,
  16:bcd.c         **** 	80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, 0, 0, 0,
  17:bcd.c         **** 	90, 91, 92, 93, 94, 95, 96, 97, 98, 99
  18:bcd.c         ****  };
  19:bcd.c         ****   
  20:bcd.c         ****  const unsigned char PROGMEM bin2bcd_data[] = {
  21:bcd.c         **** 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
  22:bcd.c         **** 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
  23:bcd.c         **** 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
  24:bcd.c         **** 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
  25:bcd.c         **** 	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
  26:bcd.c         **** 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
  27:bcd.c         **** 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
  28:bcd.c         **** 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
  29:bcd.c         **** 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
  30:bcd.c         **** 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99
  31:bcd.c         ****  };
  32:bcd.c         **** #endif
  33:bcd.c         **** 
  34:bcd.c         **** unsigned char bcd2bin(unsigned char n)
  35:bcd.c         **** {
  57               	.LM1:
  58               	/* prologue: frame size=0 */
  59               	/* prologue end (size=0) */
  60 0000 482F      		mov r20,r24
  36:bcd.c         **** #ifdef BCD_USE_TABLE
  37:bcd.c         **** 	return pgm_read_byte(bcd2bin_data + n);
  38:bcd.c         **** #else	
  39:bcd.c         **** 	unsigned char x = (n & 0xF0) >> 4;
  62               	.LM2:
  63 0002 282F      		mov r18,r24
  64 0004 3327      		clr r19
  65 0006 C901      		movw r24,r18
  66 0008 64E0      		ldi r22,4
  67 000a 9695      	1:	lsr r25
  68 000c 8795      		ror r24
  69 000e 6A95      		dec r22
  70 0010 E1F7      		brne 1b
  40:bcd.c         **** 	
  41:bcd.c         **** 	if (x > 9 || (n & 0x0F) > 9)
  72               	.LM3:
  73 0012 8A30      		cpi r24,lo8(10)
  74 0014 28F4      		brsh .L3
  76               	.LM4:
  77 0016 2F70      		andi r18,lo8(15)
  78 0018 3070      		andi r19,hi8(15)
  79 001a 2A30      		cpi r18,10
  80 001c 3105      		cpc r19,__zero_reg__
  81 001e 1CF0      		brlt .L2
  82               	.L3:
  42:bcd.c         **** 	{
  43:bcd.c         **** 		return 0;
  84               	.LM5:
  85 0020 80E0      		ldi r24,lo8(0)
  86 0022 90E0      		ldi r25,hi8(0)
  87 0024 0895      		ret
  88               	.L2:
  44:bcd.c         **** 	}
  45:bcd.c         **** 	else
  46:bcd.c         **** 	{
  47:bcd.c         **** 		return (x << 3) + (x << 1) + (n & 0x0F);
  90               	.LM6:
  91 0026 9927      		clr r25
  92 0028 9C01      		movw r18,r24
  93 002a 220F      		lsl r18
  94 002c 331F      		rol r19
  95 002e 33E0      		ldi r19,3
  96 0030 880F      	1:	lsl r24
  97 0032 991F      		rol r25
  98 0034 3A95      		dec r19
  99 0036 E1F7      		brne 1b
 100 0038 820F      		add r24,r18
 101 003a 4F70      		andi r20,lo8(15)
 102 003c 840F      		add r24,r20
 103 003e 9927      		clr r25
  48:bcd.c         **** 	}
  49:bcd.c         **** #endif	
  50:bcd.c         **** }
 105               	.LM7:
 106 0040 0895      		ret
 107               	/* epilogue: frame size=0 */
 108 0042 0895      		ret
 109               	/* epilogue end (size=1) */
 110               	/* function bcd2bin size 34 (33) */
 115               	.global	bin2bcd
 117               	bin2bcd:
  51:bcd.c         **** 
  52:bcd.c         **** unsigned char bin2bcd(unsigned char n)
  53:bcd.c         **** {
 119               	.LM8:
 120               	/* prologue: frame size=0 */
 121               	/* prologue end (size=0) */
 122 0044 282F      		mov r18,r24
  54:bcd.c         **** #ifdef BCD_USE_TABLE
  55:bcd.c         **** 	return pgm_read_byte(bin2bcd_data + n);
  56:bcd.c         **** #else
  57:bcd.c         **** 	unsigned char result = 0;
 124               	.LM9:
 125 0046 80E0      		ldi r24,lo8(0)
  58:bcd.c         **** 	
  59:bcd.c         **** 	if (n > 99) return 0;
 127               	.LM10:
 128 0048 2436      		cpi r18,lo8(100)
 129 004a 18F0      		brlo .L6
 131               	.LM11:
 132 004c 80E0      		ldi r24,lo8(0)
 133 004e 90E0      		ldi r25,hi8(0)
 134 0050 0895      		ret
 135               	.L6:
  60:bcd.c         **** 	while(n > 10)
  61:bcd.c         **** 	{
  62:bcd.c         **** 		++result;
  63:bcd.c         **** 		n -= 10;
 137               	.LM12:
 138 0052 2B30      		cpi r18,lo8(11)
 139 0054 18F0      		brlo .L11
 141               	.LM13:
 142 0056 8F5F      		subi r24,lo8(-(1))
 144               	.LM14:
 145 0058 2A50      		subi r18,lo8(-(-10))
 146 005a FBCF      		rjmp .L6
 147               	.L11:
  64:bcd.c         **** 	}
  65:bcd.c         **** 	return (result << 4) | n;
 149               	.LM15:
 150 005c 9927      		clr r25
 151 005e 74E0      		ldi r23,4
 152 0060 880F      	1:	lsl r24
 153 0062 991F      		rol r25
 154 0064 7A95      		dec r23
 155 0066 E1F7      		brne 1b
 156 0068 282B      		or r18,r24
 157 006a 822F      		mov r24,r18
 158 006c 9927      		clr r25
  66:bcd.c         **** #endif	
  67:bcd.c         **** }
 160               	.LM16:
 161 006e 0895      		ret
 162               	/* epilogue: frame size=0 */
 163 0070 0895      		ret
 164               	/* epilogue end (size=1) */
 165               	/* function bin2bcd size 23 (22) */
 168               		.text
 170               	Letext:
 171               	/* File "bcd.c": code   57 = 0x0039 (  55), prologues   0, epilogues   2 */
DEFINED SYMBOLS
                            *ABS*:00000000 bcd.c
                            *ABS*:0000003f __SREG__
                            *ABS*:0000003e __SP_H__
                            *ABS*:0000003d __SP_L__
                            *ABS*:00000000 __tmp_reg__
                            *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ZHOUNA~1\LOCALS~1\Temp/ccKwaaaa.s:55     .text:00000000 bcd2bin
C:\DOCUME~1\ZHOUNA~1\LOCALS~1\Temp/ccKwaaaa.s:117    .text:00000044 bin2bcd
C:\DOCUME~1\ZHOUNA~1\LOCALS~1\Temp/ccKwaaaa.s:170    .text:00000072 Letext

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss

⌨️ 快捷键说明

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