通讯:红外
定义结构体
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方波的输出;当接收到红外时,触发外部中断INTP1,ir.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输出模式、禁止设置)