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

📄 ir_tx.asm

📁 6502IR发射程序,借鉴别人的
💻 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 + -