码迷,mamicode.com
首页 > 其他好文 > 详细

用IO模拟串口协议发送数据

时间:2014-08-01 23:11:19      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:串口   通讯协议   

<pre name="code" class="cpp">//文件usend.h

#ifndef _USEND_H_
#define _USEND_H_


//====红外接收相关定义=============================
#define		PuTx_High	(P_uTx = 1) //数据高
#define		PuTx_Low	(P_uTx = 0) //数据低

#define     V_SendDatNum        6//6   //发送数据字节数

//=======变量定义 ================
typedef	struct uSendData
{
	uint8 uTxDat1 ; //发送数据缓存区1
    uint8 uTxDat2 ; //发送数据缓存区2
    uint8 uTxDat3 ; //发送数据缓存区3
    uint8 uTxDat4 ; //发送数据缓存区4
    uint8 uTxDat5 ; //发送数据缓存区5
    uint8 uTxDat6 ; //发送数据缓存区6
 
//    uint8 TconTx ;  //时间计时
    uint8 uTxDatBit ; //发送数据位计时
    uint8 uTxDatByte ; //发送数据位计时

}tuSendData ;

extern tuSendData tuSendDat ;

//----------------------
#define		uTxDat1  	    tuSendDat.uTxDat1
#define		uTxDat2  	    tuSendDat.uTxDat2
#define		uTxDat3  	    tuSendDat.uTxDat3
#define		uTxDat4  	    tuSendDat.uTxDat4
#define		uTxDat5  	    tuSendDat.uTxDat5
#define		uTxDat6  	    tuSendDat.uTxDat6

//#define		TconTx  	    tIrSendDat.TconTx

#define		uTxDatBit  		tuSendDat.uTxDatBit
#define		uTxDatByte  	tuSendDat.uTxDatByte


//====标志位定义结构体====
typedef union uFGUTX{
	uint8 FguTx ;
    struct FGTX{
        uint8	Flg1   : 1;
        uint8	Flg2   : 1;
        uint8	Flg3   : 1;
        uint8	Flg4   : 1;
        uint8	Flg5   : 1;
        uint8	Flg6   : 1;
        uint8	Flg7   : 1;
        uint8	Flg8   : 1;
    }tFgUTx;	
}uFgUTx;
//uFgUTx uFguTx1 ;
  
//-------uFgTx1-------------------
#define	uFTx1				uFguTx1.tFgUTx	
#define		F_uTxEnb		uFguTx1.tFgUTx.Flg1


//=================================================
extern uint16 R_uTxBuf[2] ;
extern void uTxDat(void) ;
extern void uTxInit(void) ;
void CalcateCheckSum(void) ;


#endif 



//文件usend.c
/***************************************************
   模拟串口发送协议
1、先发送高位 再发送低位
2、先发送4BIT低 再发送4BIT高作为起始识别码
***************************************************/

#include "global.h"
#include "usend.h"

tuSendData tuSendDat ;
uFgUTx uFguTx1 ;

uint8 *pIr ;

uint16 R_uTxBuf[2] ;

//****************************************
// 函数名称:IrSendDat
// 函数功能:ir数据发送
// 入口参数:无
// 出口参数:无
// 备注:发送数据时 先发送高位 再发送低位
// 在中断里面调用此函数 -- 1MS
//****************************************
void uTxDat(void)
{
    if(!F_uTxEnb) return ;
    
    if((*pIr) & uTxDatBit) //发送数据1时间
    {
        PuTx_High ;
    }
    else
    {
        PuTx_Low ; //发送0 
    }
	
    uTxDatBit >>= 1 ;
    if(uTxDatBit == 0x00) //1字节发送完成
    {
        uTxDatBit = 0x80 ;
        pIr ++ ;
        uTxDatByte -- ;
		if(uTxDatByte == 0) //发送完成
		{
			F_uTxEnb = 0 ;
			PuTx_High ;  //释放总线	
		}
    }
}
//****************************************
// 函数名称:IrSendInit
// 函数功能:ir数据发送前初始化
// 入口参数:无
// 出口参数:无
//****************************************
void uTxInit(void)
{
    uTxDatBit = 0x80 ;
    uTxDatByte = V_SendDatNum ;
    pIr = &uTxDat1 ;  //数据首地址
    F_uTxEnb = 1 ; //发送使能
}
//****************************************
// 函数名称:CalcateCheckSum
// 函数功能:计算检验和
// 入口参数:无
// 出口参数:无
//****************************************
void CalcateCheckSum(void)
{
    uint8 i ;
    
    pIr = &uTxDat1 ;  //数据首地址
    uTxDat6 = 0 ;
    for(i=(V_SendDatNum-1);i>0;i--)
    {
        uTxDat6 += *pIr ;
        pIr ++ ;
    }
        
} 


//应用实例
void main(void)
{

	uTxDat1 = 0X0F ; //00001111B 作为起始识别码	

	uTxDat2 = 2 ;	//赋发送数据
	uTxDat3 = 3 ;
	uTxDat4 = 4 ;
	uTxDat5 = 5 ;
	
	CalcateCheckSum() ; //计算检验码

	uTxInit() ;	//发送初始化

	while(1)
	{

	}
}


//----中断函数------
void interrupt(void) //1MS
{
	uTxDat() ;
}


用IO模拟串口协议发送数据,布布扣,bubuko.com

用IO模拟串口协议发送数据

标签:串口   通讯协议   

原文地址:http://blog.csdn.net/libiaojs/article/details/38342465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!