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

📄 pcat.lst

📁 双龙AVR-MEGA128开发板的配套源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0461 EFCF      LDI	R28,0xFF
    0462 E0DF      LDI	R29,0xF
    0463 BFCD      OUT	P3D,R28
    0464 BFDE      OUT	P3E,R29
    0465 51C0      SUBI	R28,0x10
    0466 40D0      SBCI	R29,0
    0467 EA0A      LDI	R16,0xAA
    0468 8308      STD	R16,0+Y
    0469 2400      CLR	R0
    046A E1E9      LDI	R30,0x19
    046B E0F1      LDI	R31,1
    046C E011      LDI	R17,1
    046D 37E9      CPI	R30,0x79
    046E 07F1      CPC	R31,R17
    046F F011      BEQ	0x0472
    0470 9201      ST	R0,Z+
    0471 CFFB      RJMP	0x046D
    0472 8300      STD	R16,0+Z
    0473 E0E9      LDI	R30,0x9
    0474 E0F8      LDI	R31,0x8
    0475 E6A0      LDI	R26,0x60
    0476 E0B0      LDI	R27,0
    0477 E018      LDI	R17,0x8
    0478 3CE2      CPI	R30,0xC2
    0479 07F1      CPC	R31,R17
    047A F021      BEQ	0x047F
    047B 95C8      LPM
    047C 9631      ADIW	R30,1
    047D 920D      ST	R0,X+
    047E CFF9      RJMP	0x0478
    047F D4C4      RCALL	_main
    0480 0000      NOP
_exit:
    0481 CFFF      RJMP	_exit
FILE: D:\ICC-AVR\Pc_At\time.c
(0000) #include<iom103.h>
(0001) unsigned char second;
(0002) unsigned char minute;
(0003) unsigned char hour;
(0004) unsigned char time[9];
(0005) unsigned char sound=0;
(0006) extern unsigned char keytime;
(0007) extern unsigned char keypad(void);
(0008) void timer0_init(void)
(0009) {
(0010)  TCCR0 = 0x00; //stop
_timer0_init:
    0482 2422      CLR	R2
    0483 BE23      OUT	P33,R2
(0011)  ASSR = 0x08; //set async mode
    0484 E088      LDI	R24,0x8
    0485 BF80      OUT	P30,R24
(0012)  TCNT0 = 0x00; //set count
    0486 BE22      OUT	P32,R2
(0013)  TCCR0 = 0x05; //start timer
    0487 E085      LDI	R24,5
    0488 BF83      OUT	P33,R24
(0014) }
    0489 9508      RET
_timer0_ovf_isr:
    048A 922A      ST	R2,-Y
    048B 938A      ST	R24,-Y
    048C 939A      ST	R25,-Y
    048D B62F      IN	R2,P3F
    048E 922A      ST	R2,-Y
(0015) #pragma interrupt_handler timer0_ovf_isr:17
(0016) void timer0_ovf_isr(void)
(0017) {
(0018)  TCNT0 = 0x00; //reload counter value
    048F 2422      CLR	R2
    0490 BE22      OUT	P32,R2
(0019)  keytime++;
    0491 91800129  LDS	R24,_keytime
    0493 5F8F      SUBI	R24,0xFF
    0494 93800129  STS	R24,_keytime
(0020)  if(second>=59)
    0496 91800126  LDS	R24,_second
    0498 338B      CPI	R24,0x3B
    0499 F0D8      BCS	0x04B5
(0021)    {
(0022)     second=0;
    049A 92200126  STS	R2,_second
(0023) 	if(minute>=59)
    049C 91800125  LDS	R24,_minute
    049E 338B      CPI	R24,0x3B
    049F F078      BCS	0x04AF
(0024) 	  {
(0025) 	   minute=0;
    04A0 92200125  STS	R2,_minute
(0026) 	   if(hour>=23)
    04A2 91800124  LDS	R24,_hour
    04A4 3187      CPI	R24,0x17
    04A5 F018      BCS	0x04A9
(0027) 	     {
(0028) 		  hour=0;
    04A6 92200124  STS	R2,_hour
(0029) 		 }
    04A8 C011      RJMP	0x04BA
(0030) 	   else
(0031) 	     {
(0032) 		  hour++;
    04A9 91800124  LDS	R24,_hour
    04AB 5F8F      SUBI	R24,0xFF
    04AC 93800124  STS	R24,_hour
(0033) 		 }	 
(0034) 	  }
    04AE C00B      RJMP	0x04BA
(0035) 	else
(0036) 	  {
(0037) 	   minute++; 
    04AF 91800125  LDS	R24,_minute
    04B1 5F8F      SUBI	R24,0xFF
    04B2 93800125  STS	R24,_minute
(0038) 	  }  
(0039)    }
    04B4 C005      RJMP	0x04BA
(0040)  else
(0041)    {
(0042)     second++;
    04B5 91800126  LDS	R24,_second
    04B7 5F8F      SUBI	R24,0xFF
    04B8 93800126  STS	R24,_second
(0043)    }  
(0044)  if((PIND&0b00100000)==0) sound=1;  
    04BA 9985      SBIC	P10,5
    04BB C003      RJMP	0x04BF
    04BC E081      LDI	R24,1
    04BD 93800060  STS	R24,0x60
(0045)  if (minute==0)
    04BF 90200125  LDS	R2,_minute
    04C1 2022      TST	R2
    04C2 F461      BNE	0x04CF
(0046)      {
(0047) 	  if (sound==0)
    04C3 90200060  LDS	R2,0x60
    04C5 2022      TST	R2
    04C6 F421      BNE	0x04CB
(0048) 	      TIMSK|=0x40;
    04C7 B787      IN	R24,P37
    04C8 6480      ORI	R24,0x40
    04C9 BF87      OUT	P37,R24
    04CA C00A      RJMP	0x04D5
(0049) 	  else
(0050) 	      TIMSK&=0xbf;	  
    04CB B787      IN	R24,P37
    04CC 7B8F      ANDI	R24,0xBF
    04CD BF87      OUT	P37,R24
(0051) 	 } 
    04CE C006      RJMP	0x04D5
(0052)  else
(0053)      {
(0054) 	  TIMSK&=0xbf;
    04CF B787      IN	R24,P37
    04D0 7B8F      ANDI	R24,0xBF
    04D1 BF87      OUT	P37,R24
(0055) 	  sound=0;
    04D2 2422      CLR	R2
    04D3 92200060  STS	R2,0x60
(0056) 	 }	   
(0057) }
    04D5 9029      LD	R2,Y+
    04D6 BE2F      OUT	P3F,R2
    04D7 9199      LD	R25,Y+
    04D8 9189      LD	R24,Y+
    04D9 9029      LD	R2,Y+
    04DA 9518      RETI
_timetoasc:
  temp                 --> R20
  i                    --> R22
    04DB 940E0D0B  CALL	push_gset2
    04DD 9724      SBIW	R28,4
(0058) void timetoasc(void)
(0059)    {
(0060)     unsigned char i;
(0061) 	unsigned char temp;
(0062) 	temp=hour;
    04DE 91400124  LDS	R20,_hour
(0063)     for(i=0;i<2;i++)
    04E0 2766      CLR	R22
    04E1 C017      RJMP	0x04F9
(0064) 	   {
(0065) 	    time[1-i]=temp%10+0x30;
    04E2 2E26      MOV	R2,R22
    04E3 2433      CLR	R3
    04E4 E0E1      LDI	R30,1
    04E5 E0F0      LDI	R31,0
    04E6 19E2      SUB	R30,R2
    04E7 09F3      SBC	R31,R3
    04E8 E18B      LDI	R24,0x1B
    04E9 E091      LDI	R25,1
    04EA 0FE8      ADD	R30,R24
    04EB 1FF9      ADC	R31,R25
    04EC E01A      LDI	R17,0xA
    04ED 2F04      MOV	R16,R20
    04EE 940E0C97  CALL	mod8u
    04F0 2F80      MOV	R24,R16
    04F1 5D80      SUBI	R24,0xD0
    04F2 8380      STD	R24,0+Z
(0066) 		temp=temp/10;
    04F3 E01A      LDI	R17,0xA
    04F4 2F04      MOV	R16,R20
    04F5 940E0C99  CALL	div8u
    04F7 2F40      MOV	R20,R16
(0067) 	   }
    04F8 9563      INC	R22
    04F9 3062      CPI	R22,2
    04FA F338      BCS	0x04E2
(0068) 	time[2]=':';   
    04FB E38A      LDI	R24,0x3A
    04FC 9380011D  STS	R24,_time+2
(0069) 	temp=minute;
    04FE 91400125  LDS	R20,_minute
(0070)     for(i=0;i<2;i++)
    0500 2766      CLR	R22
    0501 C017      RJMP	0x0519
(0071) 	   {
(0072) 	    time[4-i]=temp%10+0x30;
    0502 2E26      MOV	R2,R22
    0503 2433      CLR	R3
    0504 E0E4      LDI	R30,4
    0505 E0F0      LDI	R31,0
    0506 19E2      SUB	R30,R2
    0507 09F3      SBC	R31,R3
    0508 E18B      LDI	R24,0x1B
    0509 E091      LDI	R25,1
    050A 0FE8      ADD	R30,R24
    050B 1FF9      ADC	R31,R25
    050C E01A      LDI	R17,0xA
    050D 2F04      MOV	R16,R20
    050E 940E0C97  CALL	mod8u
    0510 2F80      MOV	R24,R16
    0511 5D80      SUBI	R24,0xD0
    0512 8380      STD	R24,0+Z
(0073) 		temp=temp/10;
    0513 E01A      LDI	R17,0xA
    0514 2F04      MOV	R16,R20
    0515 940E0C99  CALL	div8u
    0517 2F40      MOV	R20,R16
(0074) 	   }
    0518 9563      INC	R22
    0519 3062      CPI	R22,2
    051A F338      BCS	0x0502
(0075) 	time[5]=':';
    051B E38A      LDI	R24,0x3A
    051C 93800120  STS	R24,0x120
(0076) 	temp=second;
    051E 91400126  LDS	R20,_second
(0077)     for(i=0;i<2;i++)
    0520 2766      CLR	R22
    0521 C017      RJMP	0x0539
(0078) 	   {
(0079) 	    time[7-i]=temp%10+0x30;
    0522 2E26      MOV	R2,R22
    0523 2433      CLR	R3
    0524 E0E7      LDI	R30,7
    0525 E0F0      LDI	R31,0
    0526 19E2      SUB	R30,R2
    0527 09F3      SBC	R31,R3
    0528 E18B      LDI	R24,0x1B
    0529 E091      LDI	R25,1
    052A 0FE8      ADD	R30,R24
    052B 1FF9      ADC	R31,R25
    052C E01A      LDI	R17,0xA
    052D 2F04      MOV	R16,R20
    052E 940E0C97  CALL	mod8u
    0530 2F80      MOV	R24,R16
    0531 5D80      SUBI	R24,0xD0
    0532 8380      STD	R24,0+Z
(0080) 		temp=temp/10;
    0533 E01A      LDI	R17,0xA
    0534 2F04      MOV	R16,R20
    0535 940E0C99  CALL	div8u
    0537 2F40      MOV	R20,R16
(0081) 	   }
    0538 9563      INC	R22
    0539 3062      CPI	R22,2
    053A F338      BCS	0x0522
(0082) 	time[8]=0;
    053B 2422      CLR	R2
    053C 92200123  STS	R2,0x123
    053E 940E0D9D  CALL	0xD9D
(0083) 	cls(0,3,1,8);
    0540 D1FA      RCALL	_cls
    0541 940E0DD6  CALL	0xDD6
(0084) 	asc_tran(4,52,time);
    0543 D289      RCALL	_asc_tran
    0544 0000      NOP
(0085)    }
    0545 9624      ADIW	R28,4
    0546 940E0D1B  CALL	pop_gset2
    0548 9508      RET
(0086) void timer2_init(void)
(0087) {
(0088)  TCCR2 = 0x00; 
_timer2_init:
    0549 2422      CLR	R2
    054A BC25      OUT	P25,R2
(0089)  TCNT2 = 0xe1; 
    054B EE81      LDI	R24,0xE1
    054C BD84      OUT	P24,R24
(0090)  TCCR2 = 0x03;
    054D E083      LDI	R24,3
    054E BD85      OUT	P25,R24
(0091) }
    054F 9508      RET
_timer2_ovf_isr:
    0550 922A      ST	R2,-Y
    0551 923A      ST	R3,-Y
    0552 938A      ST	R24,-Y
    0553 939A      ST	R25,-Y
    0554 93EA      ST	R30,-Y
    0555 B62F      IN	R2,P3F
    0556 922A      ST	R2,-Y
