📄 t1_tx_moto.asl
字号:
+ 1 ;****************************************************************;
+ 2 ; Timer1 Service Routine
+ 3 ;
+ 4 ; Generate motor control pulse and Play sound
+ 5 ; Timer1 frequency: 8K
+ 6 ; Motor control pulse frequency:
+ 7 ;
+ 8 ; Written by: lixy
+ 9 ; Date: 2004-02-14
+ 10 ;****************************************************************;
+ 11
+ 12 ;================================================================;
+ 13 ;Constant Area
+ 14 ;================================================================;
00FE 15 c_prtc0_0 equ #11111110b
0001 16 c_prtc0_1 equ #00000001b
0001 17 c_prtd0_1 equ #00000001b
0002 18 c_prtd1_1 equ #00000010b
0004 19 c_prtd2_1 equ #00000100b
0007 20 c_prtd012_1 equ #00000111b
0005 21 c_ir_transmit equ #5
0005 22 c_ir_transmit_l equ #5
000D 23 c_ir_transmit_h equ #13
000C 24 c_ir_group equ #12
0004 25 cnt_ir_transmit_high equ #4 ;05ms/(1/8k)=4
0014 26 cnt_ir_tx_lead equ #20 ;2.5ms/(1/8k)=4
0004 27 cnt_ir_tx_data_0 equ #4 ;0.5ms/(1/8k)=4
+ 28 ;cnt_ir_tx_data2 equ #4 ;0.5ms/(1/8k)=4
000C 29 cnt_ir_tx_data_1 equ #12 ;1.5ms/(1/8k)=12
+ 30 ;cnt_ir_tx_data2r equ #12 ;1.5ms/(1/8k)=12
0004 31 cnt_ir_tx_stop equ #4 ;0.5ms/(1/8k)=12
001D 32 cnt_ir_rcv_max equ #29 ;3.625ms
000F 33 c_ir_tx_data equ #00001111b ;ir transmit data mouse_self
+ 34 ;================================================================;
+ 35 ;Timer1 Data Area
+ 36 ;================================================================;
+B 00 01
+ 37 .area time1_var(data)
+ 38
0000 39 temp_a_1:: .ds 1 ;store the acc value
0001 40 temp_op1_1:: .ds 1
0002 41 temp_dp_1:: .ds 1
0003 42 cnt_timer1:: .ds 1 ;the interrupt times counter
0004 43 cnt_ctrl_pulse:: .ds 2 ;the motor control pulse counter
+ 44
0006 45 cnt_ir_transmit:: .ds 1
+ 46 ;cnt_ir_group:: .ds 1
0007 47 cnt_ir_rcv:: .ds 1
+ 48 ;//status_ir_rcv is defined in IR_RCV_INT
+ 49 ;status_ir_rcv:: .ds 1 ;0 states no data received,1 is lead received ok
+ 50 ;2 is data1 received ok,3 is data2 received ok,4 is data1 reverse ok,5 is data2 reverse ok
+ 51 ;6 is mouse_self ok,7 states cheese broadcast sign received,8 states cheese touched received.
+ 52 ;cnt_ir_rcv_f:: .ds 1
+ 53 ;cnt_ir_rcv_l:: .ds 1
+ 54 ;cnt_ir_rcv_r:: .ds 1
0008 55 flg_ir_judge:: .ds 1
0009 56 flg_ir_transmit:: .ds 1
000A 57 status_ir_transmit:: .ds 1 ;0 is not transmit,1 is preamble,2 is data1(0),3 is data2(0)
+ 58 ;4 is data1 reverse(1),5 is data2 reverse(1),6 is stop bit
000B 59 flg_ir_transmit_high:: .ds 1 ;when it is set to 1, not transmit 38k
000C 60 cnt_ir_tx_data:: .ds 1 ;ir transmit data 00001111b
000D 61 flg_ir_tx_1:: .ds 1 ;tx 1 flag
+ 62 ;================================================================;
+ 63 ; PCM Speech Subroutine
+ 64 ;================================================================;
+ 65 ;.area pcmvari(data)
+ 66 ;-------------------------------------
000E 67 M_sphptr:: .ds 3
0011 68 M_stopbit:: .ds 1
0012 69 M_pcmdata:: .ds 1
+ 70 ;================================================================;
+ 71 ;Timer1 Code Area
+ 72 ;================================================================;
+B 00 02
+ 73 .area timer1_isr(code)
+ 74
0000 75 t1_isr::
0000 FD 00 76 sta temp_a_1 ;save register A
0002 F0 22 77 lda r_op1 ;save register OP1
0004 FD 01 78 sta temp_op1_1
0006 F0 21 79 lda r_dp ;save register DP
0008 FD 02 80 sta temp_dp_1
+ 81
000A 20 01 19 82 call motor_control_pulse
+ 83 ;//04-04-09// add
+ 84 ;//20040630,transmit mouse self data 0011
000D F1 0A 85 lda status_ir_transmit
000F A7 00 86 cmpe #0 ;if status=0,yes,no need transmit
0011 06 00 17 87 brz p_skip_tx
0014 20 00 40 88 call ir_transmit ;need transmit
0017 89 p_skip_tx:
+ 90 ;//Receive IR count
0017 F1 07 91 lda cnt_ir_rcv ;receive IR count*125us
0019 1F 92 inca
001A FD 07 93 sta cnt_ir_rcv
001C A7 1D 94 cmpe #cnt_ir_rcv_max ;cnt_ir_rcv>=cnt_ir_rcv_max, c=1
001E 05 00 27 95 brnc t1_isr_play ;cnt_ir_rcv<max,receiver ir normal,skip
0021 F3 00 96 lda #0
0023 FD 07 97 sta cnt_ir_rcv
0025 FD 00 98 sta status_ir_rcv
+ 99
0027 100 t1_isr_play:
0027 F3 FF 101 lda #0ffh ;检查是否播发完?
0029 A5 11 102 cmpe M_stopbit
002B 06 00 35 103 brz t1_isr_end
002E 20 00 EE 104 call Pcm_Play
0031 F1 12 105 lda M_pcmdata
0033 FC 34 106 sta r_pwmc
0035 107 t1_isr_end:
0035 F1 02 108 lda temp_dp_1 ;restore register DP
0037 FC 21 109 sta r_dp
0039 F1 01 110 lda temp_op1_1 ;restore register OP1
003B FC 22 111 sta r_op1
003D F1 00 112 lda temp_a_1 ;restore register A
003F 25 113 reti
+ 114
+ 115 ;--------------------------------------------------------------------;
+ 116 ;IR Transmit and Receive Subroutine
+ 117 ;IR transmit pin: PRTC.0 ("1" not transmit, "0" transmit)
+ 118 ;IR receive pins: PRTD.7 (front)
+ 119
0040 120 ir_transmit:
0040 F1 06 121 lda cnt_ir_transmit ;发射的信号的电平长度计数
0042 1F 122 inca
0043 FD 06 123 sta cnt_ir_transmit
0045 F1 0B 124 lda flg_ir_transmit_high ;1 stop 38k
0047 A7 00 125 cmpe #0
0049 06 00 81 126 brz ir_transmit_low ;=0,goto low
004C F1 06 127 lda cnt_ir_transmit ;high
004E A7 04 128 cmpe #cnt_ir_transmit_high ;0.5ms/125us=4,
0050 06 00 54 129 brz ir_transmit_next_bit ;=4 will enter the next status(low)
0053 24 130 ret ;continue hold high
0054 131 ir_transmit_next_bit:
0054 F1 0C 132 lda cnt_ir_tx_data
0056 8B 00 133 adda #0 ;clear cy
0058 7E 134 rolc
0059 FD 0C 135 sta cnt_ir_tx_data
005B F3 00 136 lda #0
005D FD 0D 137 sta flg_ir_tx_1 ;clear 0
005F 99 0D 138 addc flg_ir_tx_1
0061 FD 0D 139 sta flg_ir_tx_1 ;set cy
0063 F0 31 140 lda r_prtc ;when prtc.0 is low, 38k carrier pulse pass-by.
0065 CB FE 141 anda #c_prtc0_0
0067 FC 31 142 sta r_prtc
0069 F3 00 143 lda #0
006B FD 06 144 sta cnt_ir_transmit ;clear the counter,repeat count
006D FD 0B 145 sta flg_ir_transmit_high ;0 to transmit 38k
006F F1 0A 146 lda status_ir_transmit
0071 1F 147 inca
0072 FD 0A 148 sta status_ir_transmit
0074 A7 0B 149 cmpe #11
0076 04 00 7A 150 brc ir_transmit_over
0079 24 151 ret
007A 152 ir_transmit_over: ;stop bit,shouldn't have this status
007A F0 31 153 lda r_prtc ;when prtc.0 is high, not transmit ir.
007C DB 01 154 ora #c_prtc0_1 ;把PC[1]置高
007E FC 31 155 sta r_prtc
0080 24 156 ret
0081 157 ir_transmit_low:
0081 F1 0A 158 lda status_ir_transmit
0083 A7 01 159 cmpe #1 ;is lead preamble?
0085 07 00 9A 160 brnz ir_transmit_data_low
0088 F1 06 161 lda cnt_ir_transmit ;transmit lead code
008A A7 14 162 cmpe #cnt_ir_tx_lead
008C 04 00 C2 163 brc ir_transmit_low_00 ;>=,turn to high 0.5ms
008F F0 31 164 lda r_prtc ;continue tx 38k,when prtc.0 is low, 38k carrier pulse pass-by.
0091 CB FE 165 anda #c_prtc0_0
0093 FC 31 166 sta r_prtc
0095 F3 0F 167 lda #c_ir_tx_data ;set initial value #00001111b
0097 FD 0C 168 sta cnt_ir_tx_data
0099 24 169 ret
009A 170 ir_transmit_data_low:
009A A7 0A 171 cmpe #10 ;is stop bit?
009C 04 00 D1 172 brc ir_tx_data_low_over
009F F1 0D 173 lda flg_ir_tx_1
00A1 A7 01 174 cmpe #1
00A3 06 00 B4 175 brz ir_transmit_data_1
00A6 F1 06 176 lda cnt_ir_transmit ;flg_ir_tx_1=0
00A8 A7 04 177 cmpe #cnt_ir_tx_data_0
00AA 06 00 C2 178 brz ir_transmit_low_00
00AD F0 31 179 lda r_prtc ;continue tx 38k,when prtc.0 is low, 38k carrier pulse pass-by.
00AF CB FE 180 anda #c_prtc0_0
00B1 FC 31 181 sta r_prtc
00B3 24 182 ret
00B4 183 ir_transmit_data_1:
00B4 F1 06 184 lda cnt_ir_transmit ;tx 1(low)
00B6 A7 0C 185 cmpe #cnt_ir_tx_data_1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -