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