📄 enc.lis
字号:
.module ENC.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\ENC\ENC.c
0000 .dbfunc e timer1_init _timer1_init fV
.even
0000 _timer1_init::
0000 .dbline -1
0000 .dbline 30
0000 ; /*****************************************************************
0000 ; * 文件名: ENC.c
0000 ; * 版本号:
0000 ; * 创作日期: 2005.7.7
0000 ; * 作者: wangzq
0000 ; * 功能说明: 采集转速数值
0000 ;
0000 ; * 其它说明: 使用AVR单片机Atmaga48, 晶振:8Mhz
0000 ;
0000 ; *****************************************************************/
0000 ;
0000 ;
0000 ; /*****************************************************************
0000 ;
0000 ; * 修改日期:
0000 ; * 修改人:
0000 ; * 修改原因:
0000 ;
0000 ; *******************************************************************/
0000 ;
0000 ;
0000 ; //包含文件
0000 ; #include "ENC.h"
0000 ;
0000 ; //TIMER1 initialize - prescale:1
0000 ; // WGM: 0) Normal, TOP=0xFFFF
0000 ; // desired value:
0000 ; // actual value: Out of range
0000 ; void timer1_init(void)
0000 ; {
0000 .dbline 31
0000 ; TCCR1B = 0x00; //stop
0000 2224 clr R2
0002 E1E8 ldi R30,129
0004 F0E0 ldi R31,0
0006 2082 std z+0,R2
0008 .dbline 32
0008 ; TCNT1H = 0x00 /*INVALID SETTING*/; //setup
0008 E5E8 ldi R30,133
000A 2082 std z+0,R2
000C .dbline 33
000C ; TCNT1L = 0x00 /*INVALID SETTING*/;
000C E4E8 ldi R30,132
000E 2082 std z+0,R2
0010 .dbline 34
0010 ; OCR1AH = 0x00 /*INVALID SETTING*/;
0010 E9E8 ldi R30,137
0012 2082 std z+0,R2
0014 .dbline 35
0014 ; OCR1AL = 0x00 /*INVALID SETTING*/;
0014 E8E8 ldi R30,136
0016 2082 std z+0,R2
0018 .dbline 36
0018 ; OCR1BH = 0x00 /*INVALID SETTING*/;
0018 EBE8 ldi R30,139
001A 2082 std z+0,R2
001C .dbline 37
001C ; OCR1BL = 0x00 /*INVALID SETTING*/;
001C EAE8 ldi R30,138
001E 2082 std z+0,R2
0020 .dbline 38
0020 ; ICR1H = 0x00 /*INVALID SETTING*/;
0020 E7E8 ldi R30,135
0022 2082 std z+0,R2
0024 .dbline 39
0024 ; ICR1L = 0x00 /*INVALID SETTING*/;
0024 E6E8 ldi R30,134
0026 2082 std z+0,R2
0028 .dbline 40
0028 ; TCCR1A = 0x00;
0028 E0E8 ldi R30,128
002A 2082 std z+0,R2
002C .dbline 41
002C ; TCCR1B = 0xC1; //start Timer
002C 81EC ldi R24,193
002E E1E8 ldi R30,129
0030 8083 std z+0,R24
0032 .dbline -2
0032 L1:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbend
.area vector(rom, abs)
.org 20
0014 1AC0 rjmp _timer1_capt_isr
.area text(rom, con, rel)
0034 .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\ENC\ENC.c
0034 .dbfunc e timer1_capt_isr _timer1_capt_isr fV
.even
0034 _timer1_capt_isr::
0034 2A92 st -y,R2
0036 3A92 st -y,R3
0038 4A92 st -y,R4
003A 5A92 st -y,R5
003C 8A92 st -y,R8
003E 9A92 st -y,R9
0040 8A93 st -y,R24
0042 9A93 st -y,R25
0044 EA93 st -y,R30
0046 FA93 st -y,R31
0048 2FB6 in R2,0x3f
004A 2A92 st -y,R2
004C 00D0 rcall push_gset2
004E .dbline -1
004E .dbline 46
004E ; }
004E ;
004E ; #pragma interrupt_handler timer1_capt_isr:11
004E ; void timer1_capt_isr(void)
004E ; {
004E .dbline 47
004E ; g_CntUpdate = ICR1L;
004E E6E8 ldi R30,134
0050 F0E0 ldi R31,0
0052 2080 ldd R2,z+0
0054 3324 clr R3
0056 30920100 sts _g_CntUpdate+1,R3
005A 20920000 sts _g_CntUpdate,R2
005E .dbline 48
005E ; g_CntUpdate |=(int)ICR1H << 8;
005E E7E8 ldi R30,135
0060 2080 ldd R2,z+0
0062 3324 clr R3
0064 322C mov R3,R2
0066 2224 clr R2
0068 40900000 lds R4,_g_CntUpdate
006C 50900100 lds R5,_g_CntUpdate+1
0070 4228 or R4,R2
0072 5328 or R5,R3
0074 50920100 sts _g_CntUpdate+1,R5
0078 40920000 sts _g_CntUpdate,R4
007C .dbline 50
007C ;
007C ; if ((TIFR1&0x01) != 0) //判断定时器1溢出
007C B09B sbis 0x16,0
007E 06C0 rjmp L3
0080 .dbline 51
0080 ; {
0080 .dbline 52
0080 ; g_TotalEnc++;
0080 80910000 lds R24,_g_TotalEnc
0084 8F5F subi R24,255 ; addi 1
0086 80930000 sts _g_TotalEnc,R24
008A .dbline 53
008A ; TIFR1 |= 0x01; //取消定时器1溢出标志位
008A B09A sbi 0x16,0
008C .dbline 54
008C ; }
008C L3:
008C .dbline 56
008C ;
008C ; if (g_CntOld < g_CntUpdate)
008C 20900000 lds R2,_g_CntUpdate
0090 30900100 lds R3,_g_CntUpdate+1
0094 40900000 lds R4,_g_CntOld
0098 50900100 lds R5,_g_CntOld+1
009C 4214 cp R4,R2
009E 5304 cpc R5,R3
00A0 98F4 brsh L5
00A2 .dbline 57
00A2 ; {
00A2 .dbline 58
00A2 ; g_DeltaEnc = g_CntUpdate - g_CntOld;
00A2 1201 movw R2,R4
00A4 40900000 lds R4,_g_CntUpdate
00A8 50900100 lds R5,_g_CntUpdate+1
00AC 4218 sub R4,R2
00AE 5308 sbc R5,R3
00B0 1201 movw R2,R4
00B2 4424 clr R4
00B4 5524 clr R5
00B6 30920100 sts _g_DeltaEnc+1,R3
00BA 20920000 sts _g_DeltaEnc,R2
00BE 50920300 sts _g_DeltaEnc+2+1,R5
00C2 40920200 sts _g_DeltaEnc+2,R4
00C6 .dbline 60
00C6 ;
00C6 ; }
00C6 20C0 rjmp L6
00C8 L5:
00C8 .dbline 62
00C8 ; else
00C8 ; {
00C8 .dbline 63
00C8 ; g_DeltaEnc = (0x10000 - g_CntOld) + g_CntUpdate;
00C8 20900000 lds R2,_g_CntOld
00CC 30900100 lds R3,_g_CntOld+1
00D0 4424 clr R4
00D2 5524 clr R5
00D4 40E0 ldi R20,0
00D6 50E0 ldi R21,0
00D8 61E0 ldi R22,1
00DA 70E0 ldi R23,0
00DC 4219 sub R20,R2
00DE 5309 sbc R21,R3
00E0 6409 sbc R22,R4
00E2 7509 sbc R23,R5
00E4 20900000 lds R2,_g_CntUpdate
00E8 30900100 lds R3,_g_CntUpdate+1
00EC 4424 clr R4
00EE 5524 clr R5
00F0 420D add R20,R2
00F2 531D adc R21,R3
00F4 641D adc R22,R4
00F6 751D adc R23,R5
00F8 50930100 sts _g_DeltaEnc+1,R21
00FC 40930000 sts _g_DeltaEnc,R20
0100 70930300 sts _g_DeltaEnc+2+1,R23
0104 60930200 sts _g_DeltaEnc+2,R22
0108 .dbline 64
0108 ; }
0108 L6:
0108 .dbline 66
0108 ;
0108 ; if (g_TotalEnc > 10)
0108 8AE0 ldi R24,10
010A 20900000 lds R2,_g_TotalEnc
010E 8215 cp R24,R2
0110 00F5 brsh L12
0112 .dbline 67
0112 ; g_TotalEnc = 10;
0112 80930000 sts _g_TotalEnc,R24
0116 .dbline 69
0116 ;
0116 ; for (; g_TotalEnc != 0; g_TotalEnc--)
0116 1DC0 rjmp L12
0118 L9:
0118 .dbline 70
0118 .dbline 71
0118 40E0 ldi R20,0
011A 50E0 ldi R21,0
011C 61E0 ldi R22,1
011E 70E0 ldi R23,0
0120 40900200 lds R4,_g_DeltaEnc+2
0124 50900300 lds R5,_g_DeltaEnc+2+1
0128 20900000 lds R2,_g_DeltaEnc
012C 30900100 lds R3,_g_DeltaEnc+1
0130 240E add R2,R20
0132 351E adc R3,R21
0134 461E adc R4,R22
0136 571E adc R5,R23
0138 30920100 sts _g_DeltaEnc+1,R3
013C 20920000 sts _g_DeltaEnc,R2
0140 50920300 sts _g_DeltaEnc+2+1,R5
0144 40920200 sts _g_DeltaEnc+2,R4
0148 .dbline 72
0148 L10:
0148 .dbline 69
0148 80910000 lds R24,_g_TotalEnc
014C 8150 subi R24,1
014E 80930000 sts _g_TotalEnc,R24
0152 L12:
0152 .dbline 69
0152 20900000 lds R2,_g_TotalEnc
0156 2220 tst R2
0158 F9F6 brne L9
015A .dbline 84
015A ; {
015A ; g_DeltaEnc += 0x10000;
015A ; }
015A ; /*
015A ; g_DeltaEnc *= 125;
015A ; g_DeltaEnc /=1000;
015A ; g_DeltaEnc *= 72;
015A ; g_DeltaEnc = 3 000 000 / g_DeltaEnc;
015A ;
015A ; //if (g_DeltaEnc > 6000)
015A ; //g_DeltaEnc = 6000;
015A ; //g_DeltaEnc *= 0xff;
015A ; //g_DeltaEnc /=6000;
015A ; */
015A ; g_TotalEnc = 0; //速度溢出标志清零
015A 2224 clr R2
015C 20920000 sts _g_TotalEnc,R2
0160 .dbline 85
0160 ; g_CntOld = g_CntUpdate; //准备下次采样
0160 20900000 lds R2,_g_CntUpdate
0164 30900100 lds R3,_g_CntUpdate+1
0168 30920100 sts _g_CntOld+1,R3
016C 20920000 sts _g_CntOld,R2
0170 .dbline -2
0170 L2:
0170 00D0 rcall pop_gset2
0172 2990 ld R2,y+
0174 2FBE out 0x3f,R2
0176 F991 ld R31,y+
0178 E991 ld R30,y+
017A 9991 ld R25,y+
017C 8991 ld R24,y+
017E 9990 ld R9,y+
0180 8990 ld R8,y+
0182 5990 ld R5,y+
0184 4990 ld R4,y+
0186 3990 ld R3,y+
0188 2990 ld R2,y+
018A .dbline 0 ; func end
018A 1895 reti
018C .dbend
.area vector(rom, abs)
.org 26
001A C6C0 rjmp _timer1_ovf_isr
.area text(rom, con, rel)
018C .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\ENC\ENC.c
018C .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
018C _timer1_ovf_isr::
018C 8A93 st -y,R24
018E 9A93 st -y,R25
0190 8FB7 in R24,0x3f
0192 8A93 st -y,R24
0194 .dbline -1
0194 .dbline 92
0194 ; }
0194 ;
0194 ;
0194 ;
0194 ; #pragma interrupt_handler timer1_ovf_isr:14
0194 ; void timer1_ovf_isr(void)
0194 ; {
0194 .dbline 93
0194 ; g_TotalEnc ++; //速度溢出标志
0194 80910000 lds R24,_g_TotalEnc
0198 8F5F subi R24,255 ; addi 1
019A 80930000 sts _g_TotalEnc,R24
019E .dbline -2
019E L13:
019E 8991 ld R24,y+
01A0 8FBF out 0x3f,R24
01A2 9991 ld R25,y+
01A4 8991 ld R24,y+
01A6 .dbline 0 ; func end
01A6 1895 reti
01A8 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -