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

📄 ir_judge.asl

📁 一款智能老鼠的玩具源代码
💻 ASL
📖 第 1 页 / 共 2 页
字号:
+                     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 + -