📄 低频频率计.lis
字号:
.module _低频频率计.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\低频频率计/delay.h
0000 .dbfunc e DelayUS _DelayUS fV
0000 ; time -> R16,R17
.even
0000 _DelayUS::
0000 .dbline -1
0000 .dbline 9
0000 ; //包含所需头文件
0000 ; #include <ioM16v.h>
0000 ; #include <macros.h>
0000 ; #include "delay.h"
0000 ;
0000 ;
0000 ;
0000 ; /*------宏定义------*/
0000 ; #define uchar unsigned char
0000 02C0 xjmp L3
0002 L2:
0002 .dbline 11
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 L3:
0006 .dbline 10
0006 ; #define uint unsigned int
0006 81E0 ldi R24,1
0008 90E0 ldi R25,0
000A 8017 cp R24,R16
000C 9107 cpc R25,R17
000E C8F3 brlo L2
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r time 16 i
0012 .dbend
0012 .dbfunc e DelayMS _DelayMS fV
0012 ; i -> R20,R21
0012 ; time -> R16,R17
.even
0012 _DelayMS::
0012 0E940000 xcall push_gset1
0016 .dbline -1
0016 .dbline 20
0016 ; uint m,value;
0016 ; const uchar led_date[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
0016 ; const uchar led_seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
0016 ;
0016 ; //端口初始化
0016 ; void port_init(void)
0016 ; {
0016 ; PORTA = 0xFF;
0016 ; DDRA = 0xFF;
0016 ; PORTB = 0xFF;
0016 09C0 xjmp L7
0018 L6:
0018 .dbline 23
0018 ; DDRB = 0xFF;
0018 ; PORTC = 0x00;
0018 ; DDRC = 0x00;
0018 .dbline 24
0018 ; PORTD = 0x40;
0018 41E0 ldi R20,1
001A 50E0 ldi R21,0
001C 02C0 xjmp L12
001E L9:
001E .dbline 25
001E L10:
001E .dbline 24
001E 4F5F subi R20,255 ; offset = 1
0020 5F4F sbci R21,255
0022 L12:
0022 .dbline 24
0022 4637 cpi R20,118
0024 E4E0 ldi R30,4
0026 5E07 cpc R21,R30
0028 D0F3 brlo L9
002A .dbline 26
002A L7:
002A .dbline 22
002A 1801 movw R2,R16
002C 0150 subi R16,1
002E 1040 sbci R17,0
0030 2220 tst R2
0032 91F7 brne L6
0034 3320 tst R3
0036 81F7 brne L6
0038 X0:
0038 .dbline -2
0038 L5:
0038 0E940000 xcall pop_gset1
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r i 20 i
003E .dbsym r time 16 i
003E .dbend
.area lit(rom, con, rel)
0000 _led_date::
0000 C0F9 .byte 192,249
0002 A4B0 .byte 164,176
0004 9992 .byte 153,146
0006 82F8 .byte 130,248
0008 8090 .byte 128,144
000A 8883 .byte 136,131
000C C6A1 .byte 198,161
000E 868E .byte 134,142
0010 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\低频频率计\低频频率计.c
0010 .dbsym e led_date _led_date A[16:16]kc
0010 _led_seg::
0010 FEFD .byte 254,253
0012 FBF7 .byte 251,247
0014 EFDF .byte 239,223
0016 BF7F .byte 191,127
0018 .dbsym e led_seg _led_seg A[8:8]kc
.area text(rom, con, rel)
003E .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\低频频率计\低频频率计.c
003E .dbfunc e port_init _port_init fV
.even
003E _port_init::
003E .dbline -1
003E .dbline 17
003E .dbline 18
003E 8FEF ldi R24,255
0040 8BBB out 0x1b,R24
0042 .dbline 19
0042 8ABB out 0x1a,R24
0044 .dbline 20
0044 88BB out 0x18,R24
0046 .dbline 21
0046 87BB out 0x17,R24
0048 .dbline 22
0048 2224 clr R2
004A 25BA out 0x15,R2
004C .dbline 23
004C 24BA out 0x14,R2
004E .dbline 24
004E 80E4 ldi R24,64
0050 82BB out 0x12,R24
0052 .dbline 25
0052 ; DDRD = 0x00;
0052 21BA out 0x11,R2
0054 .dbline -2
0054 L13:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbend
0056 .dbfunc e timer1_init _timer1_init fV
.even
0056 _timer1_init::
0056 .dbline -1
0056 .dbline 31
0056 ; }
0056 ;
0056 ;
0056 ; //定时T1初始化
0056 ; void timer1_init(void)
0056 ; {
0056 .dbline 32
0056 ; TCCR1B = 0x00;//停止定时器
0056 2224 clr R2
0058 2EBC out 0x2e,R2
005A .dbline 33
005A ; TIMSK |= 0x20;//中断允许
005A 89B7 in R24,0x39
005C 8062 ori R24,32
005E 89BF out 0x39,R24
0060 .dbline 34
0060 ; TCNT1H = 0x00;
0060 2DBC out 0x2d,R2
0062 .dbline 35
0062 ; TCNT1L = 0x00;//初始值
0062 2CBC out 0x2c,R2
0064 .dbline 36
0064 ; OCR1AH = 0x00;
0064 2BBC out 0x2b,R2
0066 .dbline 37
0066 ; OCR1AL = 0x00;//匹配A值
0066 2ABC out 0x2a,R2
0068 .dbline 38
0068 ; OCR1BH = 0x00;
0068 29BC out 0x29,R2
006A .dbline 39
006A ; OCR1BL = 0x00;//匹配B值
006A 28BC out 0x28,R2
006C .dbline 40
006C ; ICR1H = 0xFF;
006C 8FEF ldi R24,255
006E 87BD out 0x27,R24
0070 .dbline 41
0070 ; ICR1L = 0xFF;//输入捕捉匹配值
0070 86BD out 0x26,R24
0072 .dbline 42
0072 ; TCCR1A = 0x00;
0072 2FBC out 0x2f,R2
0074 .dbline 43
0074 ; TCCR1B = 0x42;//启动定时器
0074 82E4 ldi R24,66
0076 8EBD out 0x2e,R24
0078 .dbline -2
0078 L14:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbend
.area vector(rom, abs)
.org 20
0014 0C943D00 jmp _timer1_capt_isr
.area text(rom, con, rel)
007A .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\低频频率计\低频频率计.c
007A .dbfunc e timer1_capt_isr _timer1_capt_isr fV
.even
007A _timer1_capt_isr::
007A 2A92 st -y,R2
007C 3A92 st -y,R3
007E 4A92 st -y,R4
0080 5A92 st -y,R5
0082 0A93 st -y,R16
0084 1A93 st -y,R17
0086 2A93 st -y,R18
0088 3A93 st -y,R19
008A 8A93 st -y,R24
008C EA93 st -y,R30
008E 2FB6 in R2,0x3f
0090 2A92 st -y,R2
0092 0E940000 xcall push_gset2
0096 .dbline -1
0096 .dbline 50
0096 ; }
0096 ;
0096 ;
0096 ; //定时器T1输入捕捉中断服务程序
0096 ; #pragma interrupt_handler timer1_capt_isr:6
0096 ; void timer1_capt_isr(void)
0096 ; {
0096 .dbline 52
0096 ; //timer 1 input capture event, read (int)value in ICR1 using;
0096 ; TCNT1=0;
0096 2224 clr R2
0098 3324 clr R3
009A 3DBC out 0x2d,R3
009C 2CBC out 0x2c,R2
009E .dbline 53
009E ; value=ICR1L; //Read low byte first (important)
009E 26B4 in R2,0x26
00A0 3324 clr R3
00A2 30920100 sts _value+1,R3
00A6 20920000 sts _value,R2
00AA .dbline 54
00AA ; value|=(int)ICR1H << 8; //Read high byte and shift into top byte
00AA 27B4 in R2,0x27
00AC 3324 clr R3
00AE 322C mov R3,R2
00B0 2224 clr R2
00B2 40900000 lds R4,_value
00B6 50900100 lds R5,_value+1
00BA 4228 or R4,R2
00BC 5328 or R5,R3
00BE 50920100 sts _value+1,R5
00C2 40920000 sts _value,R4
00C6 .dbline 55
00C6 ; m=1000000/value;
00C6 1201 movw R2,R4
00C8 4424 clr R4
00CA 5524 clr R5
00CC 40E4 ldi R20,64
00CE 52E4 ldi R21,66
00D0 6FE0 ldi R22,15
00D2 70E0 ldi R23,0
00D4 5A92 st -y,R5
00D6 4A92 st -y,R4
00D8 3A92 st -y,R3
00DA 2A92 st -y,R2
00DC 8A01 movw R16,R20
00DE 9B01 movw R18,R22
00E0 0E940000 xcall div32s
00E4 10930300 sts _m+1,R17
00E8 00930200 sts _m,R16
00EC .dbline 56
00EC ; TIFR|=BIT(ICF1);//软件写1清中断标志
00EC 88B7 in R24,0x38
00EE 8062 ori R24,32
00F0 88BF out 0x38,R24
00F2 .dbline -2
00F2 L15:
00F2 0E940000 xcall pop_gset2
00F6 2990 ld R2,y+
00F8 2FBE out 0x3f,R2
00FA E991 ld R30,y+
00FC 8991 ld R24,y+
00FE 3991 ld R19,y+
0100 2991 ld R18,y+
0102 1991 ld R17,y+
0104 0991 ld R16,y+
0106 5990 ld R5,y+
0108 4990 ld R4,y+
010A 3990 ld R3,y+
010C 2990 ld R2,y+
010E .dbline 0 ; func end
010E 1895 reti
0110 .dbend
0110 .dbfunc e init_devices _init_devices fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -