📄 set_rules.asl
字号:
+ 197 ; brz next_status_not_stop ;前一运行状态是停止
+ 198 ; cmpe #c_flg_left
+ 199 ; brz next_status_forward ;前一运行状态是向左,则下一个是向前
+ 200 ; cmpe #c_flg_right
+ 201 ; brz next_status_forward ;前一运行状态是向右,则下一个是向前
+ 202 ;next_status_random: ;if not, the next status is selected from the whole move status.
+ 203 ; lda #0
+ 204 ; sta m_offset_ini ;add the high 8bit of the offset register
+ 205 ; sta m_offset_ini_h
+ 206 ; lda #c_mtr_tab_row
+ 207 ; sta m_rnd_range
+ 208 ; br set_rules_end
+ 209 ;next_status_forward: ;revise for adding the high 8bit of the offset register
+ 210 ; lda #>c_offset_f_ini
+ 211 ; sta m_offset_ini_h
+ 212 ; lda #<c_offset_f_ini
+ 213 ; sta m_offset_ini
+ 214 ; lda #c_rnd_range_f
+ 215 ; sta m_rnd_range
+ 216 ; br set_rules_end
+ 217 ;next_status_not_stop: ;add the rules for not stop continuously
+ 218 ; lda #>c_offset_f_ini
+ 219 ; sta m_offset_ini_h
+ 220 ; lda #<c_offset_f_ini
+ 221 ; sta m_offset_ini
+ 222 ; lda #c_rnd_range_not_stop
+ 223 ; sta m_rnd_range
+ 224 ; br set_rules_end
+ 225 ;;--------------------------------------这是flg_new_random==2时的设置一些规则,即是有障碍物的情况下。
+ 226 ;rules_for_ir:
+ 227 ; lda temp_flg_ir_received ;上一次的红外状态
+ 228 ; cmpe #c_flg_l_rcved ;前一个是左边有障碍物
+ 229 ; brz $1
+ 230 ; cmpe #c_flg_f_l_rcved
+ 231 ; brz $1
+ 232 ; cmpe #c_flg_r_rcved
+ 233 ; brz $2
+ 234 ; cmpe #c_flg_f_r_rcved
+ 235 ; brz $2
+ 236 ; br set_rules_end
+ 237 ;$1:
+ 238 ; lda flg_ir_received ;对照今次的红外状态
+ 239 ; cmpe #c_flg_r_rcved
+ 240 ; brz next_status_forward
+ 241 ; cmpe #c_flg_f_r_rcved
+ 242 ; brz next_status_forward
+ 243 ; br set_rules_end
+ 244 ;$2:
+ 245 ; lda flg_ir_received
+ 246 ; cmpe #c_flg_l_rcved
+ 247 ; brz next_status_forward
+ 248 ; cmpe #c_flg_f_l_rcved
+ 249 ; brz next_status_forward
+ 250 ;
+ 251 ;set_rules_end:
+ 252 ; lda #0
+ 253 ; sta flg_new_random
+ 254 ; lda flg_ir_received
+ 255 ; sta temp_flg_ir_received
+ 256 ; ret
+ 257 ;;================================================================;
+ 258 ;;****************************************************************;
+ 259 ;; IR Judge
+ 260 ;
+ 261 ;; Carrier Frequency: 38K
+ 262 ;; IR transmit output pin: PRTC[0]
+ 263 ;; IR receive input pins: PRTD[0](front side)
+ 264 ;; PRTD[1](left side)
+ 265 ;; PRTD[2](right side)
+ 266 ;;
+ 267 ;; Written by: lixy
+ 268 ;; Date: 2004-04-08
+ 269 ;;****************************************************************;
+ 270 ;
+ 271 ;;================================================================;
+ 272 ;;Constant Area
+ 273 ;;================================================================;
+ 274 ;c_prtc012_1 equ #00000111b
+ 275 ;c_prtc012_0 equ #11111000b
+ 276 ;
+ 277 ;c_prtd012_1 equ #00000111b
+ 278 ;c_prtd0_1 equ #00000001b
+ 279 ;c_prtd0_0 equ #11111110b
+ 280 ;c_prtd1_1 equ #00000010b
+ 281 ;c_prtd1_0 equ #11111101b
+ 282 ;c_prtd2_1 equ #00000100b
+ 283 ;c_prtd2_0 equ #11111011b
+ 284
+ 285 ;;c_38k_pulse equ #22 ;the total number of 38k IR pulse transmitted(23*26us=598us)
+ 286 ;;//04-03-17// revise the ir groups total number (primer value is 20)
+ 287 ;;c_ir_group equ #12 ;the interval between 38k pulse groups in one IR group
+ 288 ;;end revise //04-03-17//
+ 289 ;c_ir_rcv_f equ #10
+ 290 ;c_ir_rcv_l equ #10
+ 291 ;c_ir_rcv_r equ #10
+ 292 ;c_flg_f_rcved equ #1 ;表示前面有障碍物
+ 293 ;c_flg_l_rcved equ #2 ;表示左面有障碍物
+ 294 ;c_flg_r_rcved equ #3 ;表示右边有障碍物
+ 295 ;c_flg_f_l_rcved equ #4 ;表示前左有障碍物
+ 296 ;c_flg_f_r_rcved equ #5 ;表示前右有障碍物
+ 297 ;c_flg_l_r_rcved equ #6 ;表示左右有障碍物
+ 298 ;c_flg_f_l_r_rcved equ #7 ;表示前左右都有障碍物
+ 299
+ 300 ;c_offset_f equ #0
+ 301 ;;--------------------------------------以下为左转的开始偏移
+ 302 ;c_offset_l_20 equ #72 ;=9(row)*8(column) left 20 degree
+ 303 ;c_offset_l_40 equ #80 ;=10(row)*8(column) left 40 degree
+ 304 ;c_offset_l_60 equ #88 ;=11(row)*8(column) left 60 degree
+ 305 ;c_offset_l_80 equ #96 ;=12(row)*8(column) left 80 degree
+ 306 ;c_offset_l_100 equ #104 ;=13(row)*8(column) left 100 degree
+ 307 ;c_offset_l_120 equ #112 ;=14(row)*8(column) left 120 degree
+ 308 ;;--------------------------------------以下为右转的开始偏移
+ 309 ;c_offset_r_20 equ #144 ;=18(row)*8(column) right 20 degree
+ 310 ;c_offset_r_40 equ #152 ;=19(row)*8(column) right 40 degree
+ 311 ;c_offset_r_60 equ #160 ;=20(row)*8(column) right 60 degree
+ 312 ;c_offset_r_80 equ #168 ;=21(row)*8(column) right 80 degree
+ 313 ;c_offset_r_100 equ #176 ;=22(row)*8(column) right 100 degree
+ 314 ;c_offset_r_120 equ #184 ;=23(row)*8(column) right 120 degree
+ 315 ;;;-------------------------------------以下为红外左右转表的开始偏移
+ 316 ;;//04-03-17// add for swerve when detceting the obstacles
+ 317 ;c_offset_l_20_ir equ #240 ;=30(row)*8(column) left 20 degree
+ 318 ;c_offset_l_40_ir equ #248 ;=31(row)*8(column) left 40 degree
+ 319 ;c_offset_l_60_ir equ #256 ;=32(row)*8(column) left 60 degree
+ 320 ;c_offset_r_20_ir equ #312 ;=39(row)*8(column) right 20 degree
+ 321 ;c_offset_r_40_ir equ #320 ;=40(row)*8(column) right 40 degree
+ 322 ;c_offset_r_60_ir equ #328 ;=41(row)*8(column) right 60 degree
+ 323 ;;end adding //04-03-17//
+ 324
+ 325 ;c_rnd_range_1 equ #1 ;random number range is 1
+ 326 ;c_rnd_range_2 equ #2 ;random number range is 2
+ 327 ;c_rnd_range_3 equ #3 ;random number range is 3
+ 328 ;c_rnd_range_4 equ #4 ;random number range is 4
+ 329 ;c_rnd_range_5 equ #5 ;random number range is 5
+ 330 ;c_rnd_range_6 equ #6 ;random number range is 6
+ 331 ;c_rnd_range_8 equ #8 ;random number range is 8
+ 332
+ 333 ;c_delay_short equ #120 ;delay short constant
+ 334
+ 335 ;;================================================================;
+ 336 ;IR Data Area
+ 337 ;================================================================;
+ 338 ; .area ir_judge_var(data)
+ 339 ;
+ 340 ;flg_ir_received:: .ds 1 ;接收后的状态(0-7表示)(哪个地方有障外)the flag of received IR
+ 341 ;flg_l_or_r:: .ds 1 ;the flag of turn left or turn right when detect obstacles in front or front-left-right of the mouse
+ 342 ;;cnt_38k_pulse:: .ds 1 ;IR transmitted pulse counter
+ 343 ;;cnt_ir_group:: .ds 1
+ 344 ;cnt_ir_rcv_f:: .ds 1
+ 345 ;cnt_ir_rcv_l:: .ds 1
+ 346 ;cnt_ir_rcv_r:: .ds 1
+ 347 ;;temp_delay_short:: .ds 1 ;short delay variable
+ 348
+ 349 ;================================================================;
+ 350 ;IR Code Area
+ 351 ;================================================================;
+ 352 ; .area ir_judge_code(code)
+ 353
+ 354 ;*********************************************************************
+ 355 ; intput:flg_motor_status,flg_ir_judge(接收是否完成)
+ 356 ; cnt_ir_rcv_f,cnt_ir_rcv_l,cnt_ir_rcv_r(中,左,右接收的红外个数)
+ 357 ;
+ 358 ; output:
+ 359 ;*********************************************************************
+ 360 ;ir_judge::
+ 361 ;
+ 362 ;if_judge_ir:
+ 363 ; lda flg_ir_judge ;if judge IR?(是否接收发射完成了?)
+ 364 ; cmpe #1
+ 365 ; brnz ir_judge_end
+ 366 ;
+ 367 ; lda #0
+ 368 ; sta flg_ir_judge
+ 369 ;judge_ir:
+ 370 ; call ir_received_judge ;接收判断子程序
+ 371
+ 372 ;;************/*04-02-26*/***************;
+ 373 ; lda flg_ir_received
+ 374 ; cmpe #c_flg_f_rcved
+ 375 ; brz judge_ir_end
+ 376 ; cmpe #c_flg_f_l_r_rcved
+ 377 ; brz judge_ir_end
+ 378 ;
+ 379 ; lda flg_l_or_r
+ 380 ; xora #1
+ 381 ; sta flg_l_or_r
+ 382 ;;***************************************;
+ 383 ;judge_ir_end:
+ 384 ;; lda #0 ;clear the flag and the counters
+ 385 ;; sta cnt_ir_group
+ 386 ;; sta cnt_ir_rcv_f
+ 387 ;; sta cnt_ir_rcv_l
+ 388 ;; sta cnt_ir_rcv_r
+ 389 ;ir_judge_end:
+ 390 ; ret
+ 391
+ 392 ;;----------------------------------------------------------------;
+ 393 ;;IR Received Judge Subroutine接收判断子程序
+ 394 ;;----------------------------------------------------------------;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -