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

📄 run.asl

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