📄 commuinfr.c
字号:
/*************************************************************************************
文件类型:红外通讯模块
文件作用:
修改权限:
文件相关:
创 建 人:chenbo
创建日期:2007.06.21
当前版本:Ver0.1
版本信息:Ver0.1 GeminiKQ
**************************************************************************************/
#include "Tiger.h"
//============================================================
//函数功能:初始化红外通讯模块
//
//=============================================================
void init_infrcomm(void)
{ uint8 i;
F_commudiv=0;
CfgPort(5,0); // P1_1初始化为GPIO口
P1OE&=0xfd; // 输出使能
P1OD|=0x02; // 输出高电平
SetIR(43,43); // 设置载波型号占空比 86
CfgEU(2,1200,11,0); // 串口号2,拨特率1200,通讯方式11位,偶校验
for(i=0;i<25;i++) // 清缓冲
buff_reddata[i]=0;
CfgPort(13,2); // P2_4作为RXD2
P2IE|=0x10; // 输入使能
// CfgPort(14,2); // // P2_5作为TXD2
CfgPort(14,0); // P2_5初始化为GPIO口
P2OE&=0xdf; // 输出使能
P2OD&=0xdf; // 输出低电平
len_infrcommdata=0;
point_infrsendaddr=0;
timedelay_infrcomm=0;
sta_infrcomm=standby_comm;
jiaoyan_typeinfr=type_enven;
SetInterrupt(8); // 打开接收中断
}
//=============================================================
//函数功能:接收中断处理函数。
//
//==============================================================
void rec_infrcomm(void)
{// unsigned int i;
timedelay_infrcomm=0; // 清接收等待延时
switch (sta_infrcomm) // 当前通讯状态
{case standby_comm: // 等待状态
if((buff_intrrec&0xff)==0x68) // 全国规约开始
{ sta_infrcomm=recdata_comm; // 进入接收状态
len_infrcommdata=1; // 接收到的数据个数
buff_reddata[0]=(unsigned char)buff_intrrec; // 头 68H
jiaoyan_type=type_enven; // 偶校验
type_protoclinfr=type_quanguo; // 全国规约
}
break;
case recdata_comm: // 接收状态
len_infrcommdata++; // 接收数据的个数+1
buff_reddata[len_infrcommdata-1]=(unsigned char)buff_intrrec;
break;
case hook_comm: // 挂起状态
ClrInterrupt(8); // 关接收中断
break;
default: // 出错,重新初始化
init_infrcomm();
break;
}
}
//==========================================================
//函数功能:发送第一个数据,开发送中断
//
//==========================================================
void start_sendinfr(void)
{ //uint8 i;
timedelay_comm=0;
CfgPort(14,2); // P2_5作为TXD2
ClrInterrupt(8); // 禁止接收
SetInterrupt(7); // 开发送中断
sta_infrcomm=senddata_comm; // 处于发送状态
SendUData(buff_reddata[0],2); // 发送第一个数据
len_infrcommdata=len_infrcommdata-1;
point_sendaddr=0;
}
//==========================================================
//函数功能:红外发送中断相应函数
//
//==========================================================
void intrupt_sendinfr(void)
{//uint8 i;
timedelay_comm=0;
if(sta_infrcomm==senddata_comm)
{ if(len_infrcommdata>0) //如果还未发送完毕
{ len_infrcommdata=len_infrcommdata-1;
point_sendaddr++;
SendUData(buff_reddata[point_sendaddr],2);
/* //////
i=check_bitnum(buff_reddata[point_sendaddr]); // 发送奇偶校验位
if(jiaoyan_type==type_enven) // 如果是偶校验
{ if(i==0)
SCON2&=0xf7;
else
SCON2|=0x08;
}
SBUF2=buff_reddata[point_sendaddr]; //发送数据
*//////
}
else // 如果发送完毕
{
init_infrcomm();
/*
SetInterrupt(8); // 允许接收
ClrInterrupt(7); // 关发送中断
sta_infrcomm=standby_comm; // 485重新进入等待状态
CfgPort(14,0); // P2_5初始化为GPIO口
P2OE&=0xdf; // 输出使能
P2OD&=0xdf; // 输出低电平
CfgPort(13,2); // P2_4作为RXD2
P2IE|=0x10; // 输入使能
len_infrcommdata=0;
point_infrsendaddr=0;
timedelay_infrcomm=0;
sta_infrcomm=standby_comm;
jiaoyan_typeinfr=type_enven;
*/
}
}
else
init_infrcomm();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -