📄 xunxiandongzuo8.s
字号:
.module xunxiandongzuo8.c
.area data(ram, con, rel)
_num_H::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
.dbsym e num_H _num_H c
_Num_Speed::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
.dbsym e Num_Speed _Num_Speed I
_PID_choice::
.blkb 1
.area idata
.byte 255
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
.dbsym e PID_choice _PID_choice c
_now_dir::
.blkb 1
.area idata
.byte 129
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
.dbsym e now_dir _now_dir c
_pre_dir::
.blkb 1
.area idata
.byte 129
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
.dbsym e pre_dir _pre_dir c
.area text(rom, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/Main8.h
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
.dbfunc e L_PIDInit _L_PIDInit fV
.even
_L_PIDInit::
rcall push_gset2
.dbline -1
.dbline 67
; //ICC-AVR application builder : 2005-12-22 22:30:20
; // Target : M8
; // Crystal: 8.0000Mhz
; #include <iom8v.h>
; #include <macros.h>
;
; #include "Main8.h"
;
;
; #include "L_PID.c"
; #include "Slave_SPI.c"
; #include "TIMEDELAY8.C"
;
;
; void port_init(void)
; {
; PORTB = 0x00;
; DDRB = 0x00;
; PORTC = 0x00; //m103 output only
; DDRC = 0x00;
; PORTD = 0x00;
; DDRD = 0x00;
;
; PORTB |= 0x02; //OC1A output ,high level
; DDRB |= 0x02;
;
; PORTC &= ~0x02;
; DDRC |= 0x02;
;
; PORTC |= 0x08; //PC3 输出,控制电机方向,1->正转,0->反转 0000 1000
; DDRC |= 0x38; //PC4,PC5输出
;
; PORTD |= 0X0C; //INT0,INT1设置为输入,PD2,PD3
; DDRD &= ~0X0C;
;
; PORTD &=~0x80; //PD7置低
; DDRD |= 0x80;
;
; PORTD &=~0x40;//PD6置低
; DDRD |= 0x40;
;
; PORTD |= 0x10; //T0设为带上拉输入,码盘脉冲输入
; DDRD &= ~0x10;
; }
;
; //TIMER0 initialize - prescale:falling edge
; void timer0_init(void)
; {
; TCCR0 = 0x00; //stopvv
; TCNT0 = 0x00 /*INVALID SETTING*/; //set count
; TCCR0 = 0x06; //start timer
; }
;
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
; num_H++; //低字节逸溢出,高字节加一
; }
;
; //TIMER1 initialize - prescale:1
; // WGM: 7) PWM 10bit fast, TOP=0x03FF
; // desired value: 7.813KHz
; // actual value: 7.813KHz (0.0%)
; void timer1_init(void)
; {
; TCCR1B = 0x00; //stop
; TCNT1H = 0xFC; //setup
.dbline 68
; TCNT1L = 0x01;
.dbline 69
; OCR1AH = 0x00; //初始占空比为0,停机
clr R2
clr R3
sts _L_sPID+1,R3
sts _L_sPID,R2
sts _L_sPID+2+1,R3
sts _L_sPID+2,R2
.dbline 71
; OCR1AL = 0x00;
; OCR1BH = 0x00;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _L_sPID+4+1,R21
sts _L_sPID+4,R20
sts _L_sPID+4+2+1,R23
sts _L_sPID+4+2,R22
.dbline 72
; OCR1BL = 0x00;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _L_sPID+8+1,R21
sts _L_sPID+8,R20
sts _L_sPID+8+2+1,R23
sts _L_sPID+8+2,R22
.dbline 74
; ICR1H = 0x03;
; ICR1L = 0xFF;
sts _L_sPID+12+1,R3
sts _L_sPID+12,R2
.dbline 75
; TCCR1A = 0xC3; //OC1A输出PWM波形
sts _L_sPID+14+1,R3
sts _L_sPID+14,R2
.dbline 77
; TCCR1B = 0x09; //start Timer
; }
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _L_sPID+16+1,R21
sts _L_sPID+16,R20
sts _L_sPID+16+2+1,R23
sts _L_sPID+16+2,R22
.dbline 78
;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _L_sPID+20+1,R21
sts _L_sPID+20,R20
sts _L_sPID+20+2+1,R23
sts _L_sPID+20+2,R22
.dbline 80
;
; /*INT0下降沿触发, INT1上升沿触发,
ldi R24,690
ldi R25,2
sts _L_sPID+24+1,R25
sts _L_sPID+24,R24
.dbline 81
; INT0触发时方向电平为1,表正转,INT1触发时方向电平为0,表正转,*/
ldi R24,90
ldi R25,0
sts _L_sPID+26+1,R25
sts _L_sPID+26,R24
.dbline 82
; #pragma interrupt_handler int0_isr:2
ldi R24,30
sts _L_sPID+28+1,R25
sts _L_sPID+28,R24
.dbline 84
; void int0_isr(void)
; {
sts _L_sPID+30+1,R25
sts _L_sPID+30,R24
.dbline 85
; //external interupt on INT0 Dir GO_AHEAD-> GO_BACK, 存贮并清零
ldi R24,10
sts _L_sPID+32+1,R25
sts _L_sPID+32,R24
.dbline 86
; unsigned int temp_int = 0x0000;
ldi R24,100
sts _L_sPID+34+1,R25
sts _L_sPID+34,R24
.dbline 88
; unsigned char temp_char = 0x00;
;
ldi R24,200
sts _L_sPID+36+1,R25
sts _L_sPID+36,R24
.dbline 89
; temp_char = TCNT0; //读取脉冲计数低字节
ldi R24,1000
ldi R25,3
sts _L_sPID+38+1,R25
sts _L_sPID+38,R24
.dbline 91
; TCNT0=0;
;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _L_sPID+40+1,R21
sts _L_sPID+40,R20
sts _L_sPID+40+2+1,R23
sts _L_sPID+40+2,R22
.dbline -2
.dbline 92
; temp_int = num_H; //读取脉冲计数高字节
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc e v_PIDCalc _v_PIDCalc fI
; dd_error -> y+8
; d_error -> y+4
; error -> y+0
; pp -> R10,R11
.even
_v_PIDCalc::
rcall push_gset3
movw R10,R16
sbiw R28,12
.dbline -1
.dbline 98
; num_H = 0;
;
; temp_int <<=8; //计算脉冲数
; temp_int += temp_char;
;
; Num_Speed += temp_int; //累计脉冲数
.dbline 101
; }
;
;
.dbline 102
; #pragma interrupt_handler int1_isr:3
.dbline 103
; void int1_isr(void)
.dbline 105
; {
; //external interupt on INT0 //Dir GO_BACK -> GO_AHEAD, 存贮并清零
movw R30,R10
ldd R2,z+2
ldd R3,z+3
movw R30,R10
ldd R4,z+0
ldd R5,z+1
sub R4,R2
sbc R5,R3
movw R2,R4
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
movw R24,R10
adiw R24,12
movw R30,R24
ldd R4,z+0
ldd R5,z+1
clr R6
sbrc R5,7
com R6
clr R7
sbrc R6,7
com R7
movw R30,R28
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
sub R20,R4
sbc R21,R5
sbc R22,R6
sbc R23,R7
movw R30,R28
std z+4,R20
std z+5,R21
std z+6,R22
std z+7,R23
movw R30,R10
ldd R4,z+14
ldd R5,z+15
clr R6
sbrc R5,7
com R6
clr R7
sbrc R6,7
com R7
movw R30,R28
ldd R20,z+4
ldd R21,z+5
ldd R22,z+6
ldd R23,z+7
sub R20,R4
sbc R21,R5
sbc R22,R6
sbc R23,R7
movw R30,R28
std z+8,R20
std z+9,R21
std z+10,R22
std z+11,R23
movw R30,R28
ldd R4,z+0
ldd R5,z+1
movw R30,R24
std z+1,R5
std z+0,R4
.dbline 106
; unsigned int temp_int = 0x0000;
movw R30,R28
ldd R2,z+4
ldd R3,z+5
movw R30,R10
std z+15,R3
std z+14,R2
.dbline 108
; unsigned char temp_char = 0x00;
;
ldi R20,8
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L19
ldi R20,248
ldi R21,255
ldi R22,255
ldi R23,255
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L19
.dbline 109
; temp_char = TCNT0; //读取脉冲计数低字节
.dbline 110
; TCNT0=0;
rjmp L20
L19:
.dbline 112
;
; temp_int = num_H; //读取脉冲计数高字节
movw R24,R10
adiw R24,40
movw R2,R24
movw R30,R28
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
movw R30,R10
ldd R20,z+26
ldd R21,z+27
clr R22
sbrc R21,7
com R22
clr R23
sbrc R22,7
com R23
st -y,R7
st -y,R6
st -y,R5
st -y,R4
movw R16,R20
movw R18,R22
rcall empy32s
movw R4,R16
movw R6,R18
movw R30,R28
ldd R20,z+4
ldd R21,z+5
ldd R22,z+6
ldd R23,z+7
movw R30,R10
ldd R24,z+24
ldd R25,z+25
clr R26
sbrc R25,7
com R26
clr R27
sbrc R26,7
com R27
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R24
movw R18,R26
rcall empy32s
movw R20,R16
movw R22,R18
add R20,R4
adc R21,R5
adc R22,R6
adc R23,R7
movw R30,R28
ldd R4,z+8
ldd R5,z+9
ldd R6,z+10
ldd R7,z+11
movw R30,R10
ldd R24,z+28
ldd R25,z+29
clr R26
sbrc R25,7
com R26
clr R27
sbrc R26,7
com R27
st -y,R7
st -y,R6
st -y,R5
st -y,R4
movw R16,R24
movw R18,R26
rcall empy32s
add R20,R16
adc R21,R17
adc R22,R18
adc R23,R19
movw R30,R2
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
add R4,R20
adc R5,R21
adc R6,R22
adc R7,R23
std z+0,R4
std z+1,R5
std z+2,R6
std z+3,R7
L20:
.dbline 114
; num_H = 0;
;
ldi R20,0
ldi R21,252
ldi R22,15
ldi R23,0
movw R30,R10
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brlt L21
.dbline 115
; temp_int <<=8; //计算脉冲数
ldi R20,0
ldi R21,252
ldi R22,15
ldi R23,0
movw R30,R10
std z+40,R20
std z+41,R21
std z+42,R22
std z+43,R23
rjmp L22
L21:
.dbline 117
; temp_int += temp_char;
;
ldi R20,0
ldi R21,4
ldi R22,240
ldi R23,255
movw R30,R10
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brlt L23
.dbline 118
; Num_Speed -= temp_int; //累计脉冲数
ldi R20,0
ldi R21,4
ldi R22,240
ldi R23,255
movw R30,R10
std z+40,R20
std z+41,R21
std z+42,R22
std z+43,R23
L23:
L22:
.dbline 120
; }
;
ldi R24,10
ldi R25,0
movw R30,R10
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
st -y,R24
movw R16,R2
movw R18,R4
rcall asr32
.dbline -2
L18:
adiw R28,12
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l dd_error 8 L
.dbsym l d_error 4 L
.dbsym l error 0 L
.dbsym r pp 10 pX
.dbend
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
L26:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
.area text(rom, con, rel)
.dbfile E:\李斐机器人\xunxianjiadongzuo\8/L_PID.c
.dbfunc e s_PIDCalc _s_PIDCalc fI
.dbsym s flag L26 c
; temp_comp -> y+8
; d_error -> y+4
; error -> y+0
; pp -> R10,R11
.even
_s_PIDCalc::
rcall push_gset3
movw R10,R16
sbiw R28,12
.dbline -1
.dbline 128
;
; //TIMER2 initialize - prescale:1024
; // WGM: Normal
; // desired value: 20mSec
; // actual value: 19.968mSec (0.2%)
; void timer2_init(void)
; {
; TCCR2 = 0x00; //stop
.dbline 133
; TCNT2 = 0x64; //setup
;
; TCCR2 = 0x07; //start
; }
;
movw R24,R10
adiw R24,8
movw R30,R10
ldd R4,z+2
ldd R5,z+3
clr R6
sbrc R5,7
com R6
clr R7
sbrc R6,7
com R7
movw R30,R24
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
add R20,R4
adc R21,R5
adc R22,R6
adc R23,R7
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 134
; /* 定时进行PID运算 */
.dbline 136
; #define Dir ( (PIND)&(1<<2) ) //方向输入,“非零”为GO_AHEAD,“0”为GO_BACK
;
movw R30,R10
ldd R2,z+8
ldd R3,z+9
ldd R4,z+10
ldd R5,z+11
movw R30,R10
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
movw R30,R28
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L27
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L27
.dbline 137
; #pragma interrupt_handler timer2_ovf_isr:5
.dbline 139
; void timer2_ovf_isr(void)
; {
rjmp L28
L27:
.dbline 141
; unsigned int temp_int = 0x0000;
; unsigned char temp_char = 0x00;
.dbline 142
; signed int temp_sint=0;
.dbline 144
;
; TCNT2 = 0x64; //reload counter value
movw R30,R10
ldd R2,z+16
ldd R3,z+17
ldd R4,z+18
ldd R5,z+19
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
movw R30,R28
std z+4,R6
std z+5,R7
std z+6,R8
std z+7,R9
movw R24,R10
adiw R24,20
movw R30,R28
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
movw R30,R24
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
add R20,R4
adc R21,R5
adc R22,R6
adc R23,R7
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 145
;
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R10
std z+16,R2
std z+17,R3
std z+18,R4
std z+19,R5
.dbline 147
; SEI();
;
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R30,R10
ldd R2,z+20
ldd R3,z+21
ldd R4,z+22
ldd R5,z+23
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L29
.dbline 148
; temp_char = TCNT0; //读取脉冲计数低字节
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R30,R10
std z+20,R20
std z+21,R21
std z+22,R22
std z+23,R23
rjmp L30
L29:
.dbline 149
; TCNT0=0;
ldi R20,96
ldi R21,121
ldi R22,254
ldi R23,255
movw R30,R10
ldd R2,z+20
ldd R3,z+21
ldd R4,z+22
ldd R5,z+23
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L31
.dbline 150
;
ldi R20,96
ldi R21,121
ldi R22,254
ldi R23,255
movw R30,R10
std z+20,R20
std z+21,R21
std z+22,R22
std z+23,R23
rjmp L32
L31:
.dbline 151
; temp_int = num_H; //读取脉冲计数高字节
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R10
ldd R2,z+20
ldd R3,z+21
ldd R4,z+22
ldd R5,z+23
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L33
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L33
.dbline 152
; num_H = 0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R10
std z+20,R20
std z+21,R21
std z+22,R22
std z+23,R23
rjmp L34
L33:
.dbline 153
;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R10
ldd R2,z+20
ldd R3,z+21
ldd R4,z+22
ldd R5,z+23
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L35
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L35
.dbline 154
; temp_int <<=8; //计算脉冲数
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R10
std z+20,R20
std z+21,R21
std z+22,R22
std z+23,R23
L35:
L34:
L32:
L30:
.dbline 156
; temp_int += temp_char;
;
movw R30,R10
ldd R2,z+20
ldd R3,z+21
ldd R4,z+22
ldd R5,z+23
movw R30,R10
ldd R6,z+32
ldd R7,z+33
clr R8
sbrc R7,7
com R8
clr R9
sbrc R8,7
com R9
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R6
movw R18,R8
rcall empy32s
movw R2,R16
movw R4,R18
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
movw R30,R10
ldd R20,z+30
ldd R21,z+31
clr R22
sbrc R21,7
com R22
clr R23
sbrc R22,7
com R23
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R20
movw R18,R22
rcall empy32s
movw R6,R16
movw R8,R18
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
movw R30,R10
ldd R20,z+34
ldd R21,z+35
clr R22
sbrc R21,7
com R22
clr R23
sbrc R22,7
com R23
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
rcall empy32s
add R6,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -