📄 run.asl
字号:
+ 1 ;****************************************************************;
+ 2 ; Set Rules
+ 3 ;
+ 4 ; Function: set some limits to the movement rules
+ 5 ;
+ 6 ; Written by: Kelvin Yuan
+ 7 ; Date: 2004-03-02
+ 8 ;20040710:when received the broadcast sign,the mouse will go ahead to the barrier.
+ 9 ;****************************************************************;
+ 10 ;================================================================;
+ 11 ;Constant Area
+ 12 ;================================================================;
001C 13 c_mtr_tab_row equ #28 ;motor move status totoal number range is 0~c_mtr_tab_row+1
0005 14 c_rnd_range_f equ #5 ;random number range is 8
0000 15 c_offset_f_ini equ #0
+ 16
0000 17 c_flg_left equ #0
0001 18 c_flg_right equ #1
0002 19 c_flg_backup equ #2
0003 20 c_flg_ahead equ #3
+ 21 ;//04-04-13// add
0004 22 c_flg_stop equ #4
+ 23
001A 24 c_rnd_range_not_stop equ #26
+ 25 ;end add //04-04-13//
0002 26 c_flg_l_rcved equ #2
0003 27 c_flg_r_rcved equ #3
0004 28 c_flg_f_l_rcved equ #4
0005 29 c_flg_f_r_rcved equ #5
0001 30 c_rnd_range_1 equ #1 ;random number range is 1
+ 31 ;c_rnd_range_2 equ #2 ;random number range is 2
+ 32 ;c_rnd_range_3 equ #3 ;random number range is 3
+ 33 ;c_rnd_range_4 equ #4 ;random number range is 4
+ 34 ;c_rnd_range_5 equ #5 ;random number range is 5
+ 35 ;c_rnd_range_6 equ #6 ;random number range is 6
+ 36 ;c_rnd_range_8 equ #8 ;random number range is 8
+ 37 ;c_offset_f equ #0
+ 38 ;;--------------------------------------以下为左转的开始偏移
0048 39 c_offset_l_20 equ #72 ;=9(row)*8(column) left 20 degree
+ 40 ;c_offset_l_40 equ #80 ;=10(row)*8(column) left 40 degree
+ 41 ;c_offset_l_60 equ #88 ;=11(row)*8(column) left 60 degree
+ 42 ;c_offset_l_80 equ #96 ;=12(row)*8(column) left 80 degree
+ 43 ;c_offset_l_100 equ #104 ;=13(row)*8(column) left 100 degree
+ 44 ;c_offset_l_120 equ #112 ;=14(row)*8(column) left 120 degree
+ 45 ;;--------------------------------------以下为右转的开始偏移
0090 46 c_offset_r_20 equ #144 ;=18(row)*8(column) right 20 degree
+ 47 ;c_offset_r_40 equ #152 ;=19(row)*8(column) right 40 degree
+ 48 ;c_offset_r_60 equ #160 ;=20(row)*8(column) right 60 degree
+ 49 ;c_offset_r_80 equ #168 ;=21(row)*8(column) right 80 degree
+ 50 ;c_offset_r_100 equ #176 ;=22(row)*8(column) right 100 degree
+ 51 ;c_offset_r_120 equ #184 ;=23(row)*8(column) right 120 degree
+ 52 ;;;-------------------------------------以下为红外左右转表的开始偏移
+ 53 ;;//04-03-17// add for swerve when detceting the obstacles
00F0 54 c_offset_l_20_ir equ #240 ;=30(row)*8(column) left 20 degree
00F8 55 c_offset_l_40_ir equ #248 ;=31(row)*8(column) left 40 degree
+ 56 ;c_offset_l_60_ir equ #256 ;=32(row)*8(column) left 60 degree
0138 57 c_offset_r_20_ir equ #312 ;=39(row)*8(column) right 20 degree
0140 58 c_offset_r_40_ir equ #320 ;=40(row)*8(column) right 40 degree
+ 59 ;c_offset_r_60_ir equ #328 ;=41(row)*8(column) right 60 degree
0180 60 c_offset_backup equ #384 ;=48(row)*8(column) right 60 degree
+ 61 ;;end adding //04-03-17//
+ 62 ;================================================================;
+ 63 ;Data Area
+ 64 ;================================================================;
+B 00 01
+ 65 .area set_rules_var(data)
+ 66
0000 67 temp_flg_ir_received:: .ds 1 ;store the last flg_ir_received value
0001 68 flg_last_barrier:: .ds 1 ;there is barrier at the last time
+ 69 ;================================================================;
+ 70 ;Code Area
+ 71 ;================================================================;
+B 00 02
+ 72 .area Rules_code(code)
+ 73
0000 74 Run::
0000 F1 00 75 lda flg_touched_key
0002 A7 02 76 cmpe #2
0004 07 00 08 77 brnz No_touched_key
0007 24 78 ret
0008 79 No_touched_key:
0008 F1 00 80 lda flg_rcv_broadcast ;received the broadcast sign
000A A7 00 81 cmpe #0
000C 07 00 E1 82 brnz Run_with_broadcast
+ 83
000F F1 00 84 lda flg_rcv_barrier ;Is there any barrier sign ahead?
0011 A7 01 85 cmpe #1
0013 06 00 3D 86 brz front_barrier
0016 F1 00 87 lda flg_new_random ;there isn't barrier
0018 A7 00 88 cmpe #0
001A 07 00 2C 89 brnz Run_next_status ;the last status finished(flg_new_random=1 or 2)
+ 90 ;--------------------------------------------------------------------------------
+ 91 ;no barrier at this times,the last status isn't finished
001D F1 01 92 lda flg_last_barrier
001F A7 01 93 cmpe #1
0021 06 00 25 94 brz last_barrier_ahead ;if the last barrier,will go ahead
0024 24 95 ret ;no barrier at this times and last times ,the last status isn't finished,no change,go on the current status
0025 96 last_barrier_ahead:
0025 F3 00 97 lda #0 ;no barrier at this times,barrier at last times,last status isn't finished
0027 FD 01 98 sta flg_last_barrier ;go ahead
0029 02 00 B2 99 br next_status_ahead
+ 100 ;------------------------------------------------------------------------------------
+ 101 ;no barrier at this time,the last status has be finished
002C 102 Run_next_status:
002C F1 01 103 lda flg_last_barrier ;the last status has be finished
002E A7 00 104 cmpe #0
0030 06 00 36 105 brz Run_random_status ;there isn't barrier in the previous status,will random except backup
0033 02 00 25 106 br last_barrier_ahead ;no barrier at this time,barrier at last time,current status finished,go ahead
0036 107 Run_random_status:
0036 F3 03 108 lda #3 ;no barrier at this time and last time,last status finished
0038 FD 00 109 sta m_rnd_range
003A 02 00 79 110 br next_status_l_r_ahead ;the next status will be left,right,(backup),ahead
+ 111 ;------------------------------------------------------------------------------------------
+ 112 ;barrier at the front
003D 113 front_barrier:
003D F3 01 114 lda #1
003F FD 01 115 sta flg_last_barrier
0041 116 broadcast_no_barrier: ;broadcast,no barrier(no cheese,seek it)
0041 F1 00 117 lda flg_motor_status ;if the previous status is turning left or right, the next status is left or right too.
0043 A7 03 118 cmpe #c_flg_ahead
0045 06 00 67 119 brz next_status_l_r_b ;the next status is a random except ahead
0048 F1 00 120 lda flg_new_random
004A A7 00 121 cmpe #0
004C 06 00 66 122 brz pre_status_continue ;if the previous status is going on,no change director and continue the last status
004F F1 00 123 lda flg_motor_status
0051 A7 00 124 cmpe #c_flg_left
0053 06 00 CA 125 brz next_status_left ;repeat the last status
0056 A7 01 126 cmpe #c_flg_right
0058 06 00 BF 127 brz next_status_right ;repeat the last status
005B A7 02 128 cmpe #c_flg_backup ;the previous status is backup
005D 06 00 97 129 brz next_status_backup ;repeat backup
0060 A7 04 130 cmpe #c_flg_stop ;if the previous status is stop, not stop next.
0062 06 00 CA 131 brz next_status_left ;turn left(assume),may turn right
0065 24 132 ret
0066 133 pre_status_continue:
+ 134 ; lda #0 ;go on the last status till it is finished(flg_new_random=1)
+ 135 ; sta flg_rcv_barrier
0066 24 136 ret
0067 137 next_status_l_r_b:
0067 F1 00 138 lda flg_rcv_broadcast
0069 A7 01 139 cmpe #1
006B 06 00 75 140 brz next_status_l_r
006E F3 02 141 lda #2 ;0 will turn left,1 will turn right,2 will turn backup
0070 FD 00 142 sta m_rnd_range
0072 02 00 79 143 br next_status_l_r_ahead
0075 144 next_status_l_r:
0075 F3 01 145 lda #1 ;no cheese,only turn left and turn right
0077 FD 00 146 sta m_rnd_range
0079 147 next_status_l_r_ahead:
0079 F3 00 148 lda #0
007B FD 00 149 sta rnd_num
007D 20 00 00 150 call read_random
0080 F1 00 151 lda rnd_num
0082 A7 00 152 cmpe #c_flg_left
0084 06 00 CA 153 brz next_status_left
0087 A7 01 154 cmpe #c_flg_right
0089 06 00 BF 155 brz next_status_right
008C A7 02 156 cmpe #c_flg_backup
008E 06 00 97 157 brz next_status_backup
0091 A7 03 158 cmpe #c_flg_ahead
0093 06 00 B2 159 brz next_status_ahead
0096 24 160 ret
0097 161 next_status_backup:
0097 F1 00 162 lda flg_rcv_barrier
0099 A7 00 163 cmpe #0
009B 06 00 36 164 brz Run_random_status ;read random again,cann't backup
009E 165 Run_backup::
009E F3 01 166 lda #>c_offset_backup
00A0 FD 00 167 sta m_offset_ini_h
00A2 F3 80 168 lda #<c_offset_backup
00A4 FD 00 169 sta m_offset_ini
00A6 F3 00 170 lda #0
00A8 FD 00 171 sta rnd_num ;random data is 0,just only a selection
00AA 20 00 00 172 call Lookup
00AD F3 00 173 lda #0
00AF FD 00 174 sta flg_new_random
00B1 24 175 ret
00B2 176 next_status_ahead:
00B2 F3 00 177 lda #>c_offset_f_ini
00B4 FD 00 178 sta m_offset_ini_h
00B6 F3 00 179 lda #<c_offset_f_ini
00B8 FD 00 180 sta m_offset_ini
00BA F3 05 181 lda #c_rnd_range_f
00BC 02 00 D4 182 br next_status_set_end1
00BF 183 next_status_right: ;右转
00BF F3 00 184 lda #>c_offset_r_20
00C1 FD 00 185 sta m_offset_ini_h
00C3 F3 90 186 lda #<c_offset_r_20
00C5 FD 00 187 sta m_offset_ini
00C7 02 00 D2 188 br next_status_set_end
00CA 189 next_status_left: ;左转
00CA F3 00 190 lda #>c_offset_l_20
00CC FD 00 191 sta m_offset_ini_h
00CE F3 48 192 lda #<c_offset_l_20
00D0 FD 00 193 sta m_offset_ini
00D2 194 next_status_set_end:
00D2 F3 01 195 lda #c_rnd_range_1
00D4 196 next_status_set_end1:
00D4 FD 00 197 sta m_rnd_range
00D6 20 00 00 198 call Read_Random
00D9 20 00 00 199 call Lookup
00DC F3 00 200 lda #0
00DE FD 00 201 sta flg_new_random
00E0 24 202 ret
00E1 203 Run_with_broadcast:
00E1 F1 00 204 lda flg_rcv_barrier ;Is there any barrier sign ahead?
00E3 A7 01 205 cmpe #1
00E5 06 00 EB 206 brz front_barrier_bc ;there is barrier,go ahead
00E8 02 00 41 207 br broadcast_no_barrier ;no cheese,shall turn left or right
+ 208
00EB 209 front_barrier_bc:
00EB F3 00 210 lda #>c_offset_f_ini ;assume the cheese is at the front of mouse
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -