📄 int2_rx.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 + -