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

📄 双足机器人.s

📁 这段源代码是基于atmel公司mega16单片机做的双足机器人控制程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.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 + -