📄 run.asm
字号:
; sta temp_flg_ir_received
; ret
;;================================================================;
;;****************************************************************;
;; IR Judge
;
;; Carrier Frequency: 38K
;; IR transmit output pin: PRTC[0]
;; IR receive input pins: PRTD[0](front side)
;; PRTD[1](left side)
;; PRTD[2](right side)
;;
;; Written by: lixy
;; Date: 2004-04-08
;;****************************************************************;
;
;;================================================================;
;;Constant Area
;;================================================================;
;c_prtc012_1 equ #00000111b
;c_prtc012_0 equ #11111000b
;
;c_prtd012_1 equ #00000111b
;c_prtd0_1 equ #00000001b
;c_prtd0_0 equ #11111110b
;c_prtd1_1 equ #00000010b
;c_prtd1_0 equ #11111101b
;c_prtd2_1 equ #00000100b
;c_prtd2_0 equ #11111011b
;;c_38k_pulse equ #22 ;the total number of 38k IR pulse transmitted(23*26us=598us)
;;//04-03-17// revise the ir groups total number (primer value is 20)
;;c_ir_group equ #12 ;the interval between 38k pulse groups in one IR group
;;end revise //04-03-17//
;c_ir_rcv_f equ #10
;c_ir_rcv_l equ #10
;c_ir_rcv_r equ #10
;c_flg_f_rcved equ #1 ;表示前面有障碍物
;c_flg_l_rcved equ #2 ;表示左面有障碍物
;c_flg_r_rcved equ #3 ;表示右边有障碍物
;c_flg_f_l_rcved equ #4 ;表示前左有障碍物
;c_flg_f_r_rcved equ #5 ;表示前右有障碍物
;c_flg_l_r_rcved equ #6 ;表示左右有障碍物
;c_flg_f_l_r_rcved equ #7 ;表示前左右都有障碍物
;c_offset_f equ #0
;;--------------------------------------以下为左转的开始偏移
;c_offset_l_20 equ #72 ;=9(row)*8(column) left 20 degree
;c_offset_l_40 equ #80 ;=10(row)*8(column) left 40 degree
;c_offset_l_60 equ #88 ;=11(row)*8(column) left 60 degree
;c_offset_l_80 equ #96 ;=12(row)*8(column) left 80 degree
;c_offset_l_100 equ #104 ;=13(row)*8(column) left 100 degree
;c_offset_l_120 equ #112 ;=14(row)*8(column) left 120 degree
;;--------------------------------------以下为右转的开始偏移
;c_offset_r_20 equ #144 ;=18(row)*8(column) right 20 degree
;c_offset_r_40 equ #152 ;=19(row)*8(column) right 40 degree
;c_offset_r_60 equ #160 ;=20(row)*8(column) right 60 degree
;c_offset_r_80 equ #168 ;=21(row)*8(column) right 80 degree
;c_offset_r_100 equ #176 ;=22(row)*8(column) right 100 degree
;c_offset_r_120 equ #184 ;=23(row)*8(column) right 120 degree
;;;-------------------------------------以下为红外左右转表的开始偏移
;;//04-03-17// add for swerve when detceting the obstacles
;c_offset_l_20_ir equ #240 ;=30(row)*8(column) left 20 degree
;c_offset_l_40_ir equ #248 ;=31(row)*8(column) left 40 degree
;c_offset_l_60_ir equ #256 ;=32(row)*8(column) left 60 degree
;c_offset_r_20_ir equ #312 ;=39(row)*8(column) right 20 degree
;c_offset_r_40_ir equ #320 ;=40(row)*8(column) right 40 degree
;c_offset_r_60_ir equ #328 ;=41(row)*8(column) right 60 degree
;;end adding //04-03-17//
;c_rnd_range_1 equ #1 ;random number range is 1
;c_rnd_range_2 equ #2 ;random number range is 2
;c_rnd_range_3 equ #3 ;random number range is 3
;c_rnd_range_4 equ #4 ;random number range is 4
;c_rnd_range_5 equ #5 ;random number range is 5
;c_rnd_range_6 equ #6 ;random number range is 6
;c_rnd_range_8 equ #8 ;random number range is 8
;c_delay_short equ #120 ;delay short constant
;;================================================================;
;IR Data Area
;================================================================;
; .area ir_judge_var(data)
;
;flg_ir_received:: .ds 1 ;接收后的状态(0-7表示)(哪个地方有障外)the flag of received IR
;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
;;cnt_38k_pulse:: .ds 1 ;IR transmitted pulse counter
;;cnt_ir_group:: .ds 1
;cnt_ir_rcv_f:: .ds 1
;cnt_ir_rcv_l:: .ds 1
;cnt_ir_rcv_r:: .ds 1
;;temp_delay_short:: .ds 1 ;short delay variable
;================================================================;
;IR Code Area
;================================================================;
; .area ir_judge_code(code)
;*********************************************************************
; intput:flg_motor_status,flg_ir_judge(接收是否完成)
; cnt_ir_rcv_f,cnt_ir_rcv_l,cnt_ir_rcv_r(中,左,右接收的红外个数)
;
; output:
;*********************************************************************
;ir_judge::
;
;if_judge_ir:
; lda flg_ir_judge ;if judge IR?(是否接收发射完成了?)
; cmpe #1
; brnz ir_judge_end
;
; lda #0
; sta flg_ir_judge
;judge_ir:
; call ir_received_judge ;接收判断子程序
;;************/*04-02-26*/***************;
; lda flg_ir_received
; cmpe #c_flg_f_rcved
; brz judge_ir_end
; cmpe #c_flg_f_l_r_rcved
; brz judge_ir_end
;
; lda flg_l_or_r
; xora #1
; sta flg_l_or_r
;;***************************************;
;judge_ir_end:
;; lda #0 ;clear the flag and the counters
;; sta cnt_ir_group
;; sta cnt_ir_rcv_f
;; sta cnt_ir_rcv_l
;; sta cnt_ir_rcv_r
;ir_judge_end:
; ret
;;----------------------------------------------------------------;
;;IR Received Judge Subroutine接收判断子程序
;;----------------------------------------------------------------;
;ir_received_judge::
;f_judge:
; lda cnt_ir_rcv_f
; cmpe #c_ir_rcv_f
; brnc f_no_l_judge
;
;f_yes_l_judge:
; lda cnt_ir_rcv_l
; cmpe #c_ir_rcv_l
; brnc f_yes_l_no_r_judge
;
;f_yes_l_yes_r_judge:
; lda cnt_ir_rcv_r
; cmpe #c_ir_rcv_r
; brnc f_yes_l_yes_r_no
;
;;*************/*04-02-26*/**************;
;f_yes_l_yes_r_yes:
; lda #c_flg_f_l_r_rcved ;左右前方有障碍,左转或右转
; sta flg_ir_received
; lda flg_l_or_r
; anda #1
; brnz f_l_r_turn_right ;0 turn left, 1 turn right
;f_l_r_turn_left: ;左转;//04-03-17// revise the initial offset
; lda #>c_offset_l_40_ir ;为什么这样写>(可能是想表明这里是送进查表里的)
; sta m_offset_ini_h ;查表地址开始值
; lda #<c_offset_l_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range ;m_rnd_range为所求的随机数的大小
; br ir_received_set
;f_l_r_turn_right: ;右转
; lda #>c_offset_r_40_ir
; sta m_offset_ini_h
; lda #<c_offset_r_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
;;***************************************;
;
;f_yes_l_yes_r_no:
; lda #c_flg_f_l_rcved ;左前方有障碍,右转
; sta flg_ir_received
; lda #>c_offset_r_40_ir
; sta m_offset_ini_h
; lda #<c_offset_r_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
;f_yes_l_no_r_judge:
; lda cnt_ir_rcv_r
; cmpe #c_ir_rcv_r
; brnc f_yes_l_no_r_no
;f_yes_l_no_r_yes:
; lda #c_flg_f_r_rcved ;右前方有障碍,左转
; sta flg_ir_received
; lda #>c_offset_l_40_ir
; sta m_offset_ini_h
; lda #<c_offset_l_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
; f_yes_l_no_r_no:
; lda #c_flg_f_rcved ;前方有障碍,左转或右转
; sta flg_ir_received
;;*************/*04-02-26*/**************;
; lda flg_l_or_r
; anda #1
; brnz f_turn_right ;0 turn left, 1 turn right
;f_turn_left: ;左转
; lda #>c_offset_l_40_ir
; sta m_offset_ini_h
; lda #<c_offset_l_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
;f_turn_right: ;右转
; lda #>c_offset_r_40_ir
; sta m_offset_ini_h
; lda #<c_offset_r_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
;;No Front ***************************************;
;f_no_l_judge:
; lda cnt_ir_rcv_l
; cmpe #c_ir_rcv_l
; brnc f_no_l_no_r_judge
;f_no_l_yes_r_judge:
; lda cnt_ir_rcv_r
; cmpe #c_ir_rcv_r
; brnc f_no_l_yes_r_no
;f_no_l_yes_r_yes:
; lda #c_flg_l_r_rcved ;左右方有障碍,前行
; sta flg_ir_received
; lda #c_offset_f
; sta m_offset_ini
; lda #c_rnd_range_8
; sta m_rnd_range
; br ir_received_set
;f_no_l_yes_r_no:
; lda #c_flg_l_rcved ;左方有障碍,右转
; sta flg_ir_received
; lda #>c_offset_r_40_ir
; sta m_offset_ini_h
; lda #<c_offset_r_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
;f_no_l_no_r_judge:
; lda cnt_ir_rcv_r
; cmpe #c_ir_rcv_r
; brnc f_no_l_no_r_no
;f_no_l_no_r_yes:
; lda #c_flg_r_rcved ;右方有障碍,左转
; sta flg_ir_received
; lda #>c_offset_l_40_ir
; sta m_offset_ini_h
; lda #<c_offset_l_40_ir
; sta m_offset_ini
; lda #c_rnd_range_1
; sta m_rnd_range
; br ir_received_set
;f_no_l_no_r_no:
; lda #0 ;没有障碍
; sta flg_ir_received
; ret
;ir_received_set: ;/*04-02-19*/
; lda #2 ;有IR时产生新随机数的标志为2
; sta flg_new_random
; lda #0
; sta cnt_ctrl_pulse ;clear control pulse counter in Timer1 Service Routine.
; sta cnt_ctrl_pulse+1 ;/*04-02-23*/
;ir_received_judge_end:
; ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -