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

📄 enc.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 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 + -