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

📄 main.lss

📁 AT89C51开发例程 protues仿真 keil编程
💻 LSS
📖 第 1 页 / 共 3 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000082e  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000010  00800060  0000082e  000008c2  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000013  00800070  00800070  000008d2  2**0
                  ALLOC
  3 .noinit       00000000  00800083  00800083  000008d2  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000008d2  2**0
                  CONTENTS
  5 .debug_aranges 00000014  00000000  00000000  000008d2  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 000000fb  00000000  00000000  000008e6  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000359  00000000  00000000  000009e1  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 0000013a  00000000  00000000  00000d3a  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00000568  00000000  00000000  00000e74  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    0000014b  00000000  00000000  000013dc  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26
   2:	2b c0       	rjmp	.+86     	; 0x5a
   4:	c5 c1       	rjmp	.+906    	; 0x390
   6:	29 c0       	rjmp	.+82     	; 0x5a
   8:	28 c0       	rjmp	.+80     	; 0x5a
   a:	27 c0       	rjmp	.+78     	; 0x5a
   c:	26 c0       	rjmp	.+76     	; 0x5a
   e:	25 c0       	rjmp	.+74     	; 0x5a
  10:	24 c0       	rjmp	.+72     	; 0x5a
  12:	23 c0       	rjmp	.+70     	; 0x5a
  14:	22 c0       	rjmp	.+68     	; 0x5a
  16:	21 c0       	rjmp	.+66     	; 0x5a
  18:	20 c0       	rjmp	.+64     	; 0x5a
  1a:	1f c0       	rjmp	.+62     	; 0x5a
  1c:	1e c0       	rjmp	.+60     	; 0x5a
  1e:	1d c0       	rjmp	.+58     	; 0x5a
  20:	1c c0       	rjmp	.+56     	; 0x5a
  22:	1b c0       	rjmp	.+54     	; 0x5a
  24:	1a c0       	rjmp	.+52     	; 0x5a

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf e5       	ldi	r28, 0x5F	; 95
  2c:	d4 e0       	ldi	r29, 0x04	; 4
  2e:	de bf       	out	0x3e, r29	; 62
  30:	cd bf       	out	0x3d, r28	; 61

00000032 <__do_copy_data>:
  32:	10 e0       	ldi	r17, 0x00	; 0
  34:	a0 e6       	ldi	r26, 0x60	; 96
  36:	b0 e0       	ldi	r27, 0x00	; 0
  38:	ee e2       	ldi	r30, 0x2E	; 46
  3a:	f8 e0       	ldi	r31, 0x08	; 8
  3c:	02 c0       	rjmp	.+4      	; 0x42

0000003e <.do_copy_data_loop>:
  3e:	05 90       	lpm	r0, Z+
  40:	0d 92       	st	X+, r0

00000042 <.do_copy_data_start>:
  42:	a0 37       	cpi	r26, 0x70	; 112
  44:	b1 07       	cpc	r27, r17
  46:	d9 f7       	brne	.-10     	; 0x3e

00000048 <__do_clear_bss>:
  48:	10 e0       	ldi	r17, 0x00	; 0
  4a:	a0 e7       	ldi	r26, 0x70	; 112
  4c:	b0 e0       	ldi	r27, 0x00	; 0
  4e:	01 c0       	rjmp	.+2      	; 0x52

00000050 <.do_clear_bss_loop>:
  50:	1d 92       	st	X+, r1

00000052 <.do_clear_bss_start>:
  52:	a3 38       	cpi	r26, 0x83	; 131
  54:	b1 07       	cpc	r27, r17
  56:	e1 f7       	brne	.-8      	; 0x50
  58:	37 c1       	rjmp	.+622    	; 0x2c8

0000005a <__bad_interrupt>:
  5a:	d2 cf       	rjmp	.-92     	; 0x0

0000005c <out_byte>:

