这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 红外线发射方法之三

共1条 1/1 1 跳转至

红外线发射方法之三

助工
2014-11-21 16:54:50     打赏

B、把发射函数置于中断中,发射编码的时间不需要做进一步调整,而且时间很准。

EIR_SYNC         equ        22+1        //23*13=300us
EIR_SYNCL        equ        92+1        //92*13=1200us
EIR_38k_H        equ        22+1        //300us
EIR_Low_1        equ        44+1        //600us  
EIR_Low_0        equ        22+1        //300us
EIR_DataLng      equ        25         //发送数据总长度(位)最后一为同步尾 
EIR_SendLng      equ        EIR_DataLng*2+2                 

DIR_38kCnt    reg        0x18
DIR_SdBitCnt  reg        0x19
DIR_Data0     reg        0x1A
DIR_Data1     reg        0x1B
DIR_Data2     reg        0x1C
DSendTmCnt    reg        0x1D 

/*------------ 中断服务 --------------*/          
          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 
                  //        ............
                  //        you other code 

LB_Int_Out: 
          POP                  //恢复现场 
          Retie

//==================================================
//函数名称:MInt_IR
//输入参数:无   
//输出参数:无
//函数功能:红外信号发送
//用    法: 将此宏置于13us的中断中,启动发送后将自动完成,当前只能完成24位发送,
//若需要更多,需要修改EIR_DataLng,添加 DIR_Data3..., 在RLR处添加,同时注意上面的
//Goto $+x要相应地改变
//==================================================       
MIR_Int  macro            
        decrsz           DIR_38kCnt,1  
        lgoto            $+20//       20    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
        btrss            FIR_Sync
        movia            EIR_SYNCL          
        movar            DIR_38kCnt 
        bsr              FIR_Sync                        
        btrss            DIR_SdBitCnt,0                         
        lgoto            $+4
        RLR              DIR_Data2,1  //带C左移
        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            PTA,0X02    //有2字节
        endm 

 


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]