📄 xunxiandongzuo8.lis
字号:
.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 + -