void out_byte(char addr,char data)//向DS1302写一个数
	{
		unsigned char i,temp;
	DDRD|=(1<<rst);
  5c:	88 9a       	sbi	0x11, 0	; 17
	DDRD|=(1<<clk);
  5e:	89 9a       	sbi	0x11, 1	; 17
	DDRD|=(1<<dat);
  60:	8a 9a       	sbi	0x11, 2	; 17
	PORTD&=~(1<<rst);
  62:	90 98       	cbi	0x12, 0	; 18
	PORTD&=~(1<<clk);
  64:	91 98       	cbi	0x12, 1	; 18
	PORTD|=(1<<rst);
  66:	90 9a       	sbi	0x12, 0	; 18
  68:	e8 2f       	mov	r30, r24
  6a:	ff 27       	eor	r31, r31
  6c:	20 e0       	ldi	r18, 0x00	; 0
  6e:	30 e0       	ldi	r19, 0x00	; 0
  70:	47 e0       	ldi	r20, 0x07	; 7
	for (i=0;i<8;i++)		//发送读命令
		{
		temp=addr;
		if((temp&(1<<i))!=0)
  72:	cf 01       	movw	r24, r30
  74:	02 2e       	mov	r0, r18
  76:	02 c0       	rjmp	.+4      	; 0x7c
  78:	95 95       	asr	r25
  7a:	87 95       	ror	r24
  7c:	0a 94       	dec	r0
  7e:	e2 f7       	brpl	.-8      	; 0x78
  80:	80 ff       	sbrs	r24, 0
  82:	02 c0       	rjmp	.+4      	; 0x88
			PORTD|=(1<<dat);
  84:	92 9a       	sbi	0x12, 2	; 18
  86:	01 c0       	rjmp	.+2      	; 0x8a
		else
			PORTD&=~(1<<dat);
  88:	92 98       	cbi	0x12, 2	; 18
		PORTD|=(1<<clk);
  8a:	91 9a       	sbi	0x12, 1	; 18
		PORTD&=~(1<<clk);
  8c:	91 98       	cbi	0x12, 1	; 18
  8e:	41 50       	subi	r20, 0x01	; 1
  90:	2f 5f       	subi	r18, 0xFF	; 255
  92:	3f 4f       	sbci	r19, 0xFF	; 255
  94:	47 ff       	sbrs	r20, 7
  96:	ed cf       	rjmp	.-38     	; 0x72
  98:	77 27       	eor	r23, r23
  9a:	20 e0       	ldi	r18, 0x00	; 0
  9c:	30 e0       	ldi	r19, 0x00	; 0
  9e:	47 e0       	ldi	r20, 0x07	; 7
		}
	for (i=0;i<8;i++)		//发送数据
		{
		temp=data;
		if((temp&(1<<i))!=0)
  a0:	cb 01       	movw	r24, r22
  a2:	02 2e       	mov	r0, r18
  a4:	02 c0       	rjmp	.+4      	; 0xaa
  a6:	95 95       	asr	r25
  a8:	87 95       	ror	r24
  aa:	0a 94       	dec	r0
  ac:	e2 f7       	brpl	.-8      	; 0xa6
  ae:	80 ff       	sbrs	r24, 0
  b0:	02 c0       	rjmp	.+4      	; 0xb6
			PORTD|=(1<<dat);
  b2:	92 9a       	sbi	0x12, 2	; 18
  b4:	01 c0       	rjmp	.+2      	; 0xb8
		else
			PORTD&=~(1<<dat);
  b6:	92 98       	cbi	0x12, 2	; 18
		PORTD|=(1<<clk);
  b8:	91 9a       	sbi	0x12, 1	; 18
		PORTD&=~(1<<clk);
  ba:	91 98       	cbi	0x12, 1	; 18
  bc:	41 50       	subi	r20, 0x01	; 1
  be:	2f 5f       	subi	r18, 0xFF	; 255
  c0:	3f 4f       	sbci	r19, 0xFF	; 255
  c2:	47 ff       	sbrs	r20, 7
  c4:	ed cf       	rjmp	.-38     	; 0xa0
		}
	PORTD&=~(1<<rst);
  c6:	90 98       	cbi	0x12, 0	; 18
  c8:	08 95       	ret

000000ca <write_ds1302>:
	}

void write_ds1302(char addr,char data)//修改DS1302的一个字节
	{
  ca:	0f 93       	push	r16
  cc:	1f 93       	push	r17
  ce:	08 2f       	mov	r16, r24
  d0:	16 2f       	mov	r17, r22
	out_byte(0x8e,0x00);
  d2:	60 e0       	ldi	r22, 0x00	; 0
  d4:	8e e8       	ldi	r24, 0x8E	; 142
  d6:	c2 df       	rcall	.-124    	; 0x5c
	out_byte(addr,data);
  d8:	61 2f       	mov	r22, r17
  da:	80 2f       	mov	r24, r16
  dc:	bf df       	rcall	.-130    	; 0x5c
	out_byte(0x8f,0x80);
  de:	60 e8       	ldi	r22, 0x80	; 128
  e0:	8f e8       	ldi	r24, 0x8F	; 143
  e2:	bc df       	rcall	.-136    	; 0x5c
  e4:	1f 91       	pop	r17
  e6:	0f 91       	pop	r16
  e8:	08 95       	ret

000000ea <in_byte>:
	}

char in_byte(char addr)	//从ds1302读入一个字节
	{
	unsigned char i,temp,temp1;
	DDRD|=(1<<rst);
  ea:	88 9a       	sbi	0x11, 0	; 17
	DDRD|=(1<<clk);
  ec:	89 9a       	sbi	0x11, 1	; 17
	DDRD|=(1<<dat);
  ee:	8a 9a       	sbi	0x11, 2	; 17
	PORTD&=~(1<<rst);
  f0:	90 98       	cbi	0x12, 0	; 18
	PORTD&=~(1<<clk);
  f2:	91 98       	cbi	0x12, 1	; 18
	PORTD|=(1<<rst);
  f4:	90 9a       	sbi	0x12, 0	; 18
  f6:	68 2f       	mov	r22, r24
  f8:	77 27       	eor	r23, r23
  fa:	20 e0       	ldi	r18, 0x00	; 0
  fc:	30 e0       	ldi	r19, 0x00	; 0
  fe:	47 e0       	ldi	r20, 0x07	; 7
	for (i=0;i<8;i++)		//发送读命令
		{
		temp=addr;
		if((temp&(1<<i))!=0)
 100:	cb 01       	movw	r24, r22
 102:	02 2e       	mov	r0, r18
 104:	02 c0       	rjmp	.+4      	; 0x10a
 106:	95 95       	asr	r25
 108:	87 95       	ror	r24
 10a:	0a 94       	dec	r0
 10c:	e2 f7       	brpl	.-8      	; 0x106
 10e:	80 ff       	sbrs	r24, 0
 110:	02 c0       	rjmp	.+4      	; 0x116
			PORTD|=(1<<dat);
 112:	92 9a       	sbi	0x12, 2	; 18
 114:	01 c0       	rjmp	.+2      	; 0x118
		else
			PORTD&=~(1<<dat);
 116:	92 98       	cbi	0x12, 2	; 18
		PORTD|=(1<<clk);
 118:	91 9a       	sbi	0x12, 1	; 18
		PORTD&=~(1<<clk);
 11a:	91 98       	cbi	0x12, 1	; 18
 11c:	41 50       	subi	r20, 0x01	; 1
 11e:	2f 5f       	subi	r18, 0xFF	; 255
 120:	3f 4f       	sbci	r19, 0xFF	; 255
 122:	47 ff       	sbrs	r20, 7
 124:	ed cf       	rjmp	.-38     	; 0x100
		}
	DDRD&=~(1<<dat);
 126:	8a 98       	cbi	0x11, 2	; 17
	temp=0;					//准备接收数据
 128:	50 e0       	ldi	r21, 0x00	; 0
 12a:	20 e0       	ldi	r18, 0x00	; 0
 12c:	30 e0       	ldi	r19, 0x00	; 0
 12e:	47 e0       	ldi	r20, 0x07	; 7
	for (i=0;i<8;i++)		//接收一个字节数据
		{
		temp1=PIND;
 130:	80 b3       	in	r24, 0x10	; 16
		PORTD|=(1<<clk);
 132:	91 9a       	sbi	0x12, 1	; 18
		temp1=(temp1>>2)&0x01;
 134:	86 95       	lsr	r24
 136:	86 95       	lsr	r24
 138:	81 70       	andi	r24, 0x01	; 1
		temp|=(temp1<<i);
 13a:	99 27       	eor	r25, r25
 13c:	02 2e       	mov	r0, r18
 13e:	02 c0       	rjmp	.+4      	; 0x144
 140:	88 0f       	add	r24, r24
 142:	99 1f       	adc	r25, r25
 144:	0a 94       	dec	r0
 146:	e2 f7       	brpl	.-8      	; 0x140
 148:	58 2b       	or	r21, r24
		PORTD&=~(1<<clk);
 14a:	91 98       	cbi	0x12, 1	; 18
 14c:	41 50       	subi	r20, 0x01	; 1
 14e:	2f 5f       	subi	r18, 0xFF	; 255
 150:	3f 4f       	sbci	r19, 0xFF	; 255
 152:	47 ff       	sbrs	r20, 7
 154:	ed cf       	rjmp	.-38     	; 0x130
		}
	PORTD&=~(1<<rst);
 156:	90 98       	cbi	0x12, 0	; 18
	return(temp);
	}
 158:	85 2f       	mov	r24, r21
 15a:	99 27       	eor	r25, r25
 15c:	08 95       	ret

0000015e <bcd_change>:


void bcd_change(void)		//三字节BCD码转换为六位led显示值
	{
	dsp[0]=led[bcd_dsp[0]>>4];
 15e:	90 91 7a 00 	lds	r25, 0x007A
 162:	89 2f       	mov	r24, r25
 164:	82 95       	swap	r24
 166:	8f 70       	andi	r24, 0x0F	; 15
 168:	26 e6       	ldi	r18, 0x66	; 102
 16a:	30 e0       	ldi	r19, 0x00	; 0
 16c:	f9 01       	movw	r30, r18
 16e:	e8 0f       	add	r30, r24
 170:	f1 1d       	adc	r31, r1
 172:	80 81       	ld	r24, Z
 174:	80 93 74 00 	sts	0x0074, r24
	dsp[1]=led[bcd_dsp[0]&0x0f];
 178:	e9 2f       	mov	r30, r25
 17a:	ff 27       	eor	r31, r31
 17c:	ef 70       	andi	r30, 0x0F	; 15
 17e:	f0 70       	andi	r31, 0x00	; 0
 180:	e2 0f       	add	r30, r18
 182:	f3 1f       	adc	r31, r19
 184:	80 81       	ld	r24, Z
 186:	80 93 75 00 	sts	0x0075, r24
	dsp[2]=led[bcd_dsp[1]>>4];
 18a:	90 91 7b 00 	lds	r25, 0x007B
 18e:	89 2f       	mov	r24, r25
 190:	82 95       	swap	r24
 192:	8f 70       	andi	r24, 0x0F	; 15
 194:	f9 01       	movw	r30, r18
 196:	e8 0f       	add	r30, r24
 198:	f1 1d       	adc	r31, r1
 19a:	80 81       	ld	r24, Z
 19c:	80 93 76 00 	sts	0x0076, r24
	dsp[3]=led[bcd_dsp[1]&0x0f];
 1a0:	e9 2f       	mov	r30, r25
 1a2:	ff 27       	eor	r31, r31
 1a4:	ef 70       	andi	r30, 0x0F	; 15
 1a6:	f0 70       	andi	r31, 0x00	; 0
 1a8:	e2 0f       	add	r30, r18
 1aa:	f3 1f       	adc	r31, r19
 1ac:	80 81       	ld	r24, Z
 1ae:	80 93 77 00 	sts	0x0077, r24
	dsp[4]=led[bcd_dsp[2]>>4];
 1b2:	90 91 7c 00 	lds	r25, 0x007C
 1b6:	89 2f       	mov	r24, r25
 1b8:	82 95       	swap	r24
 1ba:	8f 70       	andi	r24, 0x0F	; 15
 1bc:	f9 01       	movw	r30, r18
 1be:	e8 0f       	add	r30, r24
 1c0:	f1 1d       	adc	r31, r1
 1c2:	80 81       	ld	r24, Z
 1c4:	80 93 78 00 	sts	0x0078, r24
	dsp[5]=led[bcd_dsp[2]&0x0f];
 1c8:	e9 2f       	mov	r30, r25
 1ca:	ff 27       	eor	r31, r31
 1cc:	ef 70       	andi	r30, 0x0F	; 15
 1ce:	f0 70       	andi	r31, 0x00	; 0
 1d0:	e2 0f       	add	r30, r18
 1d2:	f3 1f       	adc	r31, r19
 1d4:	80 81       	ld	r24, Z
 1d6:	80 93 79 00 	sts	0x0079, r24
 1da:	08 95       	ret

000001dc <reflash>:
	
	}

/*********************刷新数码管*********/	
void reflash(void)
	{
	char i,j,mark;
	DDRB=0xff;
 1dc:	8f ef       	ldi	r24, 0xFF	; 255
 1de:	87 bb       	out	0x17, r24	; 23
	DDRC=0xff;
 1e0:	84 bb       	out	0x14, r24	; 20
	mark=0;
 1e2:	70 e0       	ldi	r23, 0x00	; 0
	for(i=0;i<=5;i++)
 1e4:	97 2f       	mov	r25, r23
 1e6:	e4 e7       	ldi	r30, 0x74	; 116
 1e8:	f0 e0       	ldi	r31, 0x00	; 0
		{
		if(dsp[i]!=0xc0)
 1ea:	81 91       	ld	r24, Z+
 1ec:	80 3c       	cpi	r24, 0xC0	; 192
 1ee:	11 f0       	breq	.+4      	; 0x1f4
			{
			mark=i;
 1f0:	79 2f       	mov	r23, r25
			break;
 1f2:	03 c0       	rjmp	.+6      	; 0x1fa
 1f4:	9f 5f       	subi	r25, 0xFF	; 255
 1f6:	96 30       	cpi	r25, 0x06	; 6
 1f8:	c0 f3       	brcs	.-16     	; 0x1ea
			}
		}
		if(i==5)
 1fa:	95 30       	cpi	r25, 0x05	; 5
 1fc:	09 f4       	brne	.+2      	; 0x200
			mark=6;
 1fe:	76 e0       	ldi	r23, 0x06	; 6
		if(dsp_state==0)			//修改数据时,在修改的位上显示一个点
 200:	80 91 82 00 	lds	r24, 0x0082
 204:	88 23       	and	r24, r24
 206:	99 f4       	brne	.+38     	; 0x22e
 208:	e4 e7       	ldi	r30, 0x74	; 116
 20a:	f0 e0       	ldi	r31, 0x00	; 0
 20c:	95 e0       	ldi	r25, 0x05	; 5
			{
			for(i=0;i<=5;i++)
			dsp[i]|=0x80;
 20e:	80 81       	ld	r24, Z
 210:	80 68       	ori	r24, 0x80	; 128
 212:	81 93       	st	Z+, r24
 214:	91 50       	subi	r25, 0x01	; 1
 216:	97 ff       	sbrs	r25, 7
 218:	fa cf       	rjmp	.-12     	; 0x20e
			dsp[modify_bit]&=0x7f;
 21a:	80 91 72 00 	lds	r24, 0x0072
 21e:	e8 2f       	mov	r30, r24
 220:	ff 27       	eor	r31, r31
 222:	ec 58       	subi	r30, 0x8C	; 140
 224:	ff 4f       	sbci	r31, 0xFF	; 255
 226:	80 81       	ld	r24, Z
 228:	8f 77       	andi	r24, 0x7F	; 127
 22a:	80 83       	st	Z, r24
 22c:	2f c0       	rjmp	.+94     	; 0x28c
			}
		if(dsp_state==1)			//显示时间时,在时分秒之间显示一个闪烁的点

⌨️ 快捷键说明

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