红外收发

通讯:红外

 

定义结构体

Typedef struct

{

struct

{

   U8  *Buf;         //要发送的缓冲区的指针

   Volatile  UCS  cnt;           //要发送的字节数计数器

}Tx;                //发送缓冲管理

Struct

{

    U8  Buf_FE[FE_Num];       //前导码

    U8  Buf[UartBufsize];       //环形接收缓冲区**

    Volatile  UIS  inIdx;        //接收缓冲区输入位置索引**

    Volatile  UIS  outIdx;       //接收缓冲区输出位置索引**

    Volatile  UCS  cnt;         //接收缓冲区字节数计数器**

    Volatile  U8  TimeOut;      //0=字节接收超时**

    Volatile  U8  GetNewByte:1; //TRUE=接收到新的字节  FLASE=未接收到新的字节

}Rx;                 //接收缓冲管理**

}struct_RxTx_U0;          //串口缓冲区

 

ri.h

extern  Struct_RxTx_U0 ir;      // 红外缓冲区

extern void ir_Receive_off(void);// 关闭红外接收

extern void ir_Receive_on(void);// 启动红外接收

extern void ir_ResetReceive(void);// 重置红外接收

extern void ir_Tx_nByte(U8* Buf, U16 Len);// 红外发送Buf[]的前Len个字节数,无返回

extern void ir_Init(void);// 红外收发初始化

 

使用8位定时器H1(间隔定时器模式,定时时间为833us)和8位定时器50(产生38KHZ频率的方波)来进行红外的发送,当发送二进制“0”时,在38KHZ频率的方波下发送833us的低电平,当发送二进制“1”时,禁止38KHZ方波的输出;当接收到红外时,触发外部中断INTP1ir.Rx.GetNewByte置1。

 

“ir.c”

红外发送使用到了8位定时器H1,该定时器包括4个控制寄存器

a.H模式寄存器(TMHMD1)

b.H载波控制寄存器(TMCYC1)

c.端口模式寄存器(PM1)

d.端口寄存器(P1)

 

 

红外接收使用了外部中断1(INTP1)

78K0共有25种中断源,包括可屏蔽中断和软件中断。另外,还具有4种复位源。

可屏蔽中断:分为高优先中断组和低优先中断组,在低优先级的中断服务子程序中可以响应高优先级的中断请求。

软件中断:通过执行BRK指令产生的一类中断向量,即使禁止中断时也可以响应此类中断,不受优先级控制。

25个中断源分别由6种寄存器控制:

· 中断请求标志寄存器 (IF0L、 IF0H、 IF1L、 IF1H)
· 中断屏蔽标志寄存器 (MK0L、 MK0H、 MK1L、 MK1H)
· 优先级指定标志寄存器 (PR0L、 PR0H、 PR1L、 PR1H)
· 外部中断上升沿允许寄存器 (EGP)
· 外部中断下降沿允许寄存器 (EGN)
· 程序状态字 (PSW)

 

#pragma interrupt INTP1     MD_INTP1    //IRcommunicationintp    #pragma interrupt INTTMH1   MD_INTTMH1  //IR communication intp

#pragma interrupt INTTM000  MD_INTTM000 //IR receive timer

1)红外发送数据

①启动红外发送TMHE1=1)

TMHMD1包括8位

7位:TMHE1(为1允许定时器计数,为0停止定时器计数并且计数器清零)

6、5、4位:CKS12、CKS11、CKS10(计数时钟分批)

3、2位:TMMD11、TMMD10(选择定时器的操作模式,分为间隔定时器模式、载波发生器模式、PWM输出模式、禁止设置)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值