📄 ir_judge.asl
字号:
+ 1 ;****************************************************************;
+ 2 ; IR Judge
+ 3 ;
+ 4 ; Carrier Frequency: 38K
+ 5 ; IR transmit output pin: PRTC[0]
+ 6 ; IR receive input pins: PRTD[0](front side)
+ 7 ; PRTD[1](left side)
+ 8 ; PRTD[2](right side)
+ 9 ;
+ 10 ; Written by: lixy
+ 11 ; Date: 2004-04-08
+ 12 ;****************************************************************;
+ 13
+ 14 ;================================================================;
+ 15 ;Constant Area
+ 16 ;================================================================;
0007 17 c_prtc012_1 equ #00000111b
00F8 18 c_prtc012_0 equ #11111000b
+ 19
0007 20 c_prtd012_1 equ #00000111b
0001 21 c_prtd0_1 equ #00000001b
00FE 22 c_prtd0_0 equ #11111110b
0002 23 c_prtd1_1 equ #00000010b
00FD 24 c_prtd1_0 equ #11111101b
0004 25 c_prtd2_1 equ #00000100b
00FB 26 c_prtd2_0 equ #11111011b
+ 27
+ 28 ;c_38k_pulse equ #22 ;the total number of 38k IR pulse transmitted(23*26us=598us)
+ 29 ;//04-03-17// revise the ir groups total number (primer value is 20)
+ 30 ;c_ir_group equ #12 ;the interval between 38k pulse groups in one IR group
+ 31 ;end revise //04-03-17//
000A 32 c_ir_rcv_f equ #10
000A 33 c_ir_rcv_l equ #10
000A 34 c_ir_rcv_r equ #10
0001 35 c_flg_f_rcved equ #1 ;表示前面有障碍物
0002 36 c_flg_l_rcved equ #2 ;表示左面有障碍物
0003 37 c_flg_r_rcved equ #3 ;表示右边有障碍物
0004 38 c_flg_f_l_rcved equ #4 ;表示前左有障碍物
0005 39 c_flg_f_r_rcved equ #5 ;表示前右有障碍物
0006 40 c_flg_l_r_rcved equ #6 ;表示左右有障碍物
0007 41 c_flg_f_l_r_rcved equ #7 ;表示前左右都有障碍物
+ 42
0000 43 c_offset_f equ #0
+ 44 ;--------------------------------------以下为左转的开始偏移
0048 45 c_offset_l_20 equ #72 ;=9(row)*8(column) left 20 degree
0050 46 c_offset_l_40 equ #80 ;=10(row)*8(column) left 40 degree
0058 47 c_offset_l_60 equ #88 ;=11(row)*8(column) left 60 degree
0060 48 c_offset_l_80 equ #96 ;=12(row)*8(column) left 80 degree
0068 49 c_offset_l_100 equ #104 ;=13(row)*8(column) left 100 degree
0070 50 c_offset_l_120 equ #112 ;=14(row)*8(column) left 120 degree
+ 51 ;--------------------------------------以下为右转的开始偏移
0090 52 c_offset_r_20 equ #144 ;=18(row)*8(column) right 20 degree
0098 53 c_offset_r_40 equ #152 ;=19(row)*8(column) right 40 degree
00A0 54 c_offset_r_60 equ #160 ;=20(row)*8(column) right 60 degree
00A8 55 c_offset_r_80 equ #168 ;=21(row)*8(column) right 80 degree
00B0 56 c_offset_r_100 equ #176 ;=22(row)*8(column) right 100 degree
00B8 57 c_offset_r_120 equ #184 ;=23(row)*8(column) right 120 degree
+ 58 ;;-------------------------------------以下为红外左右转表的开始偏移
+ 59 ;//04-03-17// add for swerve when detceting the obstacles
00F0 60 c_offset_l_20_ir equ #240 ;=30(row)*8(column) left 20 degree
00F8 61 c_offset_l_40_ir equ #248 ;=31(row)*8(column) left 40 degree
0100 62 c_offset_l_60_ir equ #256 ;=32(row)*8(column) left 60 degree
0138 63 c_offset_r_20_ir equ #312 ;=39(row)*8(column) right 20 degree
0140 64 c_offset_r_40_ir equ #320 ;=40(row)*8(column) right 40 degree
0148 65 c_offset_r_60_ir equ #328 ;=41(row)*8(column) right 60 degree
+ 66 ;end adding //04-03-17//
+ 67
0001 68 c_rnd_range_1 equ #1 ;random number range is 1
0002 69 c_rnd_range_2 equ #2 ;random number range is 2
0003 70 c_rnd_range_3 equ #3 ;random number range is 3
0004 71 c_rnd_range_4 equ #4 ;random number range is 4
0005 72 c_rnd_range_5 equ #5 ;random number range is 5
0006 73 c_rnd_range_6 equ #6 ;random number range is 6
0008 74 c_rnd_range_8 equ #8 ;random number range is 8
+ 75
0078 76 c_delay_short equ #120 ;delay short constant
+ 77
+ 78 ;================================================================;
+ 79 ;IR Data Area
+ 80 ;================================================================;
+B 00 01
+ 81 .area ir_judge_var(data)
+ 82
0000 83 flg_ir_received:: .ds 1 ;接收后的状态(0-7表示)(哪个地方有障外)the flag of received IR
0001 84 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
+ 85 ;cnt_38k_pulse:: .ds 1 ;IR transmitted pulse counter
+ 86 ;cnt_ir_group:: .ds 1
0002 87 cnt_ir_rcv_f:: .ds 1
0003 88 cnt_ir_rcv_l:: .ds 1
0004 89 cnt_ir_rcv_r:: .ds 1
+ 90 ;temp_delay_short:: .ds 1 ;short delay variable
+ 91
+ 92 ;================================================================;
+ 93 ;IR Code Area
+ 94 ;================================================================;
+B 00 02
+ 95 .area ir_judge_code(code)
+ 96
+ 97 ;*********************************************************************
+ 98 ; intput:flg_motor_status,flg_ir_judge(接收是否完成)
+ 99 ; cnt_ir_rcv_f,cnt_ir_rcv_l,cnt_ir_rcv_r(中,左,右接收的红外个数)
+ 100 ;
+ 101 ; output:
+ 102 ;*********************************************************************
0000 103 ir_judge::
+ 104 ;//20040701
+ 105 ; lda flg_motor_status ;at stop status?(stop: flg_motor_status=4)
+ 106 ; cmpe #4
+ 107 ; brnz if_judge_ir
+ 108 ;
+ 109 ; lda #0 ;/*04-03-02*/
+ 110 ; sta flg_ir_received ;added for eyes keep lighting normally when stopping.
+ 111 ; br judge_ir_end ;if at stop status, not transmit ir.
+ 112
0000 113 if_judge_ir:
0000 F1 00 114 lda flg_ir_judge ;if judge IR?(是否接收发射完成了?)
0002 A7 01 115 cmpe #1
0004 07 00 20 116 brnz ir_judge_end
+ 117
0007 F3 00 118 lda #0
0009 FD 00 119 sta flg_ir_judge
000B 120 judge_ir:
000B 20 00 21 121 call ir_received_judge ;接收判断子程序
+ 122
+ 123 ;************/*04-02-26*/***************;
000E F1 00 124 lda flg_ir_received
0010 A7 01 125 cmpe #c_flg_f_rcved
0012 06 00 20 126 brz judge_ir_end
0015 A7 07 127 cmpe #c_flg_f_l_r_rcved
0017 06 00 20 128 brz judge_ir_end
+ 129
001A F1 01 130 lda flg_l_or_r
001C EB 01 131 xora #1
001E FD 01 132 sta flg_l_or_r
+ 133 ;***************************************;
0020 134 judge_ir_end:
+ 135 ; lda #0 ;clear the flag and the counters
+ 136 ; sta cnt_ir_group
+ 137 ; sta cnt_ir_rcv_f
+ 138 ; sta cnt_ir_rcv_l
+ 139 ; sta cnt_ir_rcv_r
0020 140 ir_judge_end:
0020 24 141 ret
+ 142
+ 143 ;----------------------------------------------------------------;
+ 144 ;IR Received Judge Subroutine接收判断子程序
+ 145 ;----------------------------------------------------------------;
0021 146 ir_received_judge::
+ 147
0021 148 f_judge:
0021 F1 02 149 lda cnt_ir_rcv_f
0023 A7 0A 150 cmpe #c_ir_rcv_f
0025 05 00 B5 151 brnc f_no_l_judge
+ 152
0028 153 f_yes_l_judge:
0028 F1 03 154 lda cnt_ir_rcv_l
002A A7 0A 155 cmpe #c_ir_rcv_l
002C 05 00 72 156 brnc f_yes_l_no_r_judge
+ 157
002F 158 f_yes_l_yes_r_judge:
002F F1 04 159 lda cnt_ir_rcv_r
0031 A7 0A 160 cmpe #c_ir_rcv_r
0033 05 00 5F 161 brnc f_yes_l_yes_r_no
+ 162
+ 163 ;*************/*04-02-26*/**************;
0036 164 f_yes_l_yes_r_yes:
0036 F3 07 165 lda #c_flg_f_l_r_rcved ;左右前方有障碍,左转或右转
0038 FD 00 166 sta flg_ir_received
003A F1 01 167 lda flg_l_or_r
003C CB 01 168 anda #1
003E 07 00 50 169 brnz f_l_r_turn_right ;0 turn left, 1 turn right
0041 170 f_l_r_turn_left: ;左转;//04-03-17// revise the initial offset
0041 F3 00 171 lda #>c_offset_l_40_ir ;为什么这样写>(可能是想表明这里是送进查表里的)
0043 FD 00 172 sta m_offset_ini_h ;查表地址开始值
0045 F3 F8 173 lda #<c_offset_l_40_ir
0047 FD 00 174 sta m_offset_ini
0049 F3 01 175 lda #c_rnd_range_1
004B FD 00 176 sta m_rnd_range ;m_rnd_range为所求的随机数的大小
004D 02 01 04 177 br ir_received_set
0050 178 f_l_r_turn_right: ;右转
0050 F3 01 179 lda #>c_offset_r_40_ir
0052 FD 00 180 sta m_offset_ini_h
0054 F3 40 181 lda #<c_offset_r_40_ir
0056 FD 00 182 sta m_offset_ini
0058 F3 01 183 lda #c_rnd_range_1
005A FD 00 184 sta m_rnd_range
005C 02 01 04 185 br ir_received_set
+ 186 ;***************************************;
+ 187
005F 188 f_yes_l_yes_r_no:
005F F3 04 189 lda #c_flg_f_l_rcved ;左前方有障碍,右转
0061 FD 00 190 sta flg_ir_received
0063 F3 01 191 lda #>c_offset_r_40_ir
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -