main.lss

来自「AT89C51开发例程 protues仿真 keil编程」· LSS 代码 · 共 1,298 行 · 第 1/3 页

LSS
1,298
字号
 22e:	81 30       	cpi	r24, 0x01	; 1
 230:	e1 f4       	brne	.+56     	; 0x26a
			{
			time_dog++;
 232:	80 91 80 00 	lds	r24, 0x0080
 236:	8f 5f       	subi	r24, 0xFF	; 255
 238:	80 93 80 00 	sts	0x0080, r24
			if (time_dog<30)
 23c:	8e 31       	cpi	r24, 0x1E	; 30
 23e:	50 f4       	brcc	.+20     	; 0x254
				{
				dsp[1]&=0x7f;
 240:	80 91 75 00 	lds	r24, 0x0075
 244:	8f 77       	andi	r24, 0x7F	; 127
 246:	80 93 75 00 	sts	0x0075, r24
				dsp[3]&=0x7f;
 24a:	80 91 77 00 	lds	r24, 0x0077
 24e:	8f 77       	andi	r24, 0x7F	; 127
 250:	80 93 77 00 	sts	0x0077, r24
				}
			if (dsp[5]!=dog_none)
 254:	90 91 79 00 	lds	r25, 0x0079
 258:	80 91 81 00 	lds	r24, 0x0081
 25c:	98 17       	cp	r25, r24
 25e:	b1 f0       	breq	.+44     	; 0x28c
				{
				dog_none=dsp[5];
 260:	90 93 81 00 	sts	0x0081, r25
				time_dog=0;
 264:	10 92 80 00 	sts	0x0080, r1
 268:	11 c0       	rjmp	.+34     	; 0x28c
				}
			}
		if(dsp_state==3)			//在显示年月日时,在年月日之间显示一个点
 26a:	83 30       	cpi	r24, 0x03	; 3
 26c:	61 f4       	brne	.+24     	; 0x286
			{
			mark=0;
 26e:	70 e0       	ldi	r23, 0x00	; 0
			dsp[1]&=0x7f;
 270:	80 91 75 00 	lds	r24, 0x0075
 274:	8f 77       	andi	r24, 0x7F	; 127
 276:	80 93 75 00 	sts	0x0075, r24
			dsp[3]&=0x7f;
 27a:	80 91 77 00 	lds	r24, 0x0077
 27e:	8f 77       	andi	r24, 0x7F	; 127
 280:	80 93 77 00 	sts	0x0077, r24
 284:	03 c0       	rjmp	.+6      	; 0x28c
			}
		if(dsp_state==2)
 286:	82 30       	cpi	r24, 0x02	; 2
 288:	09 f4       	brne	.+2      	; 0x28c
			mark=5;
 28a:	75 e0       	ldi	r23, 0x05	; 5
 28c:	61 e0       	ldi	r22, 0x01	; 1
	for(j=0;j<2;j++)
		{
			while(mark<6)
			{	PORTC=0;
				PORTC=dig[mark];
			    PORTB=dsp[mark];
				_delay_ms(2);
				mark++;
 28e:	76 30       	cpi	r23, 0x06	; 6
 290:	b8 f4       	brcc	.+46     	; 0x2c0
 292:	24 ef       	ldi	r18, 0xF4	; 244
 294:	31 e0       	ldi	r19, 0x01	; 1
 296:	40 e0       	ldi	r20, 0x00	; 0
 298:	50 e0       	ldi	r21, 0x00	; 0
 29a:	87 2f       	mov	r24, r23
 29c:	99 27       	eor	r25, r25
 29e:	dc 01       	movw	r26, r24
 2a0:	ac 58       	subi	r26, 0x8C	; 140
 2a2:	bf 4f       	sbci	r27, 0xFF	; 255
 2a4:	fc 01       	movw	r30, r24
 2a6:	e0 5a       	subi	r30, 0xA0	; 160
 2a8:	ff 4f       	sbci	r31, 0xFF	; 255
 2aa:	15 ba       	out	0x15, r1	; 21
 2ac:	81 91       	ld	r24, Z+
 2ae:	85 bb       	out	0x15, r24	; 21
 2b0:	8d 91       	ld	r24, X+
 2b2:	88 bb       	out	0x18, r24	; 24
 */
static __inline__ void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 2b4:	c9 01       	movw	r24, r18
 2b6:	01 97       	sbiw	r24, 0x01	; 1
 2b8:	f1 f7       	brne	.-4      	; 0x2b6
 2ba:	7f 5f       	subi	r23, 0xFF	; 255
 2bc:	76 30       	cpi	r23, 0x06	; 6
 2be:	a8 f3       	brcs	.-22     	; 0x2aa
 2c0:	61 50       	subi	r22, 0x01	; 1
 2c2:	67 ff       	sbrs	r22, 7
 2c4:	e4 cf       	rjmp	.-56     	; 0x28e
 2c6:	08 95       	ret

000002c8 <main>:
			}
		}
	}
			
	
void main(void)
	{
 2c8:	cf e5       	ldi	r28, 0x5F	; 95
 2ca:	d4 e0       	ldi	r29, 0x04	; 4
 2cc:	de bf       	out	0x3e, r29	; 62
 2ce:	cd bf       	out	0x3d, r28	; 61

/**********初始化int1中断及键盘*******************/
	DDRB=0xff;
 2d0:	cf ef       	ldi	r28, 0xFF	; 255
 2d2:	c7 bb       	out	0x17, r28	; 23
	DDRD&=0x07;
 2d4:	81 b3       	in	r24, 0x11	; 17
 2d6:	87 70       	andi	r24, 0x07	; 7
 2d8:	81 bb       	out	0x11, r24	; 17
	MCUCR|=(1<<ISC11);//下降沿触发
 2da:	85 b7       	in	r24, 0x35	; 53
 2dc:	88 60       	ori	r24, 0x08	; 8
 2de:	85 bf       	out	0x35, r24	; 53
	MCUCR&=~(1<<ISC10);
 2e0:	85 b7       	in	r24, 0x35	; 53
 2e2:	8b 7f       	andi	r24, 0xFB	; 251
 2e4:	85 bf       	out	0x35, r24	; 53
	GIFR&=~(1<<INTF1);	//清中断标志
 2e6:	8a b7       	in	r24, 0x3a	; 58
 2e8:	8f 77       	andi	r24, 0x7F	; 127
 2ea:	8a bf       	out	0x3a, r24	; 58
	SREG|=(1<<SREG_I);	//全局中断
 2ec:	8f b7       	in	r24, 0x3f	; 63
 2ee:	80 68       	ori	r24, 0x80	; 128
 2f0:	8f bf       	out	0x3f, r24	; 63
	GICR|=(1<<INT1);	//int1开中断
 2f2:	8b b7       	in	r24, 0x3b	; 59
 2f4:	80 68       	ori	r24, 0x80	; 128
 2f6:	8b bf       	out	0x3b, r24	; 59
/*************************************************/
	write_ds1302(0x90,0b10100101);	//写充电寄存器
 2f8:	65 ea       	ldi	r22, 0xA5	; 165
 2fa:	80 e9       	ldi	r24, 0x90	; 144
 2fc:	e6 de       	rcall	.-564    	; 0xca
	if ((in_byte(0x81)&0x80)!=0)	//如果没有启动时钟,则启动时钟
 2fe:	81 e8       	ldi	r24, 0x81	; 129
 300:	f4 de       	rcall	.-536    	; 0xea
 302:	87 ff       	sbrs	r24, 7
 304:	03 c0       	rjmp	.+6      	; 0x30c
		write_ds1302(0x80,0x00);
 306:	60 e0       	ldi	r22, 0x00	; 0
 308:	80 e8       	ldi	r24, 0x80	; 128
 30a:	df de       	rcall	.-578    	; 0xca
	dsp_state=1;			//初始化显示时分秒
 30c:	81 e0       	ldi	r24, 0x01	; 1
 30e:	80 93 82 00 	sts	0x0082, r24
	DDRB=0xff;
 312:	c7 bb       	out	0x17, r28	; 23
	DDRC=0xff;
 314:	c4 bb       	out	0x14, r28	; 20
	while (1)
		{
		SREG&=~(1<<SREG_I);//显示时,关中断
 316:	8f b7       	in	r24, 0x3f	; 63
 318:	8f 77       	andi	r24, 0x7F	; 127
 31a:	8f bf       	out	0x3f, r24	; 63
		switch(dsp_state)
 31c:	80 91 82 00 	lds	r24, 0x0082
 320:	99 27       	eor	r25, r25
 322:	82 30       	cpi	r24, 0x02	; 2
 324:	91 05       	cpc	r25, r1
 326:	b9 f0       	breq	.+46     	; 0x356
 328:	83 30       	cpi	r24, 0x03	; 3
 32a:	91 05       	cpc	r25, r1
 32c:	1c f4       	brge	.+6      	; 0x334
 32e:	01 97       	sbiw	r24, 0x01	; 1
 330:	21 f0       	breq	.+8      	; 0x33a
 332:	29 c0       	rjmp	.+82     	; 0x386
 334:	03 97       	sbiw	r24, 0x03	; 3
 336:	c1 f0       	breq	.+48     	; 0x368
 338:	26 c0       	rjmp	.+76     	; 0x386
			{
			case 0:			//直接显示dsp的值
				break;
			case 1:			//显示时分秒
				bcd_dsp[0]=in_byte(0x85)&0x3f;
 33a:	85 e8       	ldi	r24, 0x85	; 133
 33c:	d6 de       	rcall	.-596    	; 0xea
 33e:	8f 73       	andi	r24, 0x3F	; 63
 340:	80 93 7a 00 	sts	0x007A, r24
				bcd_dsp[1]=in_byte(0x83)&0x7f;
 344:	83 e8       	ldi	r24, 0x83	; 131
 346:	d1 de       	rcall	.-606    	; 0xea
 348:	8f 77       	andi	r24, 0x7F	; 127
 34a:	80 93 7b 00 	sts	0x007B, r24
				bcd_dsp[2]=in_byte(0x81)&0x7f;
 34e:	81 e8       	ldi	r24, 0x81	; 129
 350:	cc de       	rcall	.-616    	; 0xea
 352:	8f 77       	andi	r24, 0x7F	; 127
 354:	15 c0       	rjmp	.+42     	; 0x380
				bcd_change();
				break;
			case 2:			//显示星期
				bcd_dsp[0]=0;
 356:	10 92 7a 00 	sts	0x007A, r1
				bcd_dsp[1]=0;
 35a:	10 92 7b 00 	sts	0x007B, r1
				bcd_dsp[2]=(in_byte(0x8b)&0x07)-1;
 35e:	8b e8       	ldi	r24, 0x8B	; 139
 360:	c4 de       	rcall	.-632    	; 0xea
 362:	87 70       	andi	r24, 0x07	; 7
 364:	81 50       	subi	r24, 0x01	; 1
 366:	0c c0       	rjmp	.+24     	; 0x380
				bcd_change();
				break;
			case 3:			//显示年月日
				bcd_dsp[0]=in_byte(0x8d);
 368:	8d e8       	ldi	r24, 0x8D	; 141
 36a:	bf de       	rcall	.-642    	; 0xea
 36c:	80 93 7a 00 	sts	0x007A, r24
				bcd_dsp[1]=in_byte(0x89)&0x1f;
 370:	89 e8       	ldi	r24, 0x89	; 137
 372:	bb de       	rcall	.-650    	; 0xea
 374:	8f 71       	andi	r24, 0x1F	; 31
 376:	80 93 7b 00 	sts	0x007B, r24
				bcd_dsp[2]=in_byte(0x87)&0x3f;
 37a:	87 e8       	ldi	r24, 0x87	; 135
 37c:	b6 de       	rcall	.-660    	; 0xea
 37e:	8f 73       	andi	r24, 0x3F	; 63
 380:	80 93 7c 00 	sts	0x007C, r24
				bcd_change();
 384:	ec de       	rcall	.-552    	; 0x15e
				break;
			default:
				break;
			}
		reflash();
 386:	2a df       	rcall	.-428    	; 0x1dc
		SREG|=(1<<SREG_I); //显示完毕,开中断
 388:	8f b7       	in	r24, 0x3f	; 63
 38a:	80 68       	ori	r24, 0x80	; 128
 38c:	8f bf       	out	0x3f, r24	; 63
 38e:	c3 cf       	rjmp	.-122    	; 0x316

00000390 <__vector_2>:
		}
	}

/******************键盘中断*************************/	
SIGNAL(SIG_INTERRUPT1)
	{
 390:	1f 92       	push	r1
 392:	0f 92       	push	r0
 394:	0f b6       	in	r0, 0x3f	; 63
 396:	0f 92       	push	r0
 398:	11 24       	eor	r1, r1
 39a:	2f 93       	push	r18
 39c:	3f 93       	push	r19
 39e:	4f 93       	push	r20
 3a0:	5f 93       	push	r21
 3a2:	6f 93       	push	r22
 3a4:	7f 93       	push	r23
 3a6:	8f 93       	push	r24
 3a8:	9f 93       	push	r25
 3aa:	af 93       	push	r26
 3ac:	bf 93       	push	r27
 3ae:	cf 93       	push	r28
 3b0:	ef 93       	push	r30
 3b2:	ff 93       	push	r31
	char key,temp;
//	_delay_ms(1);	//此处为去抖动
	temp=PIND;
 3b4:	80 b3       	in	r24, 0x10	; 16
	if (temp&0xf0)	//键有效
 3b6:	80 7f       	andi	r24, 0xF0	; 240
 3b8:	09 f0       	breq	.+2      	; 0x3bc
		key=temp&0xf0;
 3ba:	c8 2f       	mov	r28, r24
	temp=PIND;
 3bc:	80 b3       	in	r24, 0x10	; 16
	while(temp&0xf0)//等待键释放
		temp=PIND;
 3be:	80 7f       	andi	r24, 0xF0	; 240
 3c0:	e9 f7       	brne	.-6      	; 0x3bc
	if (key==0x10&modify_state==0)//改变显示状态键:显示时分秒、年月日、星期
 3c2:	80 e0       	ldi	r24, 0x00	; 0
 3c4:	90 e0       	ldi	r25, 0x00	; 0
 3c6:	c0 31       	cpi	r28, 0x10	; 16
 3c8:	11 f4       	brne	.+4      	; 0x3ce
 3ca:	81 e0       	ldi	r24, 0x01	; 1
 3cc:	90 e0       	ldi	r25, 0x00	; 0
 3ce:	20 e0       	ldi	r18, 0x00	; 0
 3d0:	30 e0       	ldi	r19, 0x00	; 0
 3d2:	40 91 73 00 	lds	r20, 0x0073
 3d6:	44 23       	and	r20, r20
 3d8:	11 f4       	brne	.+4      	; 0x3de
 3da:	21 e0       	ldi	r18, 0x01	; 1
 3dc:	30 e0       	ldi	r19, 0x00	; 0
 3de:	82 23       	and	r24, r18
 3e0:	93 23       	and	r25, r19
 3e2:	89 2b       	or	r24, r25
 3e4:	51 f0       	breq	.+20     	; 0x3fa
		{
		dsp_state++;
 3e6:	80 91 82 00 	lds	r24, 0x0082
 3ea:	8f 5f       	subi	r24, 0xFF	; 255
 3ec:	80 93 82 00 	sts	0x0082, r24
		if (dsp_state>3)
 3f0:	84 30       	cpi	r24, 0x04	; 4
 3f2:	18 f0       	brcs	.+6      	; 0x3fa
			dsp_state=1;
 3f4:	81 e0       	ldi	r24, 0x01	; 1
 3f6:	80 93 82 00 	sts	0x0082, r24
		}
	if (key==0x20&modify_state!=0)//数据加键
 3fa:	80 e0       	ldi	r24, 0x00	; 0
 3fc:	90 e0       	ldi	r25, 0x00	; 0
 3fe:	c0 32       	cpi	r28, 0x20	; 32
 400:	11 f4       	brne	.+4      	; 0x406
 402:	81 e0       	ldi	r24, 0x01	; 1
 404:	90 e0       	ldi	r25, 0x00	; 0
 406:	20 e0       	ldi	r18, 0x00	; 0
 408:	30 e0       	ldi	r19, 0x00	; 0
 40a:	44 23       	and	r20, r20
 40c:	11 f0       	breq	.+4      	; 0x412
 40e:	21 e0       	ldi	r18, 0x01	; 1
 410:	30 e0       	ldi	r19, 0x00	; 0
 412:	82 23       	and	r24, r18
 414:	93 23       	and	r25, r19
 416:	89 2b       	or	r24, r25
 418:	b1 f0       	breq	.+44     	; 0x446
		{
		bcd_dsp[modify_bit]++;
 41a:	80 91 72 00 	lds	r24, 0x0072
 41e:	a8 2f       	mov	r26, r24
 420:	bb 27       	eor	r27, r27
 422:	fd 01       	movw	r30, r26
 424:	e6 58       	subi	r30, 0x86	; 134
 426:	ff 4f       	sbci	r31, 0xFF	; 255
 428:	80 81       	ld	r24, Z
 42a:	8f 5f       	subi	r24, 0xFF	; 255
 42c:	80 83       	st	Z, r24
		if(bcd_dsp[modify_bit]>9)bcd_dsp[modify_bit]=0;
 42e:	8a 30       	cpi	r24, 0x0A	; 10
 430:	08 f0       	brcs	.+2      	; 0x434
 432:	10 82       	st	Z, r1
		dsp[modify_bit]=led[bcd_dsp[modify_bit]];
 434:	ac 58       	subi	r26, 0x8C	; 140
 436:	bf 4f       	sbci	r27, 0xFF	; 255
 438:	80 81       	ld	r24, Z
 43a:	e8 2f       	mov	r30, r24
 43c:	ff 27       	eor	r31, r31
 43e:	ea 59       	subi	r30, 0x9A	; 154
 440:	ff 4f       	sbci	r31, 0xFF	; 255
 442:	80 81       	ld	r24, Z
 444:	8c 93       	st	X, r24
		}
	if (key==0x40&modify_state!=0)//确认保存数据
 446:	80 e0       	ldi	r24, 0x00	; 0
 448:	90 e0       	ldi	r25, 0x00	; 0
 44a:	c0 34       	cpi	r28, 0x40	; 64
 44c:	11 f4       	brne	.+4      	; 0x452
 44e:	81 e0       	ldi	r24, 0x01	; 1
 450:	90 e0       	ldi	r25, 0x00	; 0
 452:	20 e0       	ldi	r18, 0x00	; 0
 454:	30 e0       	ldi	r19, 0x00	; 0
 456:	44 23       	and	r20, r20
 458:	11 f0       	breq	.+4      	; 0x45e
 45a:	21 e0       	ldi	r18, 0x01	; 1
 45c:	30 e0       	ldi	r19, 0x00	; 0
 45e:	82 23       	and	r24, r18
 460:	93 23       	and	r25, r19
 462:	89 2b       	or	r24, r25
 464:	09 f4       	brne	.+2      	; 0x468
 466:	ff c0       	rjmp	.+510    	; 0x666
		{
		if (modify_state==3)
 468:	43 30       	cpi	r20, 0x03	; 3
 46a:	a1 f5       	brne	.+104    	; 0x4d4
			{
			write_ds1302(0x84,((bcd_dsp[0]<<4)|(bcd_dsp[1]&0xff)&0x3f));
 46c:	80 91 7a 00 	lds	r24, 0x007A
 470:	99 27       	eor	r25, r25
 472:	74 e0       	ldi	r23, 0x04	; 4
 474:	88 0f       	add	r24, r24
 476:	99 1f       	adc	r25, r25
 478:	7a 95       	dec	r23
 47a:	e1 f7       	brne	.-8      	; 0x474
 47c:	20 91 7b 00 	lds	r18, 0x007B
 480:	2f 73       	andi	r18, 0x3F	; 63
 482:	28 2b       	or	r18, r24
 484:	62 2f       	mov	r22, r18
 486:	84 e8       	ldi	r24, 0x84	; 132
 488:	20 de       	rcall	.-960    	; 0xca
			write_ds1302(0x82,((bcd_dsp[2]<<4)|(bcd_dsp[3]&0xff)&0x7F));
 48a:	80 91 7c 00 	lds	r24, 0x007C
 48e:	99 27       	eor	r25, r25
 490:	64 e0       	ldi	r22, 0x04	; 4
 492:	88 0f       	add	r24, r24
 494:	99 1f       	adc	r25, r25
 496:	6a 95       	dec	r22
 498:	e1 f7       	brne	.-8      	; 0x492
 49a:	20 91 7d 00 	lds	r18, 0x007D
 49e:	2f 77       	andi	r18, 0x7F	; 127
 4a0:	28 2b       	or	r18, r24
 4a2:	62 2f       	mov	r22, r18
 4a4:	82 e8       	ldi	r24, 0x82	; 130
 4a6:	11 de       	rcall	.-990    	; 0xca
			write_ds1302(0x80,((bcd_dsp[4]<<4)|(bcd_dsp[5]&0xff)&0x7f));
 4a8:	80 91 7e 00 	lds	r24, 0x007E
 4ac:	99 27       	eor	r25, r25
 4ae:	54 e0       	ldi	r21, 0x04	; 4
 4b0:	88 0f       	add	r24, r24
 4b2:	99 1f       	adc	r25, r25
 4b4:	5a 95       	dec	r21
 4b6:	e1 f7       	brne	.-8      	; 0x4b0
 4b8:	20 91 7f 00 	lds	r18, 0x007F
 4bc:	2f 77       	andi	r18, 0x7F	; 127
 4be:	28 2b       	or	r18, r24
 4c0:	62 2f       	mov	r22, r18
 4c2:	80 e8       	ldi	r24, 0x80	; 128
 4c4:	02 de       	rcall	.-1020   	; 0xca
			dsp_state=1;
 4c6:	81 e0       	ldi	r24, 0x01	; 1
 4c8:	80 93 82 00 	sts	0x0082, r24
			modify_state=0;
 4cc:	10 92 73 00 	sts	0x0073, r1
			modify_key=0;
 4d0:	10 92 70 00 	sts	0x0070, r1
			}
		if (modify_state==2)
 4d4:	80 91 73 00 	lds	r24, 0x0073
 4d8:	82 30       	cpi	r24, 0x02	; 2

⌨️ 快捷键说明

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