📄 timer.lis
字号:
.module timer.c
.area text(rom, con, rel)
0000 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
.area data(ram, con, rel)
0000 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
0000 _WdtTimer::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
0001 .dbsym e WdtTimer _WdtTimer c
0001 _Timer1BaseClk::
0001 .blkb 2
.area idata
0001 0000 .word 0
.area data(ram, con, rel)
0003 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
0003 .dbsym e Timer1BaseClk _Timer1BaseClk i
.area text(rom, con, rel)
0000 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
0000 .dbfunc e watchdog_init _watchdog_init fV
.even
0000 _watchdog_init::
0000 .dbline -1
0000 .dbline 11
0000 ; #include <iom64v.h>
0000 ; #include <macros.h>
0000 ; #include "main.h"
0000 ;
0000 ; unsigned char WdtTimer = 0; //外部看门狗定时器
0000 ; volatile unsigned int Timer1BaseClk = 0; //Timer1基准时钟
0000 ;
0000 ; // 看门狗初始化函数
0000 ; // prescale: 512K cycles,overtime 417ms
0000 ; void watchdog_init(void)
0000 ; {
0000 .dbline 12
0000 ; WDR(); //this prevents a timout on enabling
0000 A895 wdr
0002 .dbline 13
0002 ; WDTCR = 0x18; //WDCE、WDE位置1,再改变超时时间
0002 88E1 ldi R24,24
0004 81BD out 0x21,R24
0006 .dbline 14
0006 ; WDTCR = 0x0D; //WATCHDOG ENABLED - dont forget to issue WDRs
0006 8DE0 ldi R24,13
0008 81BD out 0x21,R24
000A .dbline -2
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e timer1_init _timer1_init fV
.even
000C _timer1_init::
000C .dbline -1
000C .dbline 22
000C ; }
000C ;
000C ; //TIMER1 initialize - prescale:8
000C ; // WGM: 0) Normal, TOP=0xFFFF
000C ; // desired value: 2000Hz
000C ; // actual value: 2000.000Hz (0.0%)
000C ; void timer1_init(void)
000C ; {
000C .dbline 23
000C ; TCCR1B = 0x00; //stop
000C 2224 clr R2
000E 2EBC out 0x2e,R2
0010 .dbline 24
0010 ; TCNT1H = 0xFC; //setup
0010 8CEF ldi R24,252
0012 8DBD out 0x2d,R24
0014 .dbline 25
0014 ; TCNT1L = 0x18;
0014 88E1 ldi R24,24
0016 8CBD out 0x2c,R24
0018 .dbline 26
0018 ; OCR1AH = 0x03;
0018 83E0 ldi R24,3
001A 8BBD out 0x2b,R24
001C .dbline 27
001C ; OCR1AL = 0xE8;
001C 88EE ldi R24,232
001E 8ABD out 0x2a,R24
0020 .dbline 28
0020 ; OCR1BH = 0x03;
0020 83E0 ldi R24,3
0022 89BD out 0x29,R24
0024 .dbline 29
0024 ; OCR1BL = 0xE8;
0024 88EE ldi R24,232
0026 88BD out 0x28,R24
0028 .dbline 30
0028 ; OCR1CH = 0x03;
0028 83E0 ldi R24,3
002A 80937900 sts 121,R24
002E .dbline 31
002E ; OCR1CL = 0xE8;
002E 88EE ldi R24,232
0030 80937800 sts 120,R24
0034 .dbline 32
0034 ; ICR1H = 0x03;
0034 83E0 ldi R24,3
0036 87BD out 0x27,R24
0038 .dbline 33
0038 ; ICR1L = 0xE8;
0038 88EE ldi R24,232
003A 86BD out 0x26,R24
003C .dbline 34
003C ; TCCR1A = 0x00;
003C 2FBC out 0x2f,R2
003E .dbline 35
003E ; TCCR1B = 0x02; //start Timer
003E 82E0 ldi R24,2
0040 8EBD out 0x2e,R24
0042 .dbline -2
0042 L2:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbend
.area vector(rom, abs)
.org 56
0038 0C942200 jmp _timer1_ovf_isr
.area text(rom, con, rel)
0044 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
.area data(ram, con, rel)
0003 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
0003 L4:
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
.area text(rom, con, rel)
0044 .dbfile E:\AVR\ISD1700_ISP\src\timer.c
0044 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
0044 .dbsym s timer1int L4 c
.even
0044 _timer1_ovf_isr::
0044 2A92 st -y,R2
0046 3A92 st -y,R3
0048 4A92 st -y,R4
004A 5A92 st -y,R5
004C 8A93 st -y,R24
004E 9A93 st -y,R25
0050 AA93 st -y,R26
0052 BA93 st -y,R27
0054 2FB6 in R2,0x3f
0056 2A92 st -y,R2
0058 .dbline -1
0058 .dbline 42
0058 ; }
0058 ;
0058 ; //-------------------------------------------------------------------------
0058 ;
0058 ; #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
0058 ; void timer1_ovf_isr(void)
0058 ; {
0058 .dbline 46
0058 ; //TIMER1 has overflowed
0058 ; static unsigned char timer1int = 0;
0058 ;
0058 ; TCNT1H = 0xFC; //reload counter high value
0058 8CEF ldi R24,252
005A 8DBD out 0x2d,R24
005C .dbline 47
005C ; TCNT1L = 0x18; //reload counter low value
005C 88E1 ldi R24,24
005E 8CBD out 0x2c,R24
0060 .dbline 49
0060 ;
0060 ; timer1int++;
0060 80910300 lds R24,L4
0064 8F5F subi R24,255 ; addi 1
0066 80930300 sts L4,R24
006A .dbline 50
006A ; if (timer1int >= 2)
006A 8230 cpi R24,2
006C 30F1 brlo L5
006E X0:
006E .dbline 51
006E ; {
006E .dbline 53
006E ; //1ms
006E ; timer1int = 0;
006E 2224 clr R2
0070 20920300 sts L4,R2
0074 .dbline 54
0074 ; Timer1BaseClk++;
0074 80910100 lds R24,_Timer1BaseClk
0078 90910200 lds R25,_Timer1BaseClk+1
007C 0196 adiw R24,1
007E 90930200 sts _Timer1BaseClk+1,R25
0082 80930100 sts _Timer1BaseClk,R24
0086 .dbline 55
0086 ; if (Timer1BaseClk >= 60000)
0086 80E6 ldi R24,96
0088 9AEE ldi R25,234
008A A0E0 ldi R26,0
008C B0E0 ldi R27,0
008E 20900100 lds R2,_Timer1BaseClk
0092 30900200 lds R3,_Timer1BaseClk+1
0096 4424 clr R4
0098 5524 clr R5
009A 2816 cp R2,R24
009C 3906 cpc R3,R25
009E 4A06 cpc R4,R26
00A0 5B06 cpc R5,R27
00A2 34F0 brlt L7
00A4 X1:
00A4 .dbline 56
00A4 ; {
00A4 .dbline 57
00A4 ; Timer1BaseClk = 0;
00A4 2224 clr R2
00A6 3324 clr R3
00A8 30920200 sts _Timer1BaseClk+1,R3
00AC 20920100 sts _Timer1BaseClk,R2
00B0 .dbline 58
00B0 ; }
00B0 L7:
00B0 .dbline 60
00B0 ;
00B0 ; WdtTimer++;
00B0 80910000 lds R24,_WdtTimer
00B4 8F5F subi R24,255 ; addi 1
00B6 80930000 sts _WdtTimer,R24
00BA .dbline 61
00BA ; }
00BA L5:
00BA .dbline -2
00BA L3:
00BA .dbline 0 ; func end
00BA 2990 ld R2,y+
00BC 2FBE out 0x3f,R2
00BE B991 ld R27,y+
00C0 A991 ld R26,y+
00C2 9991 ld R25,y+
00C4 8991 ld R24,y+
00C6 5990 ld R5,y+
00C8 4990 ld R4,y+
00CA 3990 ld R3,y+
00CC 2990 ld R2,y+
00CE 1895 reti
00D0 .dbend
00D0 .dbfunc e GetTime _GetTime fi
00D0 ; iTime1 -> R18,R19
00D0 ; iTime2 -> R16,R17
.even
00D0 _GetTime::
00D0 .dbline -1
00D0 .dbline 65
00D0 ; }
00D0 ;
00D0 ; unsigned int GetTime(void)
00D0 ; {
00D0 L10:
00D0 .dbline 67
00D0 ; unsigned int iTime1,iTime2;
00D0 ; do{
00D0 .dbline 68
00D0 ; iTime1 = Timer1BaseClk;
00D0 20910100 lds R18,_Timer1BaseClk
00D4 30910200 lds R19,_Timer1BaseClk+1
00D8 .dbline 69
00D8 ; iTime2 = Timer1BaseClk;
00D8 00910100 lds R16,_Timer1BaseClk
00DC 10910200 lds R17,_Timer1BaseClk+1
00E0 .dbline 70
00E0 ; }while(iTime2 != iTime1);
00E0 L11:
00E0 .dbline 70
00E0 0217 cp R16,R18
00E2 1307 cpc R17,R19
00E4 A9F7 brne L10
00E6 X2:
00E6 .dbline 71
00E6 ; return iTime2;
00E6 .dbline -2
00E6 L9:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbsym r iTime1 18 i
00E8 .dbsym r iTime2 16 i
00E8 .dbend
00E8 .dbfunc e GetPassTime _GetPassTime fi
00E8 ; temp_i -> R10,R11
00E8 ; iCurTime -> R10,R11
00E8 ; iPreTime -> R12,R13
.even
00E8 _GetPassTime::
00E8 0E940000 xcall push_xgsetF03C
00EC 6801 movw R12,R16
00EE .dbline -1
00EE .dbline 76
00EE ; }
00EE ; //-------------------------------------------------------------------------
00EE ;
00EE ; unsigned int GetPassTime(unsigned int iPreTime)
00EE ; {
00EE .dbline 77
00EE ; unsigned int temp_i = 0;
00EE .dbline 78
00EE ; unsigned int iCurTime = GetTime();
00EE F0DF xcall _GetTime
00F0 5801 movw R10,R16
00F2 .dbline 80
00F2 ;
00F2 ; if (iCurTime >= iPreTime)
00F2 0C15 cp R16,R12
00F4 1D05 cpc R17,R13
00F6 18F0 brlo L14
00F8 X3:
00F8 .dbline 81
00F8 ; {
00F8 .dbline 82
00F8 ; return (iCurTime - iPreTime);
00F8 0C19 sub R16,R12
00FA 1D09 sbc R17,R13
00FC 13C0 xjmp L13
00FE L14:
00FE .dbline 85
00FE ; }
00FE ; else
00FE ; {
00FE .dbline 86
00FE ; return (60000 - iPreTime + iCurTime);
00FE 1601 movw R2,R12
0100 4424 clr R4
0102 5524 clr R5
0104 40E6 ldi R20,96
0106 5AEE ldi R21,234
0108 60E0 ldi R22,0
010A 70E0 ldi R23,0
010C 4219 sub R20,R2
010E 5309 sbc R21,R3
0110 6409 sbc R22,R4
0112 7509 sbc R23,R5
0114 1501 movw R2,R10
0116 4424 clr R4
0118 5524 clr R5
011A 420D add R20,R2
011C 531D adc R21,R3
011E 641D adc R22,R4
0120 751D adc R23,R5
0122 8A01 movw R16,R20
0124 .dbline -2
0124 L13:
0124 .dbline 0 ; func end
0124 0C940000 xjmp pop_xgsetF03C
0128 .dbsym r temp_i 10 i
0128 .dbsym r iCurTime 10 i
0128 .dbsym r iPreTime 12 i
0128 .dbend
0128 ; }
0128 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -