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

📄 rtc.lis

📁 基于MEGA8的电子钟源代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00DA 10910100          lds R17,_year+1
 00DE 0E940000          xcall mod16u
 00E2 0030              cpi R16,0
 00E4 0107              cpc R16,R17
 00E6 09F0              breq X6
 00E8 3FC0              xjmp L22
 00EA           X6:
 00EA           X2:
 00EA           L26:
 00EA 80910200          lds R24,_month
 00EE 8430              cpi R24,4
 00F0 09F0              breq X7
 00F2 3AC0              xjmp L22
 00F4           X7:
 00F4                   .dbline 71
 00F4           ;                                         mon[1]=28;    }  
 00F4 8CE1              ldi R24,28
 00F6 80930100          sts _mon+1,R24
 00FA                   .dbline 71
 00FA 36C0              xjmp L22
 00FC           L21:
 00FC                   .dbline 73
 00FC           ;                                            else
 00FC           ;                                                {
 00FC                   .dbline 74
 00FC           ;                                                  day=0;
 00FC 2224              clr R2
 00FE 20920300          sts _day,R2
 0102                   .dbline 75
 0102           ;                                                   if(month<13)
 0102 80910200          lds R24,_month
 0106 8D30              cpi R24,13
 0108 20F4              brsh L29
 010A                   .dbline 76
 010A           ;                                                         month++;
 010A 8F5F              subi R24,255    ; addi 1
 010C 80930200          sts _month,R24
 0110 09C0              xjmp L30
 0112           L29:
 0112                   .dbline 78
 0112           ;                                                           else
 0112           ;                                                               year++;
 0112 80910000          lds R24,_year
 0116 90910100          lds R25,_year+1
 011A 0196              adiw R24,1
 011C 90930100          sts _year+1,R25
 0120 80930000          sts _year,R24
 0124           L30:
 0124                   .dbline 79
 0124           ;                                                                       if((((year%4)==0)&&((year%100)!=0))||((year%400)==0))
 0124 80910000          lds R24,_year
 0128 90910100          lds R25,_year+1
 012C 8370              andi R24,3
 012E 9070              andi R25,0
 0130 8030              cpi R24,0
 0132 8907              cpc R24,R25
 0134 59F4              brne L34
 0136           X3:
 0136 24E6              ldi R18,100
 0138 30E0              ldi R19,0
 013A 00910000          lds R16,_year
 013E 10910100          lds R17,_year+1
 0142 0E940000          xcall mod16u
 0146 0030              cpi R16,0
 0148 0107              cpc R16,R17
 014A 59F4              brne L33
 014C           X4:
 014C           L34:
 014C 20E9              ldi R18,400
 014E 31E0              ldi R19,1
 0150 00910000          lds R16,_year
 0154 10910100          lds R17,_year+1
 0158 0E940000          xcall mod16u
 015C 0030              cpi R16,0
 015E 0107              cpc R16,R17
 0160 19F4              brne L31
 0162           X5:
 0162           L33:
 0162                   .dbline 80
 0162           ;                                                                      mon[1]=29;
 0162 8DE1              ldi R24,29
 0164 80930100          sts _mon+1,R24
 0168           L31:
 0168                   .dbline 81
 0168           ;                                                }      
 0168           L22:
 0168                   .dbline 82
 0168           ;                                       }
 0168           L20:
 0168                   .dbline 83
 0168           ;                               }
 0168           L18:
 0168                   .dbline 84
 0168           ;                       }                        
 0168                   .dbline -2
 0168           L14:
 0168                   .dbline 0 ; func end
 0168 0895              ret
 016A                   .dbend
 016A                   .dbfunc e timer2_init _timer2_init fV
                        .even
 016A           _timer2_init::
 016A                   .dbline -1
 016A                   .dbline 89
 016A           ;               }                         
 016A           ;       
 016A           ; //初始化
 016A           ; void timer2_init(void)
 016A           ; {
 016A                   .dbline 90
 016A           ;  TCCR2 = 0x00;
 016A 2224              clr R2
 016C 25BC              out 0x25,R2
 016E                   .dbline 91
 016E           ;  ASSR  = 1<<AS2; //异步时钟
 016E 88E0              ldi R24,8
 0170 82BD              out 0x22,R24
 0172                   .dbline 92
 0172           ;  TCNT2 = 0xE0; //定时时间1秒
 0172 80EE              ldi R24,224
 0174 84BD              out 0x24,R24
 0176                   .dbline 93
 0176           ;  TCCR2 = (1<<CS22)|(1<<CS21)|(1<<CS20); //分频比1024,0x07
 0176 87E0              ldi R24,7
 0178 85BD              out 0x25,R24
 017A                   .dbline -2
 017A           L36:
 017A                   .dbline 0 ; func end
 017A 0895              ret
 017C                   .dbend
                        .area vector(rom, abs)
                        .org 16
 0010 0C94BE00          jmp _timer2_ovf_isr
                        .area text(rom, con, rel)
 017C                   .dbfile G:\AVR系列\RTC\rtc.c
 017C                   .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
                        .even
 017C           _timer2_ovf_isr::
 017C 8A93              st -y,R24
 017E 9A93              st -y,R25
 0180 8FB7              in R24,0x3f
 0182 8A93              st -y,R24
 0184                   .dbline -1
 0184                   .dbline 97
 0184           ; }
 0184           ; #pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
 0184           ; void timer2_ovf_isr(void)
 0184           ; {
 0184                   .dbline 98
 0184           ;  TCNT2 = 0xE0;
 0184 80EE              ldi R24,224
 0186 84BD              out 0x24,R24
 0188                   .dbline 99
 0188           ;  second++;
 0188 80910400          lds R24,_second
 018C 8F5F              subi R24,255    ; addi 1
 018E 80930400          sts _second,R24
 0192                   .dbline -2
 0192           L37:
 0192 8991              ld R24,y+
 0194 8FBF              out 0x3f,R24
 0196 9991              ld R25,y+
 0198 8991              ld R24,y+
 019A                   .dbline 0 ; func end
 019A 1895              reti
 019C                   .dbend
 019C                   .dbfunc e put_time _put_time fV
                        .even
 019C           _put_time::
 019C                   .dbline -1
 019C                   .dbline 102
 019C           ; }
 019C           ; void put_time(void)
 019C           ;  {
 019C                   .dbline 103
 019C           ;   putchar(year/1000+0x30);
 019C 28EE              ldi R18,1000
 019E 33E0              ldi R19,3
 01A0 00910000          lds R16,_year
 01A4 10910100          lds R17,_year+1
 01A8 0E940000          xcall div16u
 01AC 005D              subi R16,208  ; offset = 48
 01AE 1F4F              sbci R17,255
 01B0 27DF              xcall _putchar
 01B2                   .dbline 104
 01B2           ;   putchar(year/100+0x30);
 01B2 24E6              ldi R18,100
 01B4 30E0              ldi R19,0
 01B6 00910000          lds R16,_year
 01BA 10910100          lds R17,_year+1
 01BE 0E940000          xcall div16u
 01C2 005D              subi R16,208  ; offset = 48
 01C4 1F4F              sbci R17,255
 01C6 1CDF              xcall _putchar
 01C8                   .dbline 105
 01C8           ;   putchar(year/10+0x30);
 01C8 2AE0              ldi R18,10
 01CA 30E0              ldi R19,0
 01CC 00910000          lds R16,_year
 01D0 10910100          lds R17,_year+1
 01D4 0E940000          xcall div16u
 01D8 005D              subi R16,208  ; offset = 48
 01DA 1F4F              sbci R17,255
 01DC 11DF              xcall _putchar
 01DE                   .dbline 106
 01DE           ;   putchar(year%10+0x30);
 01DE 2AE0              ldi R18,10
 01E0 30E0              ldi R19,0
 01E2 00910000          lds R16,_year
 01E6 10910100          lds R17,_year+1
 01EA 0E940000          xcall mod16u
 01EE 005D              subi R16,208  ; offset = 48
 01F0 1F4F              sbci R17,255
 01F2 06DF              xcall _putchar
 01F4                   .dbline 107
 01F4           ;   putchar(':');
 01F4 0AE3              ldi R16,58
 01F6 04DF              xcall _putchar
 01F8                   .dbline 108
 01F8           ;    putchar(month/10+0x30);
 01F8 1AE0              ldi R17,10
 01FA 00910200          lds R16,_month
 01FE 0E940000          xcall div8u
 0202 005D              subi R16,208    ; addi 48
 0204 FDDE              xcall _putchar
 0206                   .dbline 109
 0206           ;   putchar(month%10+0x30);
 0206 1AE0              ldi R17,10
 0208 00910200          lds R16,_month
 020C 0E940000          xcall mod8u
 0210 005D              subi R16,208    ; addi 48
 0212 F6DE              xcall _putchar
 0214                   .dbline 110
 0214           ;   putchar(':');
 0214 0AE3              ldi R16,58
 0216 F4DE              xcall _putchar
 0218                   .dbline 111
 0218           ;   putchar(day/10+0x30);
 0218 1AE0              ldi R17,10
 021A 00910300          lds R16,_day
 021E 0E940000          xcall div8u
 0222 005D              subi R16,208    ; addi 48
 0224 EDDE              xcall _putchar
 0226                   .dbline 112
 0226           ;   putchar(day%10+0x30);
 0226 1AE0              ldi R17,10
 0228 00910300          lds R16,_day
 022C 0E940000          xcall mod8u
 0230 005D              subi R16,208    ; addi 48
 0232 E6DE              xcall _putchar
 0234                   .dbline 113
 0234           ;   putchar(':');
 0234 0AE3              ldi R16,58
 0236 E4DE              xcall _putchar
 0238                   .dbline 114
 0238           ;   putchar(hour/10+0x30);
 0238 1AE0              ldi R17,10
 023A 00910600          lds R16,_hour
 023E 0E940000          xcall div8u
 0242 005D              subi R16,208    ; addi 48
 0244 DDDE              xcall _putchar
 0246                   .dbline 115
 0246           ;   putchar(hour%10+0x30);
 0246 1AE0              ldi R17,10
 0248 00910600          lds R16,_hour
 024C 0E940000          xcall mod8u
 0250 005D              subi R16,208    ; addi 48
 0252 D6DE              xcall _putchar
 0254                   .dbline 116
 0254           ;   putchar(':');
 0254 0AE3              ldi R16,58
 0256 D4DE              xcall _putchar
 0258                   .dbline 117
 0258           ;   putchar(minute/10+0x30);
 0258 1AE0              ldi R17,10
 025A 00910500          lds R16,_minute
 025E 0E940000          xcall div8u
 0262 005D              subi R16,208    ; addi 48
 0264 CDDE              xcall _putchar
 0266                   .dbline 118

⌨️ 快捷键说明

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