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

📄 xunxiandongzuo8.lis

📁 mega8 对电机控制。采用mega8对电机控制。然后再用mega16 来控制mega8
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module xunxiandongzuo8.c
                        .area data(ram, con, rel)
 0000           _num_H::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
 0001                   .dbsym e num_H _num_H c
 0001           _Num_Speed::
 0001                   .blkb 2
                        .area idata
 0001 0000              .word 0
                        .area data(ram, con, rel)
 0003                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
 0003                   .dbsym e Num_Speed _Num_Speed I
 0003           _PID_choice::
 0003                   .blkb 1
                        .area idata
 0003 FF                .byte 255
                        .area data(ram, con, rel)
 0004                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
 0004                   .dbsym e PID_choice _PID_choice c
 0004           _now_dir::
 0004                   .blkb 1
                        .area idata
 0004 81                .byte 129
                        .area data(ram, con, rel)
 0005                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
 0005                   .dbsym e now_dir _now_dir c
 0005           _pre_dir::
 0005                   .blkb 1
                        .area idata
 0005 81                .byte 129
                        .area data(ram, con, rel)
 0006                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
 0006                   .dbsym e pre_dir _pre_dir c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
 0000                   .dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
 0000                   .dbfunc e L_PIDInit _L_PIDInit fV
                        .even
 0000           _L_PIDInit::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 67
 0002           ; //ICC-AVR application builder : 2005-12-22 22:30:20
 0002           ; // Target : M8
 0002           ; // Crystal: 8.0000Mhz
 0002           ; #include <iom8v.h>
 0002           ; #include <macros.h>
 0002           ; 
 0002           ; #include "Main8.h"
 0002           ; 
 0002           ; 
 0002           ; #include "L_PID.c"
 0002           ; #include "Slave_SPI.c"
 0002           ; #include "TIMEDELAY8.C"
 0002           ; 
 0002           ; 
 0002           ; void port_init(void)
 0002           ; {
 0002           ;  PORTB = 0x00;
 0002           ;  DDRB  = 0x00;
 0002           ;  PORTC =  0x00; //m103 output only
 0002           ;  DDRC  = 0x00;
 0002           ;  PORTD =  0x00;
 0002           ;  DDRD  = 0x00;
 0002           ;  
 0002           ;  PORTB |= 0x02;       //OC1A output ,high level
 0002           ;  DDRB |= 0x02;        
 0002           ;  
 0002           ;  PORTC &= ~0x02;
 0002           ;  DDRC |= 0x02;
 0002           ;  
 0002           ;  PORTC |= 0x08;       //PC3 输出,控制电机方向,1->正转,0->反转 0000 1000
 0002           ;  DDRC |= 0x38; //PC4,PC5输出
 0002           ;  
 0002           ;  PORTD |= 0X0C;               //INT0,INT1设置为输入,PD2,PD3 
 0002           ;  DDRD  &= ~0X0C;      
 0002           ;  
 0002           ;  PORTD &=~0x80;       //PD7置低 
 0002           ;  DDRD |= 0x80;        
 0002           ;  
 0002           ;  PORTD &=~0x40;//PD6置低
 0002           ;  DDRD |= 0x40;        
 0002           ;  
 0002           ;  PORTD |= 0x10;       //T0设为带上拉输入,码盘脉冲输入
 0002           ;  DDRD &= ~0x10; 
 0002           ; }
 0002           ; 
 0002           ; //TIMER0 initialize - prescale:falling edge
 0002           ; void timer0_init(void)
 0002           ; {
 0002           ;  TCCR0 = 0x00; //stopvv
 0002           ;  TCNT0 = 0x00 /*INVALID SETTING*/; //set count
 0002           ;  TCCR0 = 0x06; //start timer
 0002           ; }
 0002           ; 
 0002           ; #pragma interrupt_handler timer0_ovf_isr:10
 0002           ; void timer0_ovf_isr(void)
 0002           ; {
 0002           ;       num_H++;                        //低字节逸溢出,高字节加一
 0002           ; }
 0002           ; 
 0002           ; //TIMER1 initialize - prescale:1
 0002           ; // WGM: 7) PWM 10bit fast, TOP=0x03FF
 0002           ; // desired value: 7.813KHz
 0002           ; // actual value:  7.813KHz (0.0%)
 0002           ; void timer1_init(void)
 0002           ; {
 0002           ;  TCCR1B = 0x00; //stop
 0002           ;  TCNT1H = 0xFC; //setup
 0002                   .dbline 68
 0002           ;  TCNT1L = 0x01;
 0002                   .dbline 69
 0002           ;  OCR1AH = 0x00;               //初始占空比为0,停机
 0002 2224              clr R2
 0004 3324              clr R3
 0006 30920100          sts _L_sPID+1,R3
 000A 20920000          sts _L_sPID,R2
 000E 30920300          sts _L_sPID+2+1,R3
 0012 20920200          sts _L_sPID+2,R2
 0016                   .dbline 71
 0016           ;  OCR1AL = 0x00;
 0016           ;  OCR1BH = 0x00;
 0016 40E0              ldi R20,0
 0018 50E0              ldi R21,0
 001A 60E0              ldi R22,0
 001C 70E0              ldi R23,0
 001E 50930500          sts _L_sPID+4+1,R21
 0022 40930400          sts _L_sPID+4,R20
 0026 70930700          sts _L_sPID+4+2+1,R23
 002A 60930600          sts _L_sPID+4+2,R22
 002E                   .dbline 72
 002E           ;  OCR1BL = 0x00;
 002E 40E0              ldi R20,0
 0030 50E0              ldi R21,0
 0032 60E0              ldi R22,0
 0034 70E0              ldi R23,0
 0036 50930900          sts _L_sPID+8+1,R21
 003A 40930800          sts _L_sPID+8,R20
 003E 70930B00          sts _L_sPID+8+2+1,R23
 0042 60930A00          sts _L_sPID+8+2,R22
 0046                   .dbline 74
 0046           ;  ICR1H  = 0x03;
 0046           ;  ICR1L  = 0xFF;
 0046 30920D00          sts _L_sPID+12+1,R3
 004A 20920C00          sts _L_sPID+12,R2
 004E                   .dbline 75
 004E           ;  TCCR1A = 0xC3;               //OC1A输出PWM波形
 004E 30920F00          sts _L_sPID+14+1,R3
 0052 20920E00          sts _L_sPID+14,R2
 0056                   .dbline 77
 0056           ;  TCCR1B = 0x09; //start Timer
 0056           ; }
 0056 40E0              ldi R20,0
 0058 50E0              ldi R21,0
 005A 60E0              ldi R22,0
 005C 70E0              ldi R23,0
 005E 50931100          sts _L_sPID+16+1,R21
 0062 40931000          sts _L_sPID+16,R20
 0066 70931300          sts _L_sPID+16+2+1,R23
 006A 60931200          sts _L_sPID+16+2,R22
 006E                   .dbline 78
 006E           ; 
 006E 40E0              ldi R20,0
 0070 50E0              ldi R21,0
 0072 60E0              ldi R22,0
 0074 70E0              ldi R23,0
 0076 50931500          sts _L_sPID+20+1,R21
 007A 40931400          sts _L_sPID+20,R20
 007E 70931700          sts _L_sPID+20+2+1,R23
 0082 60931600          sts _L_sPID+20+2,R22
 0086                   .dbline 80
 0086           ; 
 0086           ; /*INT0下降沿触发,     INT1上升沿触发,
 0086 82EB              ldi R24,690
 0088 92E0              ldi R25,2
 008A 90931900          sts _L_sPID+24+1,R25
 008E 80931800          sts _L_sPID+24,R24
 0092                   .dbline 81
 0092           ; INT0触发时方向电平为1,表正转,INT1触发时方向电平为0,表正转,*/
 0092 8AE5              ldi R24,90
 0094 90E0              ldi R25,0
 0096 90931B00          sts _L_sPID+26+1,R25
 009A 80931A00          sts _L_sPID+26,R24
 009E                   .dbline 82
 009E           ; #pragma interrupt_handler int0_isr:2
 009E 8EE1              ldi R24,30
 00A0 90931D00          sts _L_sPID+28+1,R25
 00A4 80931C00          sts _L_sPID+28,R24
 00A8                   .dbline 84
 00A8           ; void int0_isr(void)
 00A8           ; {
 00A8 90931F00          sts _L_sPID+30+1,R25
 00AC 80931E00          sts _L_sPID+30,R24
 00B0                   .dbline 85
 00B0           ;       //external interupt on INT0             Dir GO_AHEAD-> GO_BACK, 存贮并清零
 00B0 8AE0              ldi R24,10
 00B2 90932100          sts _L_sPID+32+1,R25
 00B6 80932000          sts _L_sPID+32,R24
 00BA                   .dbline 86
 00BA           ;       unsigned int temp_int = 0x0000;
 00BA 84E6              ldi R24,100
 00BC 90932300          sts _L_sPID+34+1,R25
 00C0 80932200          sts _L_sPID+34,R24
 00C4                   .dbline 88
 00C4           ;       unsigned char temp_char = 0x00;
 00C4           ;       
 00C4 88EC              ldi R24,200
 00C6 90932500          sts _L_sPID+36+1,R25
 00CA 80932400          sts _L_sPID+36,R24
 00CE                   .dbline 89
 00CE           ;       temp_char = TCNT0;              //读取脉冲计数低字节
 00CE 88EE              ldi R24,1000
 00D0 93E0              ldi R25,3
 00D2 90932700          sts _L_sPID+38+1,R25
 00D6 80932600          sts _L_sPID+38,R24
 00DA                   .dbline 91
 00DA           ;       TCNT0=0;
 00DA           ;       
 00DA 40E0              ldi R20,0
 00DC 50E0              ldi R21,0
 00DE 60E0              ldi R22,0
 00E0 70E0              ldi R23,0
 00E2 50932900          sts _L_sPID+40+1,R21
 00E6 40932800          sts _L_sPID+40,R20
 00EA 70932B00          sts _L_sPID+40+2+1,R23
 00EE 60932A00          sts _L_sPID+40+2,R22
 00F2                   .dbline -2
 00F2                   .dbline 92
 00F2           ;       temp_int = num_H;               //读取脉冲计数高字节
 00F2           L1:
 00F2 00D0              rcall pop_gset2
 00F4                   .dbline 0 ; func end
 00F4 0895              ret
 00F6                   .dbend
 00F6                   .dbfunc e v_PIDCalc _v_PIDCalc fI
 00F6           ;       dd_error -> y+8
 00F6           ;        d_error -> y+4
 00F6           ;          error -> y+0
 00F6           ;             pp -> R10,R11
                        .even
 00F6           _v_PIDCalc::
 00F6 00D0              rcall push_gset3
 00F8 5801              movw R10,R16
 00FA 2C97              sbiw R28,12
 00FC                   .dbline -1
 00FC                   .dbline 98
 00FC           ;       num_H = 0;
 00FC           ;       
 00FC           ;       temp_int <<=8;                  //计算脉冲数
 00FC           ;       temp_int += temp_char;
 00FC           ;       
 00FC           ;       Num_Speed += temp_int;          //累计脉冲数
 00FC                   .dbline 101
 00FC           ; }
 00FC           ; 
 00FC           ; 
 00FC                   .dbline 102
 00FC           ; #pragma interrupt_handler int1_isr:3
 00FC                   .dbline 103
 00FC           ; void int1_isr(void)
 00FC                   .dbline 105
 00FC           ; {
 00FC           ;       //external interupt on INT0             //Dir GO_BACK -> GO_AHEAD, 存贮并清零
 00FC F501              movw R30,R10
 00FE 2280              ldd R2,z+2
 0100 3380              ldd R3,z+3
 0102 F501              movw R30,R10
 0104 4080              ldd R4,z+0
 0106 5180              ldd R5,z+1
 0108 4218              sub R4,R2
 010A 5308              sbc R5,R3
 010C 1201              movw R2,R4
 010E 4424              clr R4
 0110 37FC              sbrc R3,7
 0112 4094              com R4
 0114 5524              clr R5
 0116 47FC              sbrc R4,7
 0118 5094              com R5
 011A FE01              movw R30,R28
 011C 2082              std z+0,R2
 011E 3182              std z+1,R3
 0120 4282              std z+2,R4
 0122 5382              std z+3,R5
 0124 C501              movw R24,R10
 0126 0C96              adiw R24,12
 0128 FC01              movw R30,R24
 012A 4080              ldd R4,z+0
 012C 5180              ldd R5,z+1
 012E 6624              clr R6
 0130 57FC              sbrc R5,7
 0132 6094              com R6
 0134 7724              clr R7
 0136 67FC              sbrc R6,7
 0138 7094              com R7
 013A FE01              movw R30,R28
 013C 4081              ldd R20,z+0
 013E 5181              ldd R21,z+1
 0140 6281              ldd R22,z+2
 0142 7381              ldd R23,z+3
 0144 4419              sub R20,R4
 0146 5509              sbc R21,R5
 0148 6609              sbc R22,R6
 014A 7709              sbc R23,R7
 014C FE01              movw R30,R28
 014E 4483              std z+4,R20
 0150 5583              std z+5,R21
 0152 6683              std z+6,R22
 0154 7783              std z+7,R23
 0156 F501              movw R30,R10
 0158 4684              ldd R4,z+14
 015A 5784              ldd R5,z+15
 015C 6624              clr R6
 015E 57FC              sbrc R5,7
 0160 6094              com R6
 0162 7724              clr R7
 0164 67FC              sbrc R6,7
 0166 7094              com R7
 0168 FE01              movw R30,R28
 016A 4481              ldd R20,z+4
 016C 5581              ldd R21,z+5
 016E 6681              ldd R22,z+6
 0170 7781              ldd R23,z+7
 0172 4419              sub R20,R4
 0174 5509              sbc R21,R5
 0176 6609              sbc R22,R6
 0178 7709              sbc R23,R7
 017A FE01              movw R30,R28
 017C 4087              std z+8,R20
 017E 5187              std z+9,R21
 0180 6287              std z+10,R22
 0182 7387              std z+11,R23
 0184 FE01              movw R30,R28
 0186 4080              ldd R4,z+0
 0188 5180              ldd R5,z+1
 018A FC01              movw R30,R24
 018C 5182              std z+1,R5
 018E 4082              std z+0,R4
 0190                   .dbline 106

⌨️ 快捷键说明

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