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

📄 time.lis

📁 Atmega64单片机程序(完整工程)
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module time.c
                        .area data(ram, con, rel)
 0000           _Hour::
 0000                   .blkb 1
                        .area idata
 0000 0C                .byte 12
                        .area data(ram, con, rel)
 0001           _Minute::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002           _Second::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003           _Count2::
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
                        .area text(rom, con, rel)
                ;           time -> R16,R17
                ;         buffer -> y+0
                        .even
 0000           _timer2_init::
 0000 2697              sbiw R28,6
 0002           ; /*****************************************************************************/
 0002           ; #include "time.h"
 0002           ; #include "GUI.h"
 0002           ; /*****************************************************************************/
 0002           ; 
 0002           ; INT8U Hour=12;
 0002           ; INT8U Minute=0;
 0002           ; INT8U Second=0;
 0002           ; 
 0002           ; INT8U Count2=0;
 0002           ; 
 0002           ; // Target : M64
 0002           ; // Crystal: 16.000Mhz
 0002           ; //TIMER2 initialize - prescale:1024
 0002           ; // WGM: Normal
 0002           ; // desired value: 10mSec
 0002           ; // actual value:  9.984mSec (0.2%)
 0002           ; void timer2_init(void)
 0002           ; {
 0002           ; #if DATE_TIME_EN==1  
 0002           ;     INT8U *time=__TIME__;
 0002 00E0              ldi R16,<L2
 0004 10E0              ldi R17,>L2
 0006           ;       INT8U buffer[6];
 0006           ; #endif        
 0006           ;     TCCR2 = 0x00; //stop
 0006 2224              clr R2
 0008 25BC              out 0x25,R2
 000A           ;     TCNT2 = 0x64; //setup
 000A 84E6              ldi R24,100
 000C 84BD              out 0x24,R24
 000E           ;     OCR2  = 0x9C;
 000E 8CE9              ldi R24,156
 0010 83BD              out 0x23,R24
 0012           ;     TCCR2 = 0x05; //start
 0012 85E0              ldi R24,5
 0014 85BD              out 0x25,R24
 0016           ;       
 0016           ; #if DATE_TIME_EN==1  
 0016           ;     buffer[0]=time[0]-'0';
 0016 F801              movw R30,R16
 0018 8081              ldd R24,z+0
 001A 8053              subi R24,48
 001C 8883              std y+0,R24
 001E           ;       buffer[1]=time[1]-'0';
 001E 8181              ldd R24,z+1
 0020 8053              subi R24,48
 0022 8983              std y+1,R24
 0024           ;       
 0024           ;       buffer[2]=time[3]-'0';
 0024 F801              movw R30,R16
 0026 8381              ldd R24,z+3
 0028 8053              subi R24,48
 002A 8A83              std y+2,R24
 002C           ;       buffer[3]=time[4]-'0';
 002C F801              movw R30,R16
 002E 8481              ldd R24,z+4
 0030 8053              subi R24,48
 0032 8B83              std y+3,R24
 0034           ;       
 0034           ;       buffer[4]=time[6]-'0';
 0034 F801              movw R30,R16
 0036 8681              ldd R24,z+6
 0038 8053              subi R24,48
 003A 8C83              std y+4,R24
 003C           ;       buffer[5]=time[7]-'0';
 003C F801              movw R30,R16
 003E 8781              ldd R24,z+7
 0040 8053              subi R24,48
 0042 8D83              std y+5,R24
 0044           ;     
 0044           ;       Hour  =buffer[0]*10+buffer[1];
 0044 2880              ldd R2,y+0
 0046 8AE0              ldi R24,10
 0048 829D              mul R24,R2
 004A 2980              ldd R2,y+1
 004C 302C              mov R3,R0
 004E 320C              add R3,R2
 0050 30920000          sts _Hour,R3
 0054           ;       Minute=buffer[2]*10+buffer[3];
 0054 2A80              ldd R2,y+2
 0056 829D              mul R24,R2
 0058 2B80              ldd R2,y+3
 005A 302C              mov R3,R0
 005C 320C              add R3,R2
 005E 30920100          sts _Minute,R3
 0062           ;       Second=buffer[4]*10+buffer[5];
 0062 2C80              ldd R2,y+4
 0064 829D              mul R24,R2
 0066 2D80              ldd R2,y+5
 0068 302C              mov R3,R0
 006A 320C              add R3,R2
 006C 30920200          sts _Second,R3
 0070           ; #endif                
 0070           ;     TIMSK |= 0x40; //timer interrupt sources
 0070 87B7              in R24,0x37
 0072 8064              ori R24,64
 0074 87BF              out 0x37,R24
 0076           L1:
 0076 2696              adiw R28,6
 0078                   .dbline 0 ; func end
 0078 0895              ret
                        .area vector(rom, abs)
                        .org 40
 0028 0C943D00          jmp _timer2_ovf_isr
                        .area text(rom, con, rel)
                        .even
 007A           _timer2_ovf_isr::
 007A 2A92              st -y,R2
 007C 8A93              st -y,R24
 007E 9A93              st -y,R25
 0080 2FB6              in R2,0x3f
 0082 2A92              st -y,R2
 0084           ; }
 0084           ; 
 0084           ; #pragma interrupt_handler timer2_ovf_isr:11
 0084           ; void timer2_ovf_isr(void)
 0084           ; {
 0084           ;     TCNT2 = 0x64; //reload counter value
 0084 84E6              ldi R24,100
 0086 84BD              out 0x24,R24
 0088           ;       Count2++;
 0088 80910300          lds R24,_Count2
 008C 8F5F              subi R24,255    ; addi 1
 008E 80930300          sts _Count2,R24
 0092           ;       if(Count2>99)
 0092 83E6              ldi R24,99
 0094 20900300          lds R2,_Count2
 0098 8215              cp R24,R2
 009A 40F4              brsh L14
 009C           ;       {
 009C           ;           Count2=0;
 009C 2224              clr R2
 009E 20920300          sts _Count2,R2
 00A2           ;               Second++;
 00A2 80910200          lds R24,_Second
 00A6 8F5F              subi R24,255    ; addi 1
 00A8 80930200          sts _Second,R24
 00AC           ;       }
 00AC           L14:
 00AC           ; 	if(Second>59)
 00AC 8BE3              ldi R24,59
 00AE 20900200          lds R2,_Second
 00B2 8215              cp R24,R2
 00B4 40F4              brsh L16
 00B6           ;       {
 00B6           ;               Second=0;
 00B6 2224              clr R2
 00B8 20920200          sts _Second,R2
 00BC           ;           Minute++;
 00BC 80910100          lds R24,_Minute
 00C0 8F5F              subi R24,255    ; addi 1
 00C2 80930100          sts _Minute,R24
 00C6           ;       }
 00C6           L16:
 00C6           ; 	if(Minute>59)
 00C6 8BE3              ldi R24,59
 00C8 20900100          lds R2,_Minute
 00CC 8215              cp R24,R2
 00CE 40F4              brsh L18
 00D0           ;       {
 00D0           ;               Minute=0;
 00D0 2224              clr R2
 00D2 20920100          sts _Minute,R2
 00D6           ;               Hour++;
 00D6 80910000          lds R24,_Hour
 00DA 8F5F              subi R24,255    ; addi 1
 00DC 80930000          sts _Hour,R24
 00E0           ;       }
 00E0           L18:
 00E0           ; 	if(Hour>23)
 00E0 87E1              ldi R24,23
 00E2 20900000          lds R2,_Hour
 00E6 8215              cp R24,R2
 00E8 18F4              brsh L20
 00EA           ;               Hour=0;
 00EA 2224              clr R2
 00EC 20920000          sts _Hour,R2
 00F0           L20:
 00F0           L13:
 00F0 2990              ld R2,y+
 00F2 2FBE              out 0x3f,R2
 00F4 9991              ld R25,y+
 00F6 8991              ld R24,y+
 00F8 2990              ld R2,y+
 00FA                   .dbline 0 ; func end
 00FA 1895              reti
 00FC           ;           res2 -> R22,R23
 00FC           ;           year -> R20,R21
 00FC           ;           res1 -> R10,R11
 00FC           ;           date -> R22
 00FC           ;          month -> R10
 00FC           ;            res -> R20,R21
                        .even
 00FC           _fs_getDate::
 00FC 0E940000          xcall push_gset4
 0100           ; }
 0100           ; 
 0100           ; 
 0100           ; INT16U fs_getDate(void)
 0100           ; {
 0100           ;     #if DATE_TIME_EN==0
 0100           ;         return(0);
 0100           ;     #else
 0100           ;         INT8U month,date ;
 0100           ;         INT16U year ;
 0100           ;               INT16U res,res1,res2;
 0100           ;               
 0100           ;         year=time_getYear()-1980 ;
 0100 94D0              xcall _fs_getYear
 0102 A801              movw R20,R16
 0104 4C5B              subi R20,188
 0106 5740              sbci R21,7
 0108           ;         month=time_getMonth();
 0108 93D0              xcall _fs_getMonth
 010A A02E              mov R10,R16
 010C           ;         date=time_getDay();
 010C 93D0              xcall _fs_getDay
 010E 602F              mov R22,R16
 0110           ; 
 0110           ;               res=( (year>127)?127:(year&0x3F) );
 0110 8FE7              ldi R24,127
 0112 90E0              ldi R25,0
 0114 8417              cp R24,R20
 0116 9507              cpc R25,R21
 0118 10F4              brsh L23
 011A 6C01              movw R12,R24
 011C 04C0              xjmp L24
 011E           L23:
 011E CA01              movw R24,R20
 0120 8F73              andi R24,63
 0122 9070              andi R25,0
 0124 6C01              movw R12,R24
 0126           L24:
 0126 A601              movw R20,R12
 0128           ;               res=res<<9;
 0128 29E0              ldi R18,9
 012A 30E0              ldi R19,0
 012C 8A01              movw R16,R20
 012E 0E940000          xcall lsl16
 0132 A801              movw R20,R16
 0134           ;               
 0134           ;               res1=( (month==0||month>12)?1:(month&0xF) );
 0134 AA20              tst R10
 0136 19F0              breq L27
 0138 8CE0              ldi R24,12
 013A 8A15              cp R24,R10
 013C 20F4              brsh L25
 013E           L27:
 013E 81E0              ldi R24,1
 0140 90E0              ldi R25,0
 0142 6C01              movw R12,R24
 0144 05C0              xjmp L26
 0146           L25:
 0146 8A2D              mov R24,R10
 0148 9927              clr R25
 014A 8F70              andi R24,15
 014C 9070              andi R25,0
 014E 6C01              movw R12,R24
 0150           L26:
 0150 5601              movw R10,R12
 0152           ;               res1=res1<<5;
 0152 25E0              ldi R18,5
 0154 30E0              ldi R19,0
 0156 8501              movw R16,R10
 0158 0E940000          xcall lsl16
 015C 5801              movw R10,R16
 015E           ;               
 015E           ;               res2=( (date==0||date>31)?1:(date&0x1F) );
 015E 6623              tst R22
 0160 19F0              breq L30
 0162 8FE1              ldi R24,31
 0164 8617              cp R24,R22
 0166 20F4              brsh L28

⌨️ 快捷键说明

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