(0092) #pragma interrupt_handler timer2_ovf_isr:11
(0093) void timer2_ovf_isr(void)
(0094) {
(0095)   static unsigned int i;
(0096)   TCNT2 = 0xe1; //reload counter value
    0557 EE81      LDI	R24,0xE1
    0558 BD84      OUT	P24,R24
(0097)   i++;
    0559 9190011A  LDS	R25,0x11A
    055B 91800119  LDS	R24,0x119
    055D 9601      ADIW	R24,1
    055E 9390011A  STS	R25,0x11A
    0560 93800119  STS	R24,0x119
(0098)   if(i<800)
    0562 3280      CPI	R24,0x20
    0563 E0E3      LDI	R30,3
    0564 079E      CPC	R25,R30
    0565 F420      BCC	0x056A
(0099)      {
(0100)       PORTB^=0x80;
    0566 E880      LDI	R24,0x80
    0567 B228      IN	R2,P18
    0568 2628      EOR	R2,R24
    0569 BA28      OUT	P18,R2
(0101) 	 }
(0102)   if(i>1600)
    056A E480      LDI	R24,0x40
    056B E096      LDI	R25,6
    056C 9030011A  LDS	R3,0x11A
    056E 90200119  LDS	R2,0x119
    0570 1582      CP	R24,R2
    0571 0593      CPC	R25,R3
    0572 F430      BCC	0x0579
(0103)       i=0; 	  	
    0573 2422      CLR	R2
    0574 2433      CLR	R3
    0575 9230011A  STS	R3,0x11A
    0577 92200119  STS	R2,0x119
(0104) }   
    0579 9029      LD	R2,Y+
    057A BE2F      OUT	P3F,R2
    057B 91E9      LD	R30,Y+
    057C 9199      LD	R25,Y+
    057D 9189      LD	R24,Y+
    057E 9039      LD	R3,Y+
    057F 9029      LD	R2,Y+
    0580 9518      RETI
_timecal:
  step                 --> R10
  temp                 --> R20
    0581 940E0D17  CALL	push_gset5
    0583 9724      SBIW	R28,4
(0105) void timecal(void)
(0106)    {
(0107)     unsigned char temp,step;
(0108) 	ocmj_write(0xf4);
    0584 EF04      LDI	R16,0xF4
    0585 E010      LDI	R17,0
    0586 D181      RCALL	_ocmj_write
    0587 0000      NOP
(0109) 	hz_tran(2,1,"输入时间");
    0588 E788      LDI	R24,0x78
    0589 940E0D98  CALL	0xD98
    058B E030      LDI	R19,0
    058C E002      LDI	R16,2
    058D E010      LDI	R17,0
    058E D21A      RCALL	_hz_tran
    058F 0000      NOP
(0110) 	hz_tran(1,2,"按");
    0590 E785      LDI	R24,0x75
    0591 940E0DBC  CALL	0xDBC
    0593 E030      LDI	R19,0
    0594 E001      LDI	R16,1
    0595 E010      LDI	R17,0
    0596 D212      RCALL	_hz_tran
    0597 0000      NOP
(0111) 	asc_tran(4,36,"SHIFT");
    0598 E68F      LDI	R24,0x6F
    0599 E090      LDI	R25,0
    059A 8388      STD	R24,0+Y
    059B 8399      STD	R25,1+Y
    059C E224      LDI	R18,0x24
    059D E030      LDI	R19,0
    059E E004      LDI	R16,4
    059F E010      LDI	R17,0
    05A0 D22C      RCALL	_asc_tran
    05A1 0000      NOP
(0112) 	hz_tran(5,2,"确定");
    05A2 E68A      LDI	R24,0x6A
    05A3 940E0DBC  CALL	0xDBC
    05A5 E030      LDI	R19,0
    05A6 E005      LDI	R16,5
    05A7 E010      LDI	R17,0
    05A8 D200      RCALL	_hz_tran
    05A9 0000      NOP
(0113) 	asc_tran(4,52,"__:__:__");
    05AA E681      LDI	R24,0x61
    05AB E090      LDI	R25,0
    05AC 8388      STD	R24,0+Y

⌨️ 快捷键说明

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