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

📄 int2_rx.asl

📁 一款智能老鼠的玩具源代码
💻 ASL
字号:
+                     1 ;****************************************************************;
+                     2 ;INT2_isr Service Routine
+                     3 ;
+                     4 ; function: IR Receiver judge
+                     5 ; Extern Interrupt High to low trigger
+                     6 ;
+                     7 ; Written by: Mr.Kelvin Yuan
+                     8 ; Date: 2004-06-30
+                     9 ;
+                    10 ;****************************************************************;
+                    11 
+                    12 ;================================================================;
+                    13 ;Constant Area
+                    14 ;================================================================;
+                    15 ;//04-03-17// revise for reducing the ir detect interval time
0016                 16 cnt_ir_lead_min		equ	#22	;standard value shall be 24(2.5ms+0.5ms=3ms),3ms/125us
001D                 17 cnt_ir_lead_max		equ	#29	;3.5ms+125us,1ms=8
0013                 18 cnt_ir_data_max		equ	#19	;standard is 16(2.0ms),+4(0.5ms)
0004                 19 cnt_ir_data_min		equ	#4      ;the minium data 0 is 1ms,0.5ms is limited(4)
000C                 20 cnt_ir_data0_max	equ	#12	;>=1.5ms is 1(2ms,16),<1.5ms is 0(1ms,8)
000F                 21 mouse_self_data		equ	#00001111b ;receive mouse self data
005A                 22 cheese_broadcast_data	equ	#01011010b ;receive cheese broadcast data
00E1                 23 cheese_touched_data	equ	#11100001b ;receive cheese touched data
+                    24 ;================================================================;
+                    25 ;Data Area
+                    26 ;================================================================;
+B 00 01

+                    27        .area    INT1_var(data)
0000                 28 temp_a_3::		.ds	1
0001                 29 temp_op1_3::		.ds	1
0002                 30 temp_dp_3::		.ds	1
0003                 31 status_ir_rcv::		.ds	1	;0 states no data received,1 is lead received ready
+                    32 ;2 is data1 received ready;3 is data2 received ready,4 is data1 reverse ready,5 is data2 reverse ready
+                    33 ;6 is mouse_self ok,7 states cheese broadcast sign received,8 states cheese touched received.
0004                 34 ir_rcv_data::		.ds	1
+                    35 ;ir_rcv_data_temp::	.ds	1
+                    36 ;cnt_broadcast_tmr::	.ds	2
0005                 37 flg_rcv_broadcast::	.ds	1    ;1 broadcast sign received,it will be clear in 2s(timer2)
+                    38 ;temp_count::		.ds	2    ;for test
0006                 39 flg_rcv_touched::	.ds	1    ;touched sign be received flag
+                    40 ;cnt_ir_rcv_temp :	.ds 	5 ;for test
0007                 41 flg_rcv_barrier::	.ds	1	;barrier sign received
+                    42 ;================================================================;
+                    43 ;Code Area
+                    44 ;================================================================;
+B 00 02

+                    45        .area    INT2_isr(code)
+                    46 
0000                 47 INT2_isr::
+                    48  
0000 FD 00           49 	sta	temp_a_3
0002 F0 22           50 	lda	r_op1
0004 FD 01           51 	sta	temp_op1_3
0006 F0 21           52 	lda	r_dp
0008 FD 02           53 	sta	temp_dp_3
+                    54 
000A F1 03           55 	lda	status_ir_rcv
000C A7 00           56 	cmpe	#0             		;0 is the first entry interrupt
000E 06 00 97        57 	brz	ir_rcv_first
0011 A7 01           58 	cmpe	#1     			;1 is the second entry intterrup
0013 06 00 7E        59 	brz	ir_rcv_lead		;lead code judge
0016 F1 00           60 	lda	cnt_ir_rcv
+                    61 
0018 A7 13           62 	cmpe	#cnt_ir_data_max	;cnt_ir_rcv>=cnt_ir_data_max,c=1,error
001A 04 00 4D        63 	brc	ir_rcv_data_err		;error process
001D A7 04           64 	cmpe	#cnt_ir_data_min	;cnt_ir_rcv<cnt_ir_data_min,c=0,psuedo pulse,no process
+                    65 ;20040707
001F 05 00 4D        66 	brnc	ir_rcv_data_err	;psuedo pulse,skip,wait for the next int,count continue
0022 A7 0C           67 	cmpe 	#cnt_ir_data0_max	;>=1.5ms is 1,<1.5ms c=0,
0024 F1 04           68 	lda	ir_rcv_data
0026 7E              69 	rolc
0027 FD 04           70 	sta	ir_rcv_data
0029 F1 03           71 	lda	status_ir_rcv
+                    72 ; cmpe	#2
+                    73 ; brnz	ir_rcv_data_test1
+                    74 ; lda	cnt_ir_rcv
+                    75 ; sta	cnt_ir_rcv_temp         ;for test
+                    76 ; br	test_return
+                    77 ;ir_rcv_data_test1:
+                    78 ; cmpe	#3
+                    79 ; brnz	ir_rcv_data_test2
+                    80 ; lda	cnt_ir_rcv
+                    81 ; sta	cnt_ir_rcv_temp+1         ;for test
+                    82 ; br	test_return
+                    83 ;ir_rcv_data_test2:
+                    84 ; cmpe	#4
+                    85 ; brnz	ir_rcv_data_test3
+                    86 ; lda	cnt_ir_rcv
+                    87 ; sta	cnt_ir_rcv_temp+2         ;for test
+                    88 ; br	test_return
+                    89 ;ir_rcv_data_test3:
+                    90 ; cmpe	#5
+                    91 ; brnz	test_return
+                    92 ; lda	cnt_ir_rcv
+                    93 ; sta	cnt_ir_rcv_temp+3         ;for test
+                    94 ; nop
+                    95 ;test_return:
+                    96 
002B F3 00           97 	lda	#0
002D FD 00           98 	sta	cnt_ir_rcv
002F F1 03           99 	lda	status_ir_rcv
0031 A7 09          100 	cmpe	#9			;is the last data reverse?
0033 06 00 3C       101 	brz	ir_rcv_data_ok
0036 1F             102 	inca
0037 FD 03          103 	sta	status_ir_rcv
0039 02 00 A2       104 	br	INT2_isr_end
003C                105 ir_rcv_data_ok:
+                   106 ;	lda	temp_count      ;for test
+                   107 ;	inca
+                   108 ;	sta	temp_count
+                   109 ;	lda	temp_count+1
+                   110 ;	addc	#0
+                   111 ;	sta	temp_count+1
003C F1 04          112 	lda	ir_rcv_data
003E A7 0F          113 	cmpe	#mouse_self_data
0040 06 00 77       114 	brz	ir_rcv_data_ok_self
0043 A7 5A          115 	cmpe	#cheese_broadcast_data
0045 06 00 6A       116 	brz	ir_rcv_data_ok_bc
0048 A7 E1          117 	cmpe	#cheese_touched_data
004A 06 00 58       118 	brz	ir_rcv_data_ok_touched
004D                119 ir_rcv_data_err:
004D F3 00          120 	lda	#0		;data wrong
004F FD 03          121 	sta	status_ir_rcv
0051 FD 00          122 	sta	cnt_ir_rcv
0053 FD 04          123 	sta	ir_rcv_data
0055 02 00 A2       124 	br	INT2_isr_end
+                   125 
0058                126 ir_rcv_data_ok_touched:         ;maouse be touched,game will over
0058 F1 00          127 	lda	flg_touched_key   ;it is wrong that touched sign is received before broadcast sign received and key presssed
005A A7 01          128 	cmpe	#1
005C 07 00 4D       129 	brnz	ir_rcv_data_err
005F F3 01          130 	lda	#1
0061 FD 06          131 	sta	flg_rcv_touched
0063 F3 00          132 	lda	#0
0065 FD 00          133 	sta	status_ir_transmit	;stop transmit IR
0067 02 00 4D       134 	br	ir_rcv_data_err       ;the result is ok, only initial all,	
006A                135 ir_rcv_data_ok_bc:
006A F3 00          136 	lda	#0			;broadcast sign is received,will slow tx IR
006C FD 00          137 	sta	cnt_broadcast_tmr
006E FD 01          138 	sta	cnt_broadcast_tmr+1
0070 F3 01          139 	lda	#1
0072 FD 05          140 	sta	flg_rcv_broadcast      ;setup the received broadcast flag
0074 02 00 4D       141 	br	ir_rcv_data_err       ;the result is ok, only initial all,
+                   142 
0077                143 ir_rcv_data_ok_self:
0077 F3 01          144 	lda	#1			;barrier, will change director
0079 FD 07          145 	sta	flg_rcv_barrier
007B 02 00 4D       146 	br	ir_rcv_data_err       ;the result is ok, only initial all,
007E                147 ir_rcv_lead:
007E F1 00          148 	lda	cnt_ir_rcv
0080 A7 1D          149 	cmpe	#cnt_ir_lead_max	;cnt_ir_rcv>=cnt_ir_lead_max,c=1 jump
0082 04 00 4D       150 	brc	ir_rcv_data_err		;too big,error and exit,the status will be cleared in timer1_isr
0085 A7 16          151 	cmpe	#cnt_ir_lead_min        ;c/=1,is too small,error.c=1 is ok,
0087 05 00 4D       152 	brnc	ir_rcv_data_err
008A F3 02          153 	lda	#2
008C FD 03          154 	sta	status_ir_rcv           ;lead ok,ready to receive data
008E F3 00          155 	lda	#0
0090 FD 04          156 	sta	ir_rcv_data		;clear receive data registor
0092 FD 00          157 	sta	cnt_ir_rcv              ;clear ir receive counter,it will increase in timer1_isr 
0094 02 00 A2       158 	br	INT2_isr_end
0097                159 ir_rcv_first:
0097 F3 01          160 	lda	#1            ;the first entry INT,
0099 FD 03          161 	sta	status_ir_rcv
009B F3 00          162 	lda	#0
009D FD 00          163 	sta	cnt_ir_rcv
009F 02 00 A2       164 	br	INT2_isr_end
00A2                165 INT2_isr_end:
00A2 F1 02          166 	lda	temp_dp_3
00A4 FC 21          167 	sta	r_dp
00A6 F1 01          168 	lda	temp_op1_3
00A8 FC 22          169 	sta	r_op1
00AA F1 00          170 	lda	temp_a_3
00AC 25             171 	reti			;/*04-06-30/
+
+Symbol Table
+
+  2 INT2_isr                           0000 GR
+  2 INT2_isr_end                       00A2 R
+    cheese_broadcast_data           =  005A 
+    cheese_touched_data             =  00E1 
+    cnt_broadcast_tmr                  **** GX
+    cnt_ir_data0_max                =  000C 
+    cnt_ir_data_max                 =  0013 
+    cnt_ir_data_min                 =  0004 
+    cnt_ir_lead_max                 =  001D 
+    cnt_ir_lead_min                 =  0016 
+    cnt_ir_rcv                         **** GX
+  1 flg_rcv_barrier                    0007 GR
+  1 flg_rcv_broadcast                  0005 GR
+  1 flg_rcv_touched                    0006 GR
+    flg_touched_key                    **** GX
+  1 ir_rcv_data                        0004 GR
+  2 ir_rcv_data_err                    004D R
+  2 ir_rcv_data_ok                     003C R
+  2 ir_rcv_data_ok_bc                  006A R
+  2 ir_rcv_data_ok_self                0077 R
+  2 ir_rcv_data_ok_touched             0058 R
+  2 ir_rcv_first                       0097 R
+  2 ir_rcv_lead                        007E R
+    mouse_self_data                 =  000F 
+  1 status_ir_rcv                      0003 GR
+    status_ir_transmit                 **** GX
+  1 temp_a_3                           0000 GR
+  1 temp_dp_3                          0002 GR
+  1 temp_op1_3                         0001 GR
+
+
+Area Table
+
+   0 .                                  size    0   flags 0
+   1 INT1_var                           size    8   flags 2
+   2 INT2_isr                           size   AD   flags 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -