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

📄 minid0712.lis

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module minid0712.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\bak\新建文件夹\minid0712.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 26
 0000           ; /*****************************************************************
 0000           ;  *  文件名:      main.c
 0000           ;  *  版本号:      
 0000           ;  *  创作日期:    2005.7.12
 0000           ;  *  作者:        fengzm
 0000           ;  *  功能说明:    主函数
 0000           ;  *  其它说明:    使用AVR单片机Atmega48, 晶振:8Mhz
 0000           ;                   
 0000           ;  *****************************************************************/
 0000           ;  
 0000           ; 
 0000           ; /*****************************************************************
 0000           ; 
 0000           ;  *   修改日期:   
 0000           ;  *   修改人:     
 0000           ;  *   修改原因:   
 0000           ; 
 0000           ;  
 0000           ; *******************************************************************/
 0000           ; 
 0000           ; 
 0000           ; #include "minid.h"
 0000           ; 
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 27
 0000           ;    PORTB = 0x00;      
 0000 2224              clr R2
 0002 25B8              out 0x5,R2
 0004                   .dbline 28
 0004           ;    DDRB  = 0x00;      //0000 0000
 0004 24B8              out 0x4,R2
 0006                   .dbline 29
 0006           ;    PORTC = 0x00; 
 0006 28B8              out 0x8,R2
 0008                   .dbline 30
 0008           ;    DDRC  = 0x0C;    //0000 1100
 0008 8CE0              ldi R24,12
 000A 87B9              out 0x7,R24
 000C                   .dbline 31
 000C           ;    PORTD = 0x00;
 000C 2BB8              out 0xb,R2
 000E                   .dbline 32
 000E           ;    DDRD  = 0x61;      //0110 0001
 000E 81E6              ldi R24,97
 0010 8AB9              out 0xa,R24
 0012                   .dbline -2
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbend
 0014                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0014           _watchdog_init::
 0014                   .dbline -1
 0014                   .dbline 38
 0014           ; }
 0014           ; 
 0014           ; //Watchdog initialize
 0014           ; //prescale: 2K,16ms
 0014           ; void watchdog_init(void)
 0014           ; {
 0014                   .dbline 39
 0014           ;     WDR(); //this prevents a timout on enabling
 0014 A895              wdr
 0016                   .dbline 40
 0016           ;     WDTCSR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
 0016 88E0              ldi R24,8
 0018 80936000          sts 96,R24
 001C                   .dbline -2
 001C           L2:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e timer0_init _timer0_init fV
                        .even
 001E           _timer0_init::
 001E                   .dbline -1
 001E                   .dbline 48
 001E           ; }
 001E           ; 
 001E           ; //TIMER0 initialize - prescale:1024
 001E           ; // WGM: Normal
 001E           ; // desired value: 10mSec
 001E           ; // actual value:  9.984mSec (0.2%)
 001E           ; void timer0_init(void)
 001E           ; {
 001E                   .dbline 49
 001E           ;    TCCR0B = 0x00; //stop
 001E 2224              clr R2
 0020 25BC              out 0x25,R2
 0022                   .dbline 50
 0022           ;    TCNT0  = 0xB2; //set count
 0022 82EB              ldi R24,178
 0024 86BD              out 0x26,R24
 0026                   .dbline 51
 0026           ;    TCCR0A = 0x00; 
 0026 24BC              out 0x24,R2
 0028                   .dbline 52
 0028           ;    TCCR0B = 0x05; //start timer
 0028 85E0              ldi R24,5
 002A 85BD              out 0x25,R24
 002C                   .dbline -2
 002C           L3:
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbend
                        .area vector(rom, abs)
                        .org 32
 0020 17C0              rjmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 002E                   .dbfile D:\bak\新建文件夹\minid0712.c
 002E                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 002E           _timer0_ovf_isr::
 002E 00D0              rcall push_lset
 0030 00D0              rcall push_gset2
 0032                   .dbline -1
 0032                   .dbline 57
 0032           ; }
 0032           ; 
 0032           ; #pragma interrupt_handler timer0_ovf_isr:17
 0032           ; void timer0_ovf_isr(void)
 0032           ; {
 0032                   .dbline 58
 0032           ;    TCNT0 = 0xB2;                         //TIMER0 has overflowed
 0032 82EB              ldi R24,178
 0034 86BD              out 0x26,R24
 0036                   .dbline 62
 0036           ; 
 0036           ; //****************当前转速值*****************
 0036           ;        
 0036           ;       g_Temp = g_DeltaEnc * 125;
 0036 40903500          lds R4,_g_DeltaEnc+2
 003A 50903600          lds R5,_g_DeltaEnc+2+1
 003E 20903300          lds R2,_g_DeltaEnc
 0042 30903400          lds R3,_g_DeltaEnc+1
 0046 4DE7              ldi R20,125
 0048 50E0              ldi R21,0
 004A 60E0              ldi R22,0
 004C 70E0              ldi R23,0
 004E 5A92              st -y,R5
 0050 4A92              st -y,R4
 0052 3A92              st -y,R3
 0054 2A92              st -y,R2
 0056 8A01              movw R16,R20
 0058 9B01              movw R18,R22
 005A 00D0              rcall empy32u
 005C 10930200          sts _g_Temp+1,R17
 0060 00930100          sts _g_Temp,R16
 0064 30930400          sts _g_Temp+2+1,R19
 0068 20930300          sts _g_Temp+2,R18
 006C                   .dbline 63
 006C           ;       g_Temp /=1000;
 006C 48EE              ldi R20,232
 006E 53E0              ldi R21,3
 0070 60E0              ldi R22,0
 0072 70E0              ldi R23,0
 0074 7A93              st -y,R23
 0076 6A93              st -y,R22
 0078 5A93              st -y,R21
 007A 4A93              st -y,R20
 007C 00D0              rcall div32u
 007E 10930200          sts _g_Temp+1,R17
 0082 00930100          sts _g_Temp,R16
 0086 30930400          sts _g_Temp+2+1,R19
 008A 20930300          sts _g_Temp+2,R18
 008E                   .dbline 64
 008E           ;       g_Temp *= 72;
 008E 48E4              ldi R20,72
 0090 50E0              ldi R21,0
 0092 60E0              ldi R22,0
 0094 70E0              ldi R23,0
 0096 3A93              st -y,R19
 0098 2A93              st -y,R18
 009A 1A93              st -y,R17
 009C 0A93              st -y,R16
 009E 8A01              movw R16,R20
 00A0 9B01              movw R18,R22
 00A2 00D0              rcall empy32u
 00A4 10930200          sts _g_Temp+1,R17
 00A8 00930100          sts _g_Temp,R16
 00AC 30930400          sts _g_Temp+2+1,R19
 00B0 20930300          sts _g_Temp+2,R18
 00B4                   .dbline 65
 00B4           ;       g_Temp = 60000000 / g_Temp;
 00B4 40E0              ldi R20,0
 00B6 57E8              ldi R21,135
 00B8 63E9              ldi R22,147
 00BA 73E0              ldi R23,3
 00BC 3A93              st -y,R19
 00BE 2A93              st -y,R18
 00C0 1A93              st -y,R17
 00C2 0A93              st -y,R16
 00C4 8A01              movw R16,R20
 00C6 9B01              movw R18,R22
 00C8 00D0              rcall div32u
 00CA 10930200          sts _g_Temp+1,R17
 00CE 00930100          sts _g_Temp,R16
 00D2 30930400          sts _g_Temp+2+1,R19
 00D6 20930300          sts _g_Temp+2,R18
 00DA                   .dbline 68
 00DA           ; //****************当前转速值******************
 00DA           ; 
 00DA           ;       g_AdcNum = 7;                                                   //脚踏板通道
 00DA 87E0              ldi R24,7
 00DC 80934000          sts _g_AdcNum,R24
 00E0                   .dbline 69
 00E0           ;       sPID.SetValue =  AdcPedal(g_ValueAdc) & 0xfff;  //PID输入预设值
 00E0 00913E00          lds R16,_g_ValueAdc
 00E4 10913F00          lds R17,_g_ValueAdc+1
 00E8 00D0              rcall _AdcPedal
 00EA C801              movw R24,R16
 00EC 9F70              andi R25,15
 00EE 90930600          sts _sPID+1,R25
 00F2 80930500          sts _sPID,R24
 00F6                   .dbline 71
 00F6           ;       
 00F6           ;       g_IicData = PIDCalc(&sPID, g_Temp);                             //PID运算
 00F6 20910100          lds R18,_g_Temp
 00FA 30910200          lds R19,_g_Temp+1
 00FE 00E0              ldi R16,<_sPID
 0100 10E0              ldi R17,>_sPID
 0102 00D0              rcall _PIDCalc
 0104 00933C00          sts _g_IicData,R16
 0108                   .dbline 72
 0108           ;       g_flag10ms = 0xff;
 0108 8FEF              ldi R24,255
 010A 80930000          sts _g_flag10ms,R24
 010E                   .dbline 75
 010E           ;       
 010E           ; //**********************************
 010E           ; timer1_ovf_isr_();
 010E 3CD0              rcall _timer1_ovf_isr_
 0110                   .dbline -2
 0110           L4:
 0110 00D0              rcall pop_gset2
 0112 00D0              rcall pop_lset
 0114                   .dbline 0 ; func end
 0114 1895              reti
 0116                   .dbend
 0116                   .dbfunc e init_devices _init_devices fV
                        .even
 0116           _init_devices::
 0116                   .dbline -1
 0116                   .dbline 85
 0116           ; //***********************************
 0116           ;       
 0116           ; }
 0116           ; 
 0116           ; 
 0116           ; 
 0116           ; 
 0116           ; //call this routine to initialize all peripherals
 0116           ; void init_devices(void)
 0116           ; {
 0116                   .dbline 87
 0116           ;                     //stop errant interrupts until set up
 0116           ;     CLI();             //disable all interrupts
 0116 F894              cli
 0118                   .dbline 88
 0118           ;     port_init();
 0118 73DF              rcall _port_init
 011A                   .dbline 90
 011A           ;     //watchdog_init();
 011A           ;     timer0_init();
 011A 81DF              rcall _timer0_init
 011C                   .dbline 91
 011C           ;     timer1_init();
 011C 00D0              rcall _timer1_init
 011E                   .dbline 93
 011E           ;     
 011E           ;     twi_init();
 011E 00D0              rcall _twi_init
 0120                   .dbline 94
 0120           ;     adc_init();
 0120 00D0              rcall _adc_init
 0122                   .dbline 96
 0122           ; 
 0122           ;       MCUCR = 0x00;
 0122 2224              clr R2
 0124 25BE              out 0x35,R2
 0126                   .dbline 97
 0126           ;       EICRA = 0x00; //extended ext ints
 0126 20926900          sts 105,R2
 012A                   .dbline 98
 012A           ;       EIMSK = 0x00;
 012A 2DBA              out 0x1d,R2
 012C                   .dbline 100
 012C           ;  
 012C           ;       TIMSK0 = 0x01; //timer 0 interrupt sources
 012C 81E0              ldi R24,1
 012E 80936E00          sts 110,R24
 0132                   .dbline 101
 0132           ;       TIMSK1 = 0x21; //timer 1 interrupt sources
 0132 81E2              ldi R24,33
 0134 80936F00          sts 111,R24
 0138                   .dbline 102
 0138           ;       TIMSK2 = 0x00; //timer 2 interrupt sources
 0138 20927000          sts 112,R2
 013C                   .dbline 104
 013C           ;  
 013C           ;       PCMSK0 = 0x00; //pin change mask 0 
 013C 20926B00          sts 107,R2
 0140                   .dbline 105
 0140           ;       PCMSK1 = 0x00; //pin change mask 1 
 0140 20926C00          sts 108,R2
 0144                   .dbline 106
 0144           ;       PCMSK2 = 0x00; //pin change mask 2
 0144 20926D00          sts 109,R2
 0148                   .dbline 107
 0148           ;       PCICR  = 0x00; //pin change enable 
 0148 20926800          sts 104,R2
 014C                   .dbline 108
 014C           ;       PRR    = 0x00;
 014C 20926400          sts 100,R2
 0150                   .dbline 110

⌨️ 快捷键说明

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