设为首页 加入收藏

TOP

模拟红外协议发送源程序(一)
2014-11-23 21:46:37 来源: 作者: 【 】 浏览:10
Tags:模拟 红外 协议 发送 源程序
/*********************************************
简介:
本程序为模拟红外协议的发送程序 包含起始码和数据码
本程序现固定一次性发送16BIT的数据
起始码与数据码长度定义如下图(用户可自行更改):
//文件singlelinetsmt.h
#ifndef _SINGLELINETSMT_H_
#define _SINGLELINETSMT_H_
//#include "singlelinetsmt.h"


#define		P_Transmit		PF4_OUT  //单线发送IO口定义

#define		PortIr_Low		P_Transmit = 0   
#define		PortIr_High		P_Transmit = 1 


//=====红外接收模式=====
#define		MIR_RST			(uint8)0  //空闲状态
#define		MIR_P1			(uint8)1 //正接收起始码
#define		MIR_P2			(uint8)2 //正接收数据


//一次性发送的数据字节长度
#define		IrDatLong     (uint8)2  
//起始码脉宽定义
#define		TST_LOW				(uint8)50 //起始低脉宽
#define		TST_HIGH			(uint8)100 //起始高脉宽 1字节

//数据码脉宽定义
#define		TDAT_LOW			(uint8)25  //数据低脉宽
#define		TDAT_HIGH			(uint8)50  //数据高脉宽


//====工作数据定义结构体====
typedef	struct IrTsmtData
{
	
		uint8 RMIR ; //发送模式
		uint8 Ircont ; //发送脉宽计时
		uint8 BitNum ;//发送多少位数 16BIT
		uint16 IrDatTsmt ;	//发送的数据
		
		uint8 IrTmp1 ; //临时变量
		
}tIrTsmtData ;
extern tIrTsmtData	IrTsmtDat ;

#define		RMIR				IrTsmtDat.RMIR
#define		Ircont			IrTsmtDat.Ircont
#define		BitNum			IrTsmtDat.BitNum
#define		IrDatTsmt		IrTsmtDat.IrDatTsmt
#define		IrTmp1			IrTsmtDat.IrTmp1

//=============================
//====标志位定义结构体====
typedef	struct IrFlag
{
		uint8 Flg1: 1 ;
		uint8 Flg2: 1 ;
		uint8 Flg3: 1 ;
		uint8 Flg4: 1 ;
		uint8 Flg5: 1 ;
		uint8 Flg6: 1 ;
		uint8 Flg7: 1 ;
		uint8 Flg8: 1 ;	
		
}tIrFlg ;
extern tIrFlg	tIrF1 ;

#define		F_IrTsmt					tIrF1.Flg1 //发送期间
#define		F_IrStatus				tIrF1.Flg2 //发送高 低状态

//=================================
extern void CmdTansmitData(uint16 Data,uint8 Time)  ;
extern void CmdIrTsmtDat(void) ;

#endif




/*
文件singlelinetsmt.c
1 发送中断为50U中断一次
*/
#include "global.h"
#include "singlelinetsmt.h"


tIrTsmtData	IrTsmtDat ;
tIrFlg	tIrF1 ;

//***************************************
// 函数名称:CmdTansmitData
// 函数功能:以固定周期发送数据
// 入口参数:要发送的数据 发送周期 10MS跑一次
// 出口参数:无
//***************************************
void CmdTansmitData(uint16 Data,uint8 Time) 
{
		static uint8 Tcon = 0 ;
		
		Tcon ++ ;
		if(Tcon >= Time) //1s 发送一次
		{
				Tcon = 0 ; 
				
				RMIR = MIR_P1 ; //发送状态复位
				F_IrStatus = 0 ; //先发送起始低
				Ircont = 0 ;
				F_IrTsmt = 1 ;//允许发送
		
				IrDatTsmt = Data ;
		}

}
//***************************************
// 函数名称:CmdIrTsmtDat
// 函数功能:中断发送单线数据 50U中断一次
// 入口参数:无
// 出口参数:无
//***************************************
void CmdIrTsmtDat(void) 
{

		if(!F_IrTsmt) return ;

		Ircont ++ ;	//发送脉宽计时器
		
		//----22222--发送起始码-----------------
		if(RMIR == MIR_P1)//
		{
				if(!F_IrStatus)//发送起始低
				{
						PortIr_Low ;
						if(Ircont >= TST_LOW)
						{
								Ircont = 0 ;
								F_IrStatus = 1 ;
						}
				}
				else //发送起始高
				{
						PortIr_High ;
						if(Ircont >= TST_HIGH)
						{
								Ircont = 0 ;
								RMIR = MIR_P2 ;
								F_IrStatus = 0 ;//发送低
								BitNum = 0 ;
						}	
				}
		}
		//----33333--发送数据码--------------
		else if(RMIR == MIR_P2) //
		{
				if(!F_IrStatus)	//发送低
				{
						PortIr_Low ;
						if(Ircont >= TDAT_LOW)
						{
								Ircont = 0 ;
								F_IrStatus = 1 ; 
						}
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11586 - Train Tracks 下一篇 Uva 12537 Radiation

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)
·基于Python的数据分 (2025-12-27 07:50:03)
·深入理解 Java 集合 (2025-12-27 07:22:48)
·Java集合框架全面解 (2025-12-27 07:22:45)