📄 双足机器人.s
字号:
.module _双足机器人.c
.area data(ram, con, rel)
_turn_state0::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.dbsym e turn_state0 _turn_state0 c
_turn_state1::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.dbsym e turn_state1 _turn_state1 c
_minute::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.dbsym e minute _minute c
_number::
.blkb 2
.area idata
.byte 136,187
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.blkb 2
.area idata
.byte 193,145
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.blkb 2
.area idata
.byte 178,148
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.blkb 2
.area idata
.byte 132,185
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.blkb 2
.area idata
.byte 128,144
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.blkb 2
.area idata
.byte 0,255
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.dbsym e number _number A[12:12]c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 13
; //电机在第一次使用之前,都得先调零,即调用stop()子程序旋转调整螺丝直到其转速为零
; //PD6\7分别控制左、右电机为白线。红黑先分别接电源和地
; //电机转速通过脉冲信号控制,
; //1.5ms停转、1.3ms正转、1.7ms为反转(都为高电平)中间插入20ms的低电平
; //PC3,4控制显示,PC3传送数据,PC4为时钟信号线
; // PC0 1分别为探测光源的左 右端口,
; //创建时间:2005年7月28日19:44~8。10
; #include "iom16v.h"
; #include "macros.h"
; unsigned char turn_state0=0,turn_state1=0,sec,second,mini,minute=0,minisecond,number[12]={0x88,0xbb,0xc1,0x91,0xb2,0x94,0x84,0xb9,0x80,0x90,0x00,0xff};
; unsigned int left,right,zhong,interval;
; void delay_us(unsigned int time)
; {//微秒级延时程序
L2:
.dbline 15
; do
; {
.dbline 16
; time--;
subi R16,1
sbci R17,0
.dbline 17
; }
L3:
.dbline 18
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 22
; }
;
; void delay_ms(unsigned int time)
; {//毫秒级延时程序
xjmp L7
L6:
.dbline 24
.dbline 25
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 26
subi R20,1
sbci R21,0
.dbline 27
L7:
.dbline 23
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L6
X0:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e delay_20ms _delay_20ms fV
; time -> R20
.even
_delay_20ms::
xcall push_gset1
.dbline -1
.dbline 33
; {
; delay_us(1000);
; time--;
; }
; }
;
;
; /////////////////小车运动////////////////////////////////////////
; void delay_20ms()//延时20ms,用于插入低电平
; {//毫秒级延时程序
.dbline 34
; unsigned char time=20;
ldi R20,20
xjmp L11
L10:
.dbline 36
.dbline 37
ldi R16,126
ldi R17,0
xcall _delay_us
.dbline 38
dec R20
.dbline 39
L11:
.dbline 35
; while(time!=0)
tst R20
brne L10
.dbline -2
L9:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e delay_stop _delay_stop fV
; time -> R20
.even
_delay_stop::
xcall push_gset1
.dbline -1
.dbline 42
; {
; delay_us(126);
; time--;
; }
; }
; void delay_stop()//延时1.5m,用于停转
; {//毫秒级延时程序
.dbline 43
; unsigned char time=1;
ldi R20,1
xjmp L15
L14:
.dbline 45
.dbline 47
ldi R16,160
ldi R17,0
xcall _delay_us
.dbline 48
dec R20
.dbline 49
L15:
.dbline 44
; while(time!=0)
tst R20
brne L14
.dbline -2
L13:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e delay_conver _delay_conver fV
; time -> R20
.even
_delay_conver::
xcall push_gset1
.dbline -1
.dbline 52
; {
; // delay_us(183);
; delay_us(160);
; time--;
; }
; }
; void delay_conver()//延时0.4ms,用于正反转变换
; {//毫秒级延时程序
.dbline 53
; unsigned char time=1;
ldi R20,1
xjmp L19
L18:
.dbline 55
.dbline 56
ldi R16,43
ldi R17,0
xcall _delay_us
.dbline 57
dec R20
.dbline 58
L19:
.dbline 54
; while(time!=0)
tst R20
brne L18
.dbline -2
L17:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e delay_turn _delay_turn fV
; time -> R20
.even
_delay_turn::
xcall push_gset1
.dbline -1
.dbline 61
; {
; delay_us(43);
; time--;
; }
; }
; void delay_turn()//延时0.2ms,用于转向
; {//毫秒级延时程序
.dbline 62
; unsigned char time=1;
ldi R20,1
xjmp L23
L22:
.dbline 64
.dbline 65
ldi R16,20
ldi R17,0
xcall _delay_us
.dbline 66
dec R20
.dbline 67
L23:
.dbline 63
; while(time!=0)
tst R20
brne L22
.dbline -2
L21:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e delay_run _delay_run fV
; time -> R20
.even
_delay_run::
xcall push_gset1
.dbline -1
.dbline 70
; {
; delay_us(20);
; time--;
; }
; }
; void delay_run()//延时1.3m,用于正转
; {//毫秒级延时程序
.dbline 71
; unsigned char time=1;
ldi R20,1
xjmp L27
L26:
.dbline 73
.dbline 74
ldi R16,140
ldi R17,0
xcall _delay_us
.dbline 75
dec R20
.dbline 76
L27:
.dbline 72
; while(time!=0)
tst R20
brne L26
.dbline -2
L25:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e delay_back _delay_back fV
; time -> R20
.even
_delay_back::
xcall push_gset1
.dbline -1
.dbline 79
; {
; delay_us(140);
; time--;
; }
; }
; void delay_back()//延时1.7m,用于反转
; {//毫秒级延时程序
.dbline 80
; unsigned char time=1;
ldi R20,1
xjmp L31
L30:
.dbline 82
.dbline 83
ldi R16,180
ldi R17,0
xcall _delay_us
.dbline 84
dec R20
.dbline 85
L31:
.dbline 81
; while(time!=0)
tst R20
brne L30
.dbline -2
L29:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e stop _stop fV
.even
_stop::
.dbline -1
.dbline 88
; {
; delay_us(180);
; time--;
; }
; }
; void stop(void)
; {
.dbline 89
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 90
; delay_20ms();
xcall _delay_20ms
.dbline 91
; PORTD|=0xc0;
in R24,0x12
ori R24,192
out 0x12,R24
.dbline 92
; delay_stop();
xcall _delay_stop
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbend
.dbfunc e run _run fV
.even
_run::
.dbline -1
.dbline 95
; }
; void run(void)
; {
.dbline 96
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 97
; delay_20ms();
xcall _delay_20ms
.dbline 99
;
; PORTD|=0x80;
sbi 0x12,7
.dbline 100
; delay_run();
xcall _delay_run
.dbline 101
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 104
;
;
; PORTD|=0x40;
sbi 0x12,6
.dbline 105
; delay_back();
xcall _delay_back
.dbline 106
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 110
;
;
;
; delay_conver();
xcall _delay_conver
.dbline -2
L34:
.dbline 0 ; func end
ret
.dbend
.dbfunc e run_back _run_back fV
.even
_run_back::
.dbline -1
.dbline 114
;
; }
; void run_back(void)
; {
.dbline 115
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 116
; delay_20ms();
xcall _delay_20ms
.dbline 119
;
;
; PORTD|=0x80;
sbi 0x12,7
.dbline 120
; delay_back();
xcall _delay_back
.dbline 121
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 124
;
;
; PORTD|=0x40;
sbi 0x12,6
.dbline 125
; delay_run();
xcall _delay_run
.dbline 126
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 128
;
; delay_conver();
xcall _delay_conver
.dbline -2
L35:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_left _turn_left fV
.even
_turn_left::
.dbline -1
.dbline 131
; }
; void turn_left(void)
; {
.dbline 132
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 133
; delay_20ms();
xcall _delay_20ms
.dbline 134
; PORTD|=0x80;
sbi 0x12,7
.dbline 135
; delay_run();
xcall _delay_run
.dbline 136
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline -2
L36:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_right _turn_right fV
.even
_turn_right::
.dbline -1
.dbline 140
; //delay_turn();
; }
; void turn_right(void)
; {
.dbline 141
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 142
; delay_20ms();
xcall _delay_20ms
.dbline 143
; PORTD|=0x40;
sbi 0x12,6
.dbline 144
; delay_run();
xcall _delay_run
.dbline 145
; PORTD&=0x3f;
in R24,0x12
andi R24,63
out 0x12,R24
.dbline -2
L37:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LeftUp _LeftUp fV
; time -> R20
.even
_LeftUp::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 150
; //delay_turn();
; }
;
; void LeftUp(unsigned char time)//抬左脚
; {
xjmp L40
L39:
.dbline 152
.dbline 153
dec R20
.dbline 155
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 156
xcall _delay_20ms
.dbline 159
sbi 0x12,7
.dbline 160
xcall _delay_run
.dbline 161
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 163
L40:
.dbline 151
; while(time>1)
ldi R24,1
cp R24,R20
brlo L39
.dbline -2
L38:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
.dbfunc e LeftFwd _LeftFwd fV
; time -> R20
.even
_LeftFwd::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 168
; {
; time--;
;
; PORTD&=0x3f;
; delay_20ms();
;
;
; PORTD|=0x80;
; delay_run();
; PORTD&=0x3f;
;
; }
;
; }
;
; void LeftFwd(unsigned char time)//迈左脚步
; {
xjmp L44
L43:
.dbline 172
.dbline 173
dec R20
.dbline 175
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 176
xcall _delay_20ms
.dbline 179
sbi 0x12,6
.dbline 180
xcall _delay_run
.dbline 181
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 182
L44:
.dbline 171
;
;
; while(time>1)
ldi R24,1
cp R24,R20
brlo L43
.dbline -2
L42:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -