?? ir_tx.asm
字號:
;%%%%%%%%%%%%%%%%%%%%%%IR發射模塊說明%%%%%%%%%%%%%%%%%%%%%%%%;
;
;發射的數據個數由D_TxNumber設定(取值在1~16之間)
;信號的結尾,自動加上停止碼
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Clear up by Wingyun%%%%;
.PAGE0
;============================================================;
D_TxNumber EQU 8 ;取值在1~16之間
D_IrTMBSrc EQU %00101000
D_IRTxEn EQU %00000100
R_DataTx_H DS 1
R_DataTx_L DS 1
;------------------------------------------------------------;
.IF D_TxNumber=0 || D_TxNumber>16
EXIT " 注意:D_TxNumber取值范圍為1~16,請重新設定!"
.ENDIF
;------------------------------------------------------------;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%IR_TX_8BitsCode .MACRO Code8Bits
LDA #Code8Bits
STA R_DataTx_H
JSR F_IR_TX
.ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%IR_TX_16BitsCode .MACRO Code16BitsH,Code16BitsL
LDA #Code16BitsH
STA R_DataTx_H
LDA #Code16BitsL
STA R_DataTx_L
JSR F_IR_TX
.ENDM
;============================================================;
.CODE
;------------------------------------------------------------;
F_IR_TX:
LDA P_0FH_IOD_Buffer
AND #%01111111 ;init Tx pin low
STA P_0FH_IOD_Buffer
SEI
LDA #177
STA P_11H_TMB ;set 38k carrier count
LDA #C0H+D_INT_TMB ;enable TimerB Interrupt
STA P_0DH_INT
LDX #30*8
JSR F_TxCarrierIR
; LDX #30*8 ;改開頭碼規格可在這里修改參數
; JSR F_TxCarrierIR
LDX #10*8 ;改開頭碼規格可在這里修改參數
JSR F_TxNonCarrierIR
LDY #D_TxNumber+1
L_TxLoopIR:
LDA #12*8 ;;1200us
ASL R_DataTx_L ;;High byte first
ROL R_DataTx_H
BCS L_TxBitHighIR
ROR A ;; A/2
L_TxBitHighIR:
TAX
JSR F_TxCarrierIR
LDX #6*8 ;;600us
JSR F_TxNonCarrierIR
DEY
BNE L_TxLoopIR
LDA R_IntFlags
STA P_0DH_INT
CLI
RTS
;-------------------------------------------------發射38KHz載波
F_TxCarrierIR:
LDA #SpeechTMASrc+D_IrTMBSrc+D_IRTxEn ;2;turn on carrier bit
STA P_0BH_TMRSel ;2
LDA #D_INT_TMB ;2
L_ChkTimeUp?:
BIT P_0DH_INT ;3
BEQ L_ChkTimeUp? ;3
LDA #C0h ;2
STA P_0DH_INT ;3
LDA #C0h+D_INT_TMB ;3
STA P_0DH_INT ;3
LDA #D_INT_TMB ;2
DEX ;2
BNE L_ChkTimeUp? ;3
LDA #SpeechTMASrc+D_IrTMBSrc;2 ;turn off carrier bit
STA P_0BH_TMRSel ;2
RTS
;-------------------------------------------------不發射38KHz載波
F_TxNonCarrierIR:
LDA #D_INT_TMB ;2
L_ChkTimeUp?:
BIT P_0DH_INT ;3
BEQ L_ChkTimeUp? ;3
LDA #C0h ;2
STA P_0DH_INT ;3
LDA #C0h+D_INT_TMB ;3
STA P_0DH_INT ;3
LDA #D_INT_TMB ;2
DEX ;2
BNE L_ChkTimeUp? ;3
RTS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -