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

📄 rtc.lis

📁 单片机开发资料光盘-双龙-686M.zip
💻 LIS
字号:
                        .module rtc.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
 0000                   .dbfunc e time _time fV
                        .even
 0000           _time::
 0000                   .dbline -1
 0000                   .dbline 19
 0000           ; /******************************************/
 0000           ; /*           广州天河双龙电子公司         */
 0000           ; /*           http://www.sl.com.cn         */ 
 0000           ; /*              实时时钟演示程序          */
 0000           ; /*            作者:ntzwq@wx88.net         */
 0000           ; /*               2002年5月12日            */
 0000           ; /*  目标MCU:MEGA8   晶振:内部RC(INT) 8MHZ */
 0000           ; /******************************************/
 0000           ; //说明:ATMEGA8只有在使用内部RC振荡器,T2使用异步时钟的
 0000           ; //      情况下,外接的32.768KHZ的晶振才起作用。
 0000           ; #include<iom8v.h>
 0000           ; #include<macros.h>
 0000           ; #include"uart.h"
 0000           ; unsigned char hour;
 0000           ; unsigned char minute;
 0000           ; unsigned char second;
 0000           ; /*                    调整时间                         */
 0000           ; void time(void)
 0000           ;        {
 0000                   .dbline 20
 0000           ;         if (second<60)
 0000 80910000          lds R24,_second
 0004 8C33              cpi R24,60
 0006 08F4              brsh L2
 0008                   .dbline 21
 0008           ;                 return;
 0008 1BC0              rjmp L1
 000A           L2:
 000A                   .dbline 23
 000A           ;         else
 000A           ;           {
 000A                   .dbline 24
 000A           ;                second-=60;
 000A 80910000          lds R24,_second
 000E 8C53              subi R24,60
 0010 80930000          sts _second,R24
 0014                   .dbline 25
 0014           ;                if (minute<59)
 0014 80910100          lds R24,_minute
 0018 8B33              cpi R24,59
 001A 20F4              brsh L4
 001C                   .dbline 26
 001C           ;                   minute++;
 001C 8F5F              subi R24,255    ; addi 1
 001E 80930100          sts _minute,R24
 0022 0EC0              rjmp L5
 0024           L4:
 0024                   .dbline 28
 0024           ;                else
 0024           ;                  {
 0024                   .dbline 29
 0024           ;                   minute=0;
 0024 2224              clr R2
 0026 20920100          sts _minute,R2
 002A                   .dbline 30
 002A           ;                       if (hour<23)
 002A 80910200          lds R24,_hour
 002E 8731              cpi R24,23
 0030 20F4              brsh L6
 0032                   .dbline 31
 0032           ;                          hour++;
 0032 8F5F              subi R24,255    ; addi 1
 0034 80930200          sts _hour,R24
 0038 03C0              rjmp L7
 003A           L6:
 003A                   .dbline 33
 003A           ;                       else
 003A           ;                          hour=0;   
 003A 2224              clr R2
 003C 20920200          sts _hour,R2
 0040           L7:
 0040                   .dbline 34
 0040           ;                  }    
 0040           L5:
 0040                   .dbline 35
 0040           ;               }                         
 0040                   .dbline -2
 0040                   .dbline 36
 0040           ;        }
 0040           L1:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbend
 0042                   .dbfunc e timer2_init _timer2_init fV
                        .even
 0042           _timer2_init::
 0042                   .dbline -1
 0042                   .dbline 39
 0042           ; //初始化
 0042           ; void timer2_init(void)
 0042           ; {
 0042                   .dbline 40
 0042           ;  TCCR2 = 0x00;
 0042 2224              clr R2
 0044 25BC              out 0x25,R2
 0046                   .dbline 41
 0046           ;  ASSR  = 1<<AS2; //异步时钟
 0046 88E0              ldi R24,8
 0048 82BD              out 0x22,R24
 004A                   .dbline 42
 004A           ;  TCNT2 = 0xE0; //定时时间1秒
 004A 80EE              ldi R24,224
 004C 84BD              out 0x24,R24
 004E                   .dbline 43
 004E           ;  TCCR2 = (1<<CS22)|(1<<CS21)|(1<<CS20); //分频比1024,0x07
 004E 87E0              ldi R24,7
 0050 85BD              out 0x25,R24
 0052                   .dbline -2
 0052                   .dbline 44
 0052           ; }
 0052           L8:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
                        .area vector(rom, abs)
                        .org 8
 0008 2AC0              rjmp _timer2_ovf_isr
                        .area text(rom, con, rel)
 0054                   .dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
 0054                   .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
                        .even
 0054           _timer2_ovf_isr::
 0054 8A93              st -y,R24
 0056 9A93              st -y,R25
 0058 8FB7              in R24,0x3f
 005A 8A93              st -y,R24
 005C                   .dbline -1
 005C                   .dbline 47
 005C           ; #pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
 005C           ; void timer2_ovf_isr(void)
 005C           ; {
 005C                   .dbline 48
 005C           ;  TCNT2 = 0xE0;
 005C 80EE              ldi R24,224
 005E 84BD              out 0x24,R24
 0060                   .dbline 49
 0060           ;  second++;
 0060 80910000          lds R24,_second
 0064 8F5F              subi R24,255    ; addi 1
 0066 80930000          sts _second,R24
 006A                   .dbline -2
 006A                   .dbline 50
 006A           ; }
 006A           L9:
 006A 8991              ld R24,y+
 006C 8FBF              out 0x3f,R24
 006E 9991              ld R25,y+
 0070 8991              ld R24,y+
 0072                   .dbline 0 ; func end
 0072 1895              reti
 0074                   .dbend
 0074                   .dbfunc e put_time _put_time fV
                        .even
 0074           _put_time::
 0074                   .dbline -1
 0074                   .dbline 52
 0074           ; void put_time(void)
 0074           ;  {
 0074                   .dbline 53
 0074           ;   putchar(hour/10+0x30);
 0074 1AE0              ldi R17,10
 0076 00910200          lds R16,_hour
 007A 00D0              rcall div8u
 007C 005D              subi R16,208    ; addi 48
 007E 00D0              rcall _putchar
 0080                   .dbline 54
 0080           ;   putchar(hour%10+0x30);
 0080 1AE0              ldi R17,10
 0082 00910200          lds R16,_hour
 0086 00D0              rcall mod8u
 0088 005D              subi R16,208    ; addi 48
 008A 00D0              rcall _putchar
 008C                   .dbline 55
 008C           ;   putchar(':');
 008C 0AE3              ldi R16,58
 008E 00D0              rcall _putchar
 0090                   .dbline 56
 0090           ;   putchar(minute/10+0x30);
 0090 1AE0              ldi R17,10
 0092 00910100          lds R16,_minute
 0096 00D0              rcall div8u
 0098 005D              subi R16,208    ; addi 48
 009A 00D0              rcall _putchar
 009C                   .dbline 57
 009C           ;   putchar(minute%10+0x30);
 009C 1AE0              ldi R17,10
 009E 00910100          lds R16,_minute
 00A2 00D0              rcall mod8u
 00A4 005D              subi R16,208    ; addi 48
 00A6 00D0              rcall _putchar
 00A8                   .dbline 58
 00A8           ;   putchar(':');
 00A8 0AE3              ldi R16,58
 00AA 00D0              rcall _putchar
 00AC                   .dbline 59
 00AC           ;   putchar(second/10+0x30);
 00AC 1AE0              ldi R17,10
 00AE 00910000          lds R16,_second
 00B2 00D0              rcall div8u
 00B4 005D              subi R16,208    ; addi 48
 00B6 00D0              rcall _putchar
 00B8                   .dbline 60
 00B8           ;   putchar(second%10+0x30);  
 00B8 1AE0              ldi R17,10
 00BA 00910000          lds R16,_second
 00BE 00D0              rcall mod8u
 00C0 005D              subi R16,208    ; addi 48
 00C2                   .dbline -2
 00C2                   .dbline 61
 00C2           ;  }
 00C2           L10:
 00C2                   .dbline 0 ; func end
 00C2 00C0              rjmp _putchar
 00C4                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 62C0              rjmp _uart0_rx_isr
                        .area text(rom, con, rel)
 00C4                   .dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
 00C4                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 00C4           ;              i -> R20,R21
                        .even
 00C4           _uart0_rx_isr::
 00C4 00D0              rcall push_lset
 00C6 00D0              rcall push_gset1
 00C8                   .dbline -1
 00C8                   .dbline 65
 00C8                   .dbline 67
 00C8 4CB1              in R20,0xc
 00CA 5527              clr R21
 00CC                   .dbline 68
 00CC 4437              cpi R20,116
 00CE E0E0              ldi R30,0
 00D0 5E07              cpc R21,R30
 00D2 69F5              brne L12
 00D4                   .dbline 69
 00D4                   .dbline 70
 00D4 00D0              rcall _getchar
 00D6 8AE0              ldi R24,10
 00D8 809F              mul R24,R16
 00DA 802D              mov R24,R0
 00DC 805E              subi R24,224
 00DE 80930200          sts _hour,R24
 00E2                   .dbline 71
 00E2 00D0              rcall _getchar
 00E4 802F              mov R24,R16
 00E6 8053              subi R24,48
 00E8 20900200          lds R2,_hour
 00EC 280E              add R2,R24
 00EE 20920200          sts _hour,R2
 00F2                   .dbline 72
 00F2 00D0              rcall _getchar
 00F4 8AE0              ldi R24,10
 00F6 809F              mul R24,R16
 00F8 802D              mov R24,R0
 00FA 805E              subi R24,224
 00FC 80930100          sts _minute,R24
 0100                   .dbline 73
 0100 00D0              rcall _getchar
 0102 802F              mov R24,R16
 0104 8053              subi R24,48
 0106 20900100          lds R2,_minute
 010A 280E              add R2,R24
 010C 20920100          sts _minute,R2
 0110                   .dbline 74
 0110 00D0              rcall _getchar
 0112 8AE0              ldi R24,10
 0114 809F              mul R24,R16
 0116 802D              mov R24,R0
 0118 805E              subi R24,224
 011A 80930000          sts _second,R24
 011E                   .dbline 75
 011E 00D0              rcall _getchar
 0120 802F              mov R24,R16
 0122 8053              subi R24,48
 0124 20900000          lds R2,_second
 0128 280E              add R2,R24
 012A 20920000          sts _second,R2
 012E                   .dbline 76
 012E           L12:
 012E                   .dbline -2
 012E                   .dbline 77
 012E           ; //UART接收中断 
 012E           ; #pragma interrupt_handler uart0_rx_isr:iv_USART_RXC
 012E           ; void uart0_rx_isr(void)
 012E           ; {
 012E           ;  unsigned i;
 012E           ;  i=UDR;
 012E           ;  if (i=='t')
 012E           ;    {
 012E           ;     hour=(getchar()-0x30)*10;
 012E           ;       hour=hour+(getchar()-0x30);
 012E           ;       minute=(getchar()-0x30)*10;
 012E           ;       minute=minute+(getchar()-0x30);
 012E           ;       second=(getchar()-0x30)*10;
 012E           ;       second=second+(getchar()-0x30);
 012E           ;    }
 012E           ; } 
 012E           L11:
 012E 00D0              rcall pop_gset1
 0130 00D0              rcall pop_lset
 0132                   .dbline 0 ; func end
 0132 1895              reti
 0134                   .dbsym r i 20 i
 0134                   .dbend
 0134                   .dbfunc e main _main fV
 0134           ;     second_old -> R20
                        .even
 0134           _main::
 0134                   .dbline -1
 0134                   .dbline 80
 0134           ; //main程序
 0134           ; void main(void)
 0134           ; {
 0134                   .dbline 82
 0134           ;  unsigned char second_old;
 0134           ;  uart_init(); 
 0134 00D0              rcall _uart_init
 0136                   .dbline 83
 0136           ;  timer2_init();
 0136 85DF              rcall _timer2_init
 0138                   .dbline 84
 0138           ;  TIMSK =1<<TOIE2;
 0138 80E4              ldi R24,64
 013A 89BF              out 0x39,R24
 013C                   .dbline 85
 013C           ;  SEI();
 013C 7894              sei
 013E 08C0              rjmp L16
 0140           L15:
 0140                   .dbline 87
 0140           ;  while(1)
 0140           ;    {
 0140                   .dbline 88
 0140           ;     if (second!=second_old)
 0140 20900000          lds R2,_second
 0144 2416              cp R2,R20
 0146 21F0              breq L18
 0148                   .dbline 89
 0148           ;         {
 0148                   .dbline 90
 0148           ;                time();
 0148 5BDF              rcall _time
 014A                   .dbline 91
 014A           ;                second_old=second;
 014A 40910000          lds R20,_second
 014E                   .dbline 92
 014E           ;                put_time();
 014E 92DF              rcall _put_time
 0150                   .dbline 93
 0150           ;               }
 0150           L18:
 0150                   .dbline 94
 0150           L16:
 0150                   .dbline 86
 0150 F7CF              rjmp L15
 0152           X0:
 0152                   .dbline -2
 0152                   .dbline 95
 0152           ;    }  
 0152           ; }
 0152           L14:
 0152                   .dbline 0 ; func end
 0152 0895              ret
 0154                   .dbsym r second_old 20 c
 0154                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
 0000           _second::
 0000                   .blkb 1
 0001                   .dbsym e second _second c
 0001           _minute::
 0001                   .blkb 1
 0002                   .dbsym e minute _minute c
 0002           _hour::
 0002                   .blkb 1
 0003                   .dbsym e hour _hour c

⌨️ 快捷键说明

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