一个红外线发送的参考例子:
/*------------ 中断服务 --------------*/
org 08h
PUSH //保护现场
bcr INTFLAG,T0IF_B //清中断标志
TM_RELOAD E_25us
btrss FIR_Enb
lgoto LB_int_cnt
TM_RELOAD E_12_5us
MIR_Int //IR_TX
btrss DIR_38kCnt,0 //12.5us时要两次才算一次
lgoto LB_Int_Out
LB_int_cnt:
incr DSysClkCntms,1 //25us
LB_Int_Out:
POP //恢复现场
retie
//==================================================
//函数名称:MInt_IR
//输入参数:无
//输出参数:无
//函数功能:红外信号发送
//用 法: 将此宏置于13us的中断中,启动发送后将自动完成
// 当前只能完成24位发送,若需要更多,需要修改
// EIR_DataLng,添加 DIR_Data3..., 在RLR处添加,同时注意
// 上面的Goto $+x要相应地改变
//==================================================
MIR_Int macro
decrsz DIR_38kCnt,1 //38K或地电平宽度
lgoto $+17// 17 Int_01
bcr PIROut //IO_IR
movia EIR_Low_0
btrsc DIR_Data0,7
movia EIR_Low_1
btrsc DIR_SdBitCnt,0
movia EIR_38k_H
movar DIR_38kCnt
btrss DIR_SdBitCnt,0
lgoto $+4
RLR DIR_Data2,1 //带进位左移
RLR DIR_Data1,1
RLR DIR_Data0,1
decrsz DIR_SdBitCnt,1
lgoto $+7
bcr FIR_Enb
lgoto $+5
//Int_01:
btrsc DIR_SdBitCnt,0
lgoto $+3
TurnB PIROut //有2字节
endm |