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

📄 rtc.lst

📁 基于MEGA8的电子钟源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0113)   putchar(':');
    016B E30A      LDI	R16,0x3A
    016C DEE4      RCALL	_putchar
(0114)   putchar(hour/10+0x30);
    016D E01A      LDI	R17,0xA
    016E 91000072  LDS	R16,hour
    0170 940E0255  CALL	div8u
    0172 5D00      SUBI	R16,0xD0
    0173 DEDD      RCALL	_putchar
(0115)   putchar(hour%10+0x30);
    0174 E01A      LDI	R17,0xA
    0175 91000072  LDS	R16,hour
    0177 940E0253  CALL	mod8u
    0179 5D00      SUBI	R16,0xD0
    017A DED6      RCALL	_putchar
(0116)   putchar(':');
    017B E30A      LDI	R16,0x3A
    017C DED4      RCALL	_putchar
(0117)   putchar(minute/10+0x30);
    017D E01A      LDI	R17,0xA
    017E 91000071  LDS	R16,minute
    0180 940E0255  CALL	div8u
    0182 5D00      SUBI	R16,0xD0
    0183 DECD      RCALL	_putchar
(0118)   putchar(minute%10+0x30);
    0184 E01A      LDI	R17,0xA
    0185 91000071  LDS	R16,minute
    0187 940E0253  CALL	mod8u
    0189 5D00      SUBI	R16,0xD0
    018A DEC6      RCALL	_putchar
(0119)   putchar(':');
    018B E30A      LDI	R16,0x3A
    018C DEC4      RCALL	_putchar
(0120)   putchar(second/10+0x30);
    018D E01A      LDI	R17,0xA
    018E 91000070  LDS	R16,second
    0190 940E0255  CALL	div8u
    0192 5D00      SUBI	R16,0xD0
    0193 DEBD      RCALL	_putchar
(0121)   putchar(second%10+0x30);  
    0194 E01A      LDI	R17,0xA
    0195 91000070  LDS	R16,second
    0197 940E0253  CALL	mod8u
    0199 5D00      SUBI	R16,0xD0
    019A DEB6      RCALL	_putchar
    019B 9508      RET
_uart0_rx_isr:
  i                    --> R20
    019C 940E029A  CALL	push_lset
    019E 940E0283  CALL	push_gset1
(0122)  }
(0123) //UART接收中断 
(0124) #pragma interrupt_handler uart0_rx_isr:iv_USART_RXC
(0125) void uart0_rx_isr(void)
(0126) {
(0127)  unsigned i;
(0128)  i=UDR;
    01A0 B14C      IN	R20,0x0C
    01A1 2755      CLR	R21
(0129)  if (i=='t')
    01A2 3744      CPI	R20,0x74
    01A3 E0E0      LDI	R30,0
    01A4 075E      CPC	R21,R30
    01A5 F009      BEQ	0x01A7
    01A6 C07B      RJMP	0x0222
(0130)    {
(0131)     year=(getchar()-0x30)*1000;
    01A7 DEAD      RCALL	_getchar
    01A8 2F20      MOV	R18,R16
    01A9 2733      CLR	R19
    01AA EE08      LDI	R16,0xE8
    01AB E013      LDI	R17,3
    01AC 940E026B  CALL	empy16s
    01AE 01C8      MOVW	R24,R16
    01AF 5880      SUBI	R24,0x80
    01B0 4B9B      SBCI	R25,0xBB
    01B1 9390006D  STS	year+1,R25
    01B3 9380006C  STS	year,R24
(0132) 	year=(getchar()-0x30)*100;
    01B5 DE9F      RCALL	_getchar
    01B6 E684      LDI	R24,0x64
    01B7 9F80      MUL	R24,R16
    01B8 01C0      MOVW	R24,R0
    01B9 5C80      SUBI	R24,0xC0
    01BA 4192      SBCI	R25,0x12
    01BB 9390006D  STS	year+1,R25
    01BD 9380006C  STS	year,R24
(0133) 	year=(getchar()-0x30)*10;
    01BF DE95      RCALL	_getchar
    01C0 E08A      LDI	R24,0xA
    01C1 9F80      MUL	R24,R16
    01C2 01C0      MOVW	R24,R0
    01C3 5E80      SUBI	R24,0xE0
    01C4 4091      SBCI	R25,1
    01C5 9390006D  STS	year+1,R25
    01C7 9380006C  STS	year,R24
(0134) 	year=year+(getchar()-0x30);
    01C9 DE8B      RCALL	_getchar
    01CA 2F80      MOV	R24,R16
    01CB 2799      CLR	R25
    01CC 97C0      SBIW	R24,0x30
    01CD 9020006C  LDS	R2,year
    01CF 9030006D  LDS	R3,year+1
    01D1 0E28      ADD	R2,R24
    01D2 1E39      ADC	R3,R25
    01D3 9230006D  STS	year+1,R3
    01D5 9220006C  STS	year,R2
(0135) 	month=(getchar()-0x30)*10;
    01D7 DE7D      RCALL	_getchar
    01D8 E08A      LDI	R24,0xA
    01D9 9F80      MUL	R24,R16
    01DA 2D80      MOV	R24,R0
    01DB 5E80      SUBI	R24,0xE0
    01DC 9380006E  STS	month,R24
(0136) 	month=month+(getchar()-0x30);
    01DE DE76      RCALL	_getchar
    01DF 2F80      MOV	R24,R16
    01E0 5380      SUBI	R24,0x30
    01E1 9020006E  LDS	R2,month
    01E3 0E28      ADD	R2,R24
    01E4 9220006E  STS	month,R2
(0137) 	day=(getchar()-0x30)*10;
    01E6 DE6E      RCALL	_getchar
    01E7 E08A      LDI	R24,0xA
    01E8 9F80      MUL	R24,R16
    01E9 2D80      MOV	R24,R0
    01EA 5E80      SUBI	R24,0xE0
    01EB 9380006F  STS	day,R24
(0138) 	day=day+(getchar()-0x30);
    01ED DE67      RCALL	_getchar
    01EE 2F80      MOV	R24,R16
    01EF 5380      SUBI	R24,0x30
    01F0 9020006F  LDS	R2,day
    01F2 0E28      ADD	R2,R24
    01F3 9220006F  STS	day,R2
(0139)     hour=(getchar()-0x30)*10;
    01F5 DE5F      RCALL	_getchar
    01F6 E08A      LDI	R24,0xA
    01F7 9F80      MUL	R24,R16
    01F8 2D80      MOV	R24,R0
    01F9 5E80      SUBI	R24,0xE0
    01FA 93800072  STS	hour,R24
(0140) 	hour=hour+(getchar()-0x30);
    01FC DE58      RCALL	_getchar
    01FD 2F80      MOV	R24,R16
    01FE 5380      SUBI	R24,0x30
    01FF 90200072  LDS	R2,hour
    0201 0E28      ADD	R2,R24
    0202 92200072  STS	hour,R2
(0141) 	minute=(getchar()-0x30)*10;
    0204 DE50      RCALL	_getchar
    0205 E08A      LDI	R24,0xA
    0206 9F80      MUL	R24,R16
    0207 2D80      MOV	R24,R0
    0208 5E80      SUBI	R24,0xE0
    0209 93800071  STS	minute,R24
(0142) 	minute=minute+(getchar()-0x30);
    020B DE49      RCALL	_getchar
    020C 2F80      MOV	R24,R16
    020D 5380      SUBI	R24,0x30
    020E 90200071  LDS	R2,minute
    0210 0E28      ADD	R2,R24
    0211 92200071  STS	minute,R2
(0143) 	second=(getchar()-0x30)*10;
    0213 DE41      RCALL	_getchar
    0214 E08A      LDI	R24,0xA
    0215 9F80      MUL	R24,R16
    0216 2D80      MOV	R24,R0
    0217 5E80      SUBI	R24,0xE0
    0218 93800070  STS	second,R24
(0144) 	second=second+(getchar()-0x30);
    021A DE3A      RCALL	_getchar
    021B 2F80      MOV	R24,R16
    021C 5380      SUBI	R24,0x30
    021D 90200070  LDS	R2,second
    021F 0E28      ADD	R2,R24
    0220 92200070  STS	second,R2
(0145)    }
    0222 940E0286  CALL	pop_gset1
    0224 940E02B1  CALL	pop_lset
    0226 9518      RETI
(0146) } 
(0147) //main程序
(0148) void main(void)
(0149) {
(0150)  unsigned char second_old;
(0151)  uart_init(); 
_main:
  second_old           --> R20
    0227 DE45      RCALL	_uart_init
(0152)  timer2_init();
    0228 DEDD      RCALL	_timer2_init
(0153)  TIMSK =1<<TOIE2;
    0229 E480      LDI	R24,0x40
    022A BF89      OUT	0x39,R24
(0154) 
(0155)  SEI();
    022B 9478      BSET	7
    022C C008      RJMP	0x0235
(0156)  while(1)
(0157)    {
(0158)     if (second!=second_old)
    022D 90200070  LDS	R2,second
    022F 1624      CP	R2,R20
    0230 F021      BEQ	0x0235
(0159)         {
(0160) 		 time();
    0231 DE44      RCALL	_time
(0161) 		 second_old=second;
    0232 91400070  LDS	R20,second
(0162) 		 put_time();
FILE: <library>
    0234 DEEA      RCALL	_put_time
    0235 CFF7      RJMP	0x022D
    0236 9508      RET
mod16u:
    0237 9468      BSET	6
    0238 C001      RJMP	xdiv16u
div16u:
    0239 94E8      BCLR	6
xdiv16u:
    023A 92EA      ST	R14,-Y
    023B 92FA      ST	R15,-Y
    023C 938A      ST	R24,-Y
    023D 24EE      CLR	R14
    023E 24FF      CLR	R15
    023F E180      LDI	R24,0x10
    0240 0F00      LSL	R16
    0241 1F11      ROL	R17
    0242 1CEE      ROL	R14
    0243 1CFF      ROL	R15
    0244 16E2      CP	R14,R18
    0245 06F3      CPC	R15,R19
    0246 F018      BCS	0x024A
    0247 1AE2      SUB	R14,R18
    0248 0AF3      SBC	R15,R19
    0249 9503      INC	R16
    024A 958A      DEC	R24
    024B F7A1      BNE	0x0240
    024C F416      BRTC	0x024F
    024D 2D0E      MOV	R16,R14
    024E 2D1F      MOV	R17,R15
    024F 9189      LD	R24,Y+
    0250 90F9      LD	R15,Y+
    0251 90E9      LD	R14,Y+
    0252 9508      RET
mod8u:
    0253 9468      BSET	6
    0254 C001      RJMP	xdiv8u
div8u:
    0255 94E8      BCLR	6
xdiv8u:
    0256 932A      ST	R18,-Y
    0257 92FA      ST	R15,-Y
    0258 92EA      ST	R14,-Y
    0259 24FF      CLR	R15
    025A 24EE      CLR	R14
    025B E120      LDI	R18,0x10
    025C 0F00      LSL	R16
    025D 1CFF      ROL	R15
    025E 1CEE      ROL	R14
    025F 16E1      CP	R14,R17
    0260 F010      BCS	0x0263
    0261 1AE1      SUB	R14,R17
    0262 9503      INC	R16
    0263 952A      DEC	R18
    0264 F7B9      BNE	0x025C
    0265 F40E      BRTC	0x0267
    0266 2D0E      MOV	R16,R14
    0267 90E9      LD	R14,Y+
    0268 90F9      LD	R15,Y+
    0269 9129      LD	R18,Y+
    026A 9508      RET
empy16s:
    026B 920A      ST	R0,-Y
    026C 921A      ST	R1,-Y
    026D 938A      ST	R24,-Y
    026E 939A      ST	R25,-Y
    026F 9F02      MUL	R16,R18
    0270 01C0      MOVW	R24,R0
    0271 9F12      MUL	R17,R18
    0272 0D90      ADD	R25,R0
    0273 9F03      MUL	R16,R19
    0274 0D90      ADD	R25,R0
    0275 018C      MOVW	R16,R24
    0276 9199      LD	R25,Y+
    0277 9189      LD	R24,Y+
    0278 9019      LD	R1,Y+
    0279 9009      LD	R0,Y+
    027A 9508      RET
push_gset5:
    027B 92FA      ST	R15,-Y
    027C 92EA      ST	R14,-Y
push_gset4:
    027D 92DA      ST	R13,-Y
    027E 92CA      ST	R12,-Y
push_gset3:
    027F 92BA      ST	R11,-Y
    0280 92AA      ST	R10,-Y
push_gset2:
    0281 937A      ST	R23,-Y
    0282 936A      ST	R22,-Y
push_gset1:
    0283 935A      ST	R21,-Y
    0284 934A      ST	R20,-Y
    0285 9508      RET
pop_gset1:
    0286 E0E1      LDI	R30,1
pop:
    0287 9149      LD	R20,Y+
    0288 9159      LD	R21,Y+
    0289 FDE0      SBRC	R30,0
    028A 9508      RET
    028B 9169      LD	R22,Y+
    028C 9179      LD	R23,Y+
    028D FDE1      SBRC	R30,1
    028E 9508      RET
    028F 90A9      LD	R10,Y+
    0290 90B9      LD	R11,Y+
    0291 FDE2      SBRC	R30,2
    0292 9508      RET
    0293 90C9      LD	R12,Y+
    0294 90D9      LD	R13,Y+
    0295 FDE3      SBRC	R30,3
    0296 9508      RET
    0297 90E9      LD	R14,Y+
    0298 90F9      LD	R15,Y+
    0299 9508      RET
push_lset:
    029A 93FA      ST	R31,-Y
    029B 93EA      ST	R30,-Y
    029C 93BA      ST	R27,-Y
    029D 93AA      ST	R26,-Y
    029E 939A      ST	R25,-Y
    029F 938A      ST	R24,-Y
    02A0 933A      ST	R19,-Y
    02A1 932A      ST	R18,-Y
    02A2 931A      ST	R17,-Y
    02A3 930A      ST	R16,-Y
    02A4 929A      ST	R9,-Y
    02A5 928A      ST	R8,-Y
    02A6 927A      ST	R7,-Y
    02A7 926A      ST	R6,-Y
    02A8 925A      ST	R5,-Y
    02A9 924A      ST	R4,-Y
    02AA 923A      ST	R3,-Y
    02AB 922A      ST	R2,-Y
    02AC 921A      ST	R1,-Y
    02AD 920A      ST	R0,-Y
    02AE B60F      IN	R0,0x3F
    02AF 920A      ST	R0,-Y
    02B0 9508      RET
pop_lset:
    02B1 9009      LD	R0,Y+
    02B2 BE0F      OUT	0x3F,R0
    02B3 9009      LD	R0,Y+
    02B4 9019      LD	R1,Y+
    02B5 9029      LD	R2,Y+
    02B6 9039      LD	R3,Y+
    02B7 9049      LD	R4,Y+
    02B8 9059      LD	R5,Y+
    02B9 9069      LD	R6,Y+
    02BA 9079      LD	R7,Y+
    02BB 9089      LD	R8,Y+
    02BC 9099      LD	R9,Y+
    02BD 9109      LD	R16,Y+
    02BE 9119      LD	R17,Y+
    02BF 9129      LD	R18,Y+
    02C0 9139      LD	R19,Y+
    02C1 9189      LD	R24,Y+
    02C2 9199      LD	R25,Y+
    02C3 91A9      LD	R26,Y+
    02C4 91B9      LD	R27,Y+
    02C5 91E9      LD	R30,Y+
    02C6 91F9      LD	R31,Y+
    02C7 9508      RET

⌨️ 快捷键说明

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