📄 tx_rx.c
字号:
//====================================================================================
//文 件 名: Tx_Rx.c
//功能描述: 红外发射接收驱动程序
//维护记录: 2006年6月27 by hongyan.Feng
//====================================================================================
#include "SPCE061A.h"
unsigned int iFlag,iCouter=0; //iData用来保存读到接收管接收的数据,在没有接收到信号时为高电平
unsigned int Rcounter=0;
//====================================================================================
//语法格式: void Tx_Init(void)
//功能描述: 发射端口初始化函数
//入口参数: 无
//出口参数: 无
//维护记录: 2006年6月27 by hongyan.Feng
//====================================================================================
void Tx_Init(void)
{
*P_IOB_Dir |= 0x0100; //初始化IOB8为同相低电平输出口
*P_IOB_Attrib |= 0x0100;
*P_IOB_Data &= 0xfeff;
}
//====================================================================================
//语法格式: void Rx_Init(void)
//功能描述: 接收端口初始化函数
//入口参数: 无
//出口参数: 无
//维护记录: 2006年6月27 by hongyan.Feng
//====================================================================================
void Rx_Init(void)
{
*P_IOB_Dir &= 0x7fff; //初始化IOB15为带上拉电阻的输入口
*P_IOB_Attrib &= 0x7fff;
*P_IOB_Data |= 0x8000;
}
//====================================================================================
//语法格式: void INT_Init(void)
//功能描述: 计数器及中断初始化函数
//入口参数: 无
//出口参数: 无
//维护记录: 2006年6月27 by hongyan.Feng
//====================================================================================
void INT_Init(void)
{
*P_TimerA_Data = 0xff61; //设置TimerA,使IOB8输出38KHz的PWM波形,供红外发射调制作
*P_TimerA_Ctrl = 0x0036;
*P_INT_Ctrl = 0x0010; //开1KHz中断
__asm("int irq");
}
//====================================================================================
//语法格式: void RN_Tx(unsigned int ms,unsigned int lel)
//功能描述: 红外发射管发射函数
//入口参数: ms:发送多少ms的38KHz信号
// lel:发送高电平或者低电平
//出口参数: 无
//维护记录: 2006年7月12 by hongyan.Feng
//====================================================================================
void RN_Tx(unsigned int ms,unsigned int lel)
{
unsigned int TFlag=1;
if(lel == 1)
{
*P_TimerA_Ctrl = 0x03f0; //开启计数器A的TAOUT
while(TFlag) //发送数据
{
if(iCouter==ms)
{
*P_TimerA_Ctrl = 0x0036; //关闭计数器A
iCouter = 0; //清零
TFlag = 0;
}
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
if(lel == 0)
{
*P_TimerA_Ctrl = 0x0036; //关闭计数器A
while(TFlag)
{
if(iCouter==ms)
{
*P_TimerA_Ctrl = 0x03f0; //开启计数器A的TAOUT
iCouter = 0;
TFlag = 0;
}
*P_Watchdog_Clear = 0x0001;
}
}
}
//====================================================================================
//语法格式: void RN_Rx(void)
//功能描述: 红外接收管接收函数
//入口参数: 无
//出口参数: 无
//维护记录: 2006年7月12 by hongyan.Feng
//====================================================================================
void RN_Rx(void)
{
unsigned int iData;
iData = *P_IOB_Data; //读接收数据
iData &= 0x8000;
*P_Watchdog_Clear = 0x0001;
if(iData==0) //如果接收到0,表示接收到数据
{
Rcounter += 1; //接收数据计数器加1
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -