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

📄 enc.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LIS
字号:
                        .module ENC.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\PMax\单片机源代码\函数库\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 20928100          sts 129,R2
 0006                   .dbline 32
 0006           ;  TCNT1H = 0x00 /*INVALID SETTING*/; //setup
 0006 20928500          sts 133,R2
 000A                   .dbline 33
 000A           ;  TCNT1L = 0x00 /*INVALID SETTING*/;
 000A 20928400          sts 132,R2
 000E                   .dbline 34
 000E           ;  OCR1AH = 0x00 /*INVALID SETTING*/;
 000E 20928900          sts 137,R2
 0012                   .dbline 35
 0012           ;  OCR1AL = 0x00 /*INVALID SETTING*/;
 0012 20928800          sts 136,R2
 0016                   .dbline 36
 0016           ;  OCR1BH = 0x00 /*INVALID SETTING*/;
 0016 20928B00          sts 139,R2
 001A                   .dbline 37
 001A           ;  OCR1BL = 0x00 /*INVALID SETTING*/;
 001A 20928A00          sts 138,R2
 001E                   .dbline 38
 001E           ;  ICR1H  = 0x00 /*INVALID SETTING*/;
 001E 20928700          sts 135,R2
 0022                   .dbline 39
 0022           ;  ICR1L  = 0x00 /*INVALID SETTING*/;
 0022 20928600          sts 134,R2
 0026                   .dbline 40
 0026           ;  TCCR1A = 0x00;
 0026 20928000          sts 128,R2
 002A                   .dbline 41
 002A           ;  TCCR1B = 0xC1; //start Timer
 002A 81EC              ldi R24,193
 002C 80938100          sts 129,R24
 0030                   .dbline -2
 0030           L1:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbend
                        .area vector(rom, abs)
                        .org 20
 0014 19C0              rjmp _timer1_capt_isr
                        .area text(rom, con, rel)
 0032                   .dbfile E:\PMax\单片机源代码\函数库\ENC\ENC.c
 0032                   .dbfunc e timer1_capt_isr _timer1_capt_isr fV
                        .even
 0032           _timer1_capt_isr::
 0032 2A92              st -y,R2
 0034 3A92              st -y,R3
 0036 4A92              st -y,R4
 0038 5A92              st -y,R5
 003A 8A92              st -y,R8
 003C 9A92              st -y,R9
 003E 8A93              st -y,R24
 0040 9A93              st -y,R25
 0042 EA93              st -y,R30
 0044 2FB6              in R2,0x3f
 0046 2A92              st -y,R2
 0048 00D0              rcall push_gset2
 004A                   .dbline -1
 004A                   .dbline 46
 004A           ; }
 004A           ; 
 004A           ; #pragma interrupt_handler timer1_capt_isr:11
 004A           ; void timer1_capt_isr(void)
 004A           ; {
 004A                   .dbline 47
 004A           ;       g_CntUpdate = ICR1L;
 004A 20908600          lds R2,134
 004E 3324              clr R3
 0050 30920100          sts _g_CntUpdate+1,R3
 0054 20920000          sts _g_CntUpdate,R2
 0058                   .dbline 48
 0058           ;       g_CntUpdate |=(int)ICR1H << 8;
 0058 20908700          lds R2,135
 005C 3324              clr R3
 005E 322C              mov R3,R2
 0060 2224              clr R2
 0062 40900000          lds R4,_g_CntUpdate
 0066 50900100          lds R5,_g_CntUpdate+1
 006A 4228              or R4,R2
 006C 5328              or R5,R3
 006E 50920100          sts _g_CntUpdate+1,R5
 0072 40920000          sts _g_CntUpdate,R4
 0076                   .dbline 50
 0076           ;       
 0076           ;       if ((TIFR1&0x01) != 0)       //判断定时器1溢出
 0076 B09B              sbis 0x16,0
 0078 06C0              rjmp L3
 007A                   .dbline 51
 007A           ;       {
 007A                   .dbline 52
 007A           ;       g_TotalEnc++;
 007A 80910000          lds R24,_g_TotalEnc
 007E 8F5F              subi R24,255    ; addi 1
 0080 80930000          sts _g_TotalEnc,R24
 0084                   .dbline 53
 0084           ;       TIFR1 |= 0x01;              //取消定时器1溢出标志位
 0084 B09A              sbi 0x16,0
 0086                   .dbline 54
 0086           ;       }
 0086           L3:
 0086                   .dbline 56
 0086           ;       
 0086           ;       if (g_CntOld < g_CntUpdate)
 0086 20900000          lds R2,_g_CntUpdate
 008A 30900100          lds R3,_g_CntUpdate+1
 008E 40900000          lds R4,_g_CntOld
 0092 50900100          lds R5,_g_CntOld+1
 0096 4214              cp R4,R2
 0098 5304              cpc R5,R3
 009A 98F4              brsh L5
 009C                   .dbline 57
 009C           ;       {
 009C                   .dbline 58
 009C           ;       g_DeltaEnc = g_CntUpdate - g_CntOld;
 009C 1201              movw R2,R4
 009E 40900000          lds R4,_g_CntUpdate
 00A2 50900100          lds R5,_g_CntUpdate+1
 00A6 4218              sub R4,R2
 00A8 5308              sbc R5,R3
 00AA 1201              movw R2,R4
 00AC 4424              clr R4
 00AE 5524              clr R5
 00B0 30920100          sts _g_DeltaEnc+1,R3
 00B4 20920000          sts _g_DeltaEnc,R2
 00B8 50920300          sts _g_DeltaEnc+2+1,R5
 00BC 40920200          sts _g_DeltaEnc+2,R4
 00C0                   .dbline 60
 00C0           ;               
 00C0           ;       }
 00C0 20C0              rjmp L6
 00C2           L5:
 00C2                   .dbline 62
 00C2           ;       else 
 00C2           ;       {
 00C2                   .dbline 63
 00C2           ;       g_DeltaEnc = (0x10000 - g_CntOld) + g_CntUpdate;
 00C2 20900000          lds R2,_g_CntOld
 00C6 30900100          lds R3,_g_CntOld+1
 00CA 4424              clr R4
 00CC 5524              clr R5
 00CE 40E0              ldi R20,0
 00D0 50E0              ldi R21,0
 00D2 61E0              ldi R22,1
 00D4 70E0              ldi R23,0
 00D6 4219              sub R20,R2
 00D8 5309              sbc R21,R3
 00DA 6409              sbc R22,R4
 00DC 7509              sbc R23,R5
 00DE 20900000          lds R2,_g_CntUpdate
 00E2 30900100          lds R3,_g_CntUpdate+1
 00E6 4424              clr R4
 00E8 5524              clr R5
 00EA 420D              add R20,R2
 00EC 531D              adc R21,R3
 00EE 641D              adc R22,R4
 00F0 751D              adc R23,R5
 00F2 50930100          sts _g_DeltaEnc+1,R21
 00F6 40930000          sts _g_DeltaEnc,R20
 00FA 70930300          sts _g_DeltaEnc+2+1,R23
 00FE 60930200          sts _g_DeltaEnc+2,R22
 0102                   .dbline 64
 0102           ;       }
 0102           L6:
 0102                   .dbline 66
 0102           ;       
 0102           ;       if (g_TotalEnc > 10) 
 0102 8AE0              ldi R24,10
 0104 20900000          lds R2,_g_TotalEnc
 0108 8215              cp R24,R2
 010A 00F5              brsh L12
 010C                   .dbline 67
 010C           ;       g_TotalEnc = 10;
 010C 80930000          sts _g_TotalEnc,R24
 0110                   .dbline 69
 0110           ;       
 0110           ;       for (; g_TotalEnc != 0; g_TotalEnc--)
 0110 1DC0              rjmp L12
 0112           L9:
 0112                   .dbline 70
 0112                   .dbline 71
 0112 40E0              ldi R20,0
 0114 50E0              ldi R21,0
 0116 61E0              ldi R22,1
 0118 70E0              ldi R23,0
 011A 40900200          lds R4,_g_DeltaEnc+2
 011E 50900300          lds R5,_g_DeltaEnc+2+1
 0122 20900000          lds R2,_g_DeltaEnc
 0126 30900100          lds R3,_g_DeltaEnc+1
 012A 240E              add R2,R20
 012C 351E              adc R3,R21
 012E 461E              adc R4,R22
 0130 571E              adc R5,R23
 0132 30920100          sts _g_DeltaEnc+1,R3
 0136 20920000          sts _g_DeltaEnc,R2
 013A 50920300          sts _g_DeltaEnc+2+1,R5
 013E 40920200          sts _g_DeltaEnc+2,R4
 0142                   .dbline 72
 0142           L10:
 0142                   .dbline 69
 0142 80910000          lds R24,_g_TotalEnc
 0146 8150              subi R24,1
 0148 80930000          sts _g_TotalEnc,R24
 014C           L12:
 014C                   .dbline 69
 014C 20900000          lds R2,_g_TotalEnc
 0150 2220              tst R2
 0152 F9F6              brne L9
 0154                   .dbline 84
 0154           ;       {
 0154           ;       g_DeltaEnc += 0x10000;
 0154           ;       }
 0154           ;       /*
 0154           ;       g_DeltaEnc *= 125;
 0154           ;       g_DeltaEnc /=1000;
 0154           ;       g_DeltaEnc *= 72;
 0154           ;       g_DeltaEnc = 60000000 / g_DeltaEnc;
 0154           ;       
 0154           ;       //if (g_DeltaEnc > 6000)
 0154           ;       //g_DeltaEnc = 6000;
 0154           ;       //g_DeltaEnc *= 0xff;
 0154           ;       //g_DeltaEnc /=6000;
 0154           ;       */
 0154           ;       g_TotalEnc = 0;                         //速度溢出标志清零
 0154 2224              clr R2
 0156 20920000          sts _g_TotalEnc,R2
 015A                   .dbline 85
 015A           ;       g_CntOld = g_CntUpdate;         //准备下次采样
 015A 20900000          lds R2,_g_CntUpdate
 015E 30900100          lds R3,_g_CntUpdate+1
 0162 30920100          sts _g_CntOld+1,R3
 0166 20920000          sts _g_CntOld,R2
 016A                   .dbline -2
 016A           L2:
 016A 00D0              rcall pop_gset2
 016C 2990              ld R2,y+
 016E 2FBE              out 0x3f,R2
 0170 E991              ld R30,y+
 0172 9991              ld R25,y+
 0174 8991              ld R24,y+
 0176 9990              ld R9,y+
 0178 8990              ld R8,y+
 017A 5990              ld R5,y+
 017C 4990              ld R4,y+
 017E 3990              ld R3,y+
 0180 2990              ld R2,y+
 0182                   .dbline 0 ; func end
 0182 1895              reti
 0184                   .dbend
                        .area vector(rom, abs)
                        .org 26
 001A C2C0              rjmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 0184                   .dbfile E:\PMax\单片机源代码\函数库\ENC\ENC.c
 0184                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 0184           _timer1_ovf_isr::
 0184 8A93              st -y,R24
 0186 9A93              st -y,R25
 0188 8FB7              in R24,0x3f
 018A 8A93              st -y,R24
 018C                   .dbline -1
 018C                   .dbline 92
 018C           ; }
 018C           ; 
 018C           ; 
 018C           ; 
 018C           ; #pragma interrupt_handler timer1_ovf_isr:14
 018C           ; void timer1_ovf_isr(void)
 018C           ; {
 018C                   .dbline 93
 018C           ;       g_TotalEnc ++;                          //速度溢出标志
 018C 80910000          lds R24,_g_TotalEnc
 0190 8F5F              subi R24,255    ; addi 1
 0192 80930000          sts _g_TotalEnc,R24
 0196                   .dbline -2
 0196           L13:
 0196 8991              ld R24,y+
 0198 8FBF              out 0x3f,R24
 019A 9991              ld R25,y+
 019C 8991              ld R24,y+
 019E                   .dbline 0 ; func end
 019E 1895              reti
 01A0                   .dbend

⌨️ 快捷键说明

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