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

📄 rtc.lis

📁 基于MEGA8的电子钟源代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module rtc.c
                        .area data(ram, con, rel)
 0000           _mon::
 0000                   .blkb 2
                        .area idata
 0000 1F1C              .byte 31,28
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 1F1E              .byte 31,30
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 1F1E              .byte 31,30
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 1F1F              .byte 31,31
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 1E1F              .byte 30,31
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 1E1F              .byte 30,31
                        .area data(ram, con, rel)
 000C                   .dbfile G:\AVR系列\RTC\rtc.c
 000C                   .dbsym e mon _mon A[12:12]c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\AVR系列\RTC\rtc.c
 0000                   .dbfunc e putchar _putchar fV
 0000           ;              c -> R16
                        .even
 0000           _putchar::
 0000                   .dbline -1
 0000                   .dbline 21
 0000           ; /******************************************/
 0000           ;   
 0000           ; /*  目标MCU:MEGA8   晶振:内部RC(INT) 8MHZ */
 0000           ; /******************************************/
 0000           ; //说明:ATMEGA8只有在使用内部RC振荡器,T2使用异步时钟的
 0000           ; //      情况下,外接的32.768KHZ的晶振才起作用。
 0000           ; #include<iom8v.h>
 0000           ; #include<macros.h>
 0000           ; #define fosc 8000000
 0000           ; #define baud 19200
 0000           ; unsigned char hour;
 0000           ; unsigned char minute;
 0000           ; unsigned char second;
 0000           ; unsigned char day;
 0000           ; unsigned char month;
 0000           ; unsigned int year;
 0000           ; unsigned char mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 0000           ; 
 0000           ; /*                    调整时间                         */
 0000           ; void putchar(unsigned char c)
 0000           ;       {        
 0000           L2:
 0000                   .dbline 22
 0000           L3:
 0000                   .dbline 22
 0000           ;      while (!(UCSRA&(1<<UDRE)));
 0000 5D9B              sbis 0xb,5
 0002 FECF              rjmp L2
 0004                   .dbline 23
 0004           ;        UDR=c;    
 0004 0CB9              out 0xc,R16
 0006                   .dbline -2
 0006           L1:
 0006                   .dbline 0 ; func end
 0006 0895              ret
 0008                   .dbsym r c 16 c
 0008                   .dbend
 0008                   .dbfunc e getchar _getchar fc
                        .even
 0008           _getchar::
 0008                   .dbline -1
 0008                   .dbline 27
 0008           ;       }
 0008           ; /*            字符输入函数             */     
 0008           ; unsigned char getchar(void)
 0008           ;       {
 0008           L6:
 0008                   .dbline 28
 0008           L7:
 0008                   .dbline 28
 0008           ;        while(!(UCSRA& (1<<RXC)));
 0008 5F9B              sbis 0xb,7
 000A FECF              rjmp L6
 000C                   .dbline 29
 000C           ;      return UDR;
 000C 0CB1              in R16,0xc
 000E                   .dbline -2
 000E           L5:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e puts _puts fV
 0010           ;              s -> R20,R21
                        .even
 0010           _puts::
 0010 0E940000          xcall push_gset1
 0014 A801              movw R20,R16
 0016                   .dbline -1
 0016                   .dbline 33
 0016           ;       }               
 0016           ; /*                    字符串输出函数           */     
 0016           ; void puts(char *s)
 0016           ;       {
 0016 05C0              xjmp L11
 0018           L10:
 0018                   .dbline 35
 0018                   .dbline 36
 0018 FA01              movw R30,R20
 001A 0081              ldd R16,z+0
 001C F1DF              xcall _putchar
 001E                   .dbline 37
 001E 4F5F              subi R20,255  ; offset = 1
 0020 5F4F              sbci R21,255
 0022                   .dbline 38
 0022           L11:
 0022                   .dbline 34
 0022           ;       while (*s)
 0022 FA01              movw R30,R20
 0024 2080              ldd R2,z+0
 0026 2220              tst R2
 0028 B9F7              brne L10
 002A                   .dbline 39
 002A           ;               {
 002A           ;               putchar(*s);
 002A           ;               s++;
 002A           ;               }       
 002A           ;     putchar(0x0a);//回车换行
 002A 0AE0              ldi R16,10
 002C E9DF              xcall _putchar
 002E                   .dbline 40
 002E           ;       putchar(0x0d);
 002E 0DE0              ldi R16,13
 0030 E7DF              xcall _putchar
 0032                   .dbline -2
 0032           L9:
 0032 0E940000          xcall pop_gset1
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbsym r s 20 pc
 0038                   .dbend
 0038                   .dbfunc e uart_init _uart_init fV
                        .even
 0038           _uart_init::
 0038                   .dbline -1
 0038                   .dbline 44
 0038           ;       }
 0038           ; /*                    UART初始化                              */      
 0038           ; void uart_init(void)
 0038           ; {
 0038                   .dbline 46
 0038           ; // OSCCAL=read_flash(osc_address);
 0038           ;  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收
 0038 88E9              ldi R24,152
 003A 8AB9              out 0xa,R24
 003C                   .dbline 47
 003C           ;  UBRRL=(fosc/16/(baud+1))%256;
 003C 8AE1              ldi R24,26
 003E 89B9              out 0x9,R24
 0040                   .dbline 48
 0040           ;  UBRRH=(fosc/16/(baud+1))/256;
 0040 2224              clr R2
 0042 20BC              out 0x20,R2
 0044                   .dbline 49
 0044           ;  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
 0044 86E8              ldi R24,134
 0046 80BD              out 0x20,R24
 0048                   .dbline -2
 0048           L13:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
 004A                   .dbfunc e time _time fV
                        .even
 004A           _time::
 004A                   .dbline -1
 004A                   .dbline 53
 004A           ; }
 004A           ; 
 004A           ; void time(void)
 004A           ;        {
 004A                   .dbline 54
 004A           ;         if (second<60)
 004A 80910400          lds R24,_second
 004E 8C33              cpi R24,60
 0050 08F4              brsh L15
 0052                   .dbline 55
 0052           ;                 return;
 0052 8AC0              xjmp L14
 0054           L15:
 0054                   .dbline 57
 0054           ;         else
 0054           ;           {
 0054                   .dbline 58
 0054           ;                second-=60;
 0054 80910400          lds R24,_second
 0058 8C53              subi R24,60
 005A 80930400          sts _second,R24
 005E                   .dbline 59
 005E           ;                if (minute<59)
 005E 80910500          lds R24,_minute
 0062 8B33              cpi R24,59
 0064 20F4              brsh L17
 0066                   .dbline 60
 0066           ;                   minute++;
 0066 8F5F              subi R24,255    ; addi 1
 0068 80930500          sts _minute,R24
 006C 7DC0              xjmp L18
 006E           L17:
 006E                   .dbline 62
 006E           ;                else
 006E           ;                  {
 006E                   .dbline 63
 006E           ;                   minute=0;
 006E 2224              clr R2
 0070 20920500          sts _minute,R2
 0074                   .dbline 64
 0074           ;                       if (hour<23)
 0074 80910600          lds R24,_hour
 0078 8731              cpi R24,23
 007A 20F4              brsh L19
 007C                   .dbline 65
 007C           ;                          hour++;
 007C 8F5F              subi R24,255    ; addi 1
 007E 80930600          sts _hour,R24
 0082 72C0              xjmp L20
 0084           L19:
 0084                   .dbline 67
 0084           ;                         else
 0084           ;                           { hour=0;   
 0084                   .dbline 67
 0084 2224              clr R2
 0086 20920600          sts _hour,R2
 008A                   .dbline 68
 008A           ;                              if(day<=mon[month-1])
 008A 80E0              ldi R24,<_mon-1
 008C 90E0              ldi R25,>_mon-1
 008E E0910200          lds R30,_month
 0092 FF27              clr R31
 0094 E80F              add R30,R24
 0096 F91F              adc R31,R25
 0098 2080              ldd R2,z+0
 009A 30900300          lds R3,_day
 009E 2314              cp R2,R3
 00A0 68F1              brlo L21
 00A2                   .dbline 69
 00A2           ;                                    { day++;   
 00A2                   .dbline 69
 00A2 832D              mov R24,R3
 00A4 8F5F              subi R24,255    ; addi 1
 00A6 80930300          sts _day,R24
 00AA                   .dbline 70
 00AA           ;                                        if(((((year%4)==0)&&((year%100)!=0))||((year%400)==0))&&(month==4))
 00AA 80910000          lds R24,_year
 00AE 90910100          lds R25,_year+1
 00B2 8370              andi R24,3
 00B4 9070              andi R25,0
 00B6 8030              cpi R24,0
 00B8 8907              cpc R24,R25
 00BA 59F4              brne L27
 00BC           X0:
 00BC 24E6              ldi R18,100
 00BE 30E0              ldi R19,0
 00C0 00910000          lds R16,_year
 00C4 10910100          lds R17,_year+1
 00C8 0E940000          xcall mod16u
 00CC 0030              cpi R16,0
 00CE 0107              cpc R16,R17
 00D0 61F4              brne L26
 00D2           X1:
 00D2           L27:
 00D2 20E9              ldi R18,400
 00D4 31E0              ldi R19,1
 00D6 00910000          lds R16,_year

⌨️ 快捷键说明

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