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

<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

时间: 2024-10-16 15:38:02

用IO模拟串口协议发送数据的相关文章

Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协议发送数据: • 创建发送端的Socket对象• 这一步如果成功,就说明连接已经建立成功了.• 获取输出流,写数据• 释放资源 2. 代码实现: (1)发送端: 1 package cn.itcast_06; 2 3 import java.io.IOException; 4 import java

Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接收数据:       • 创建接收端的Socket对象      • 创建数据包,接收数据(接收容器)      • 调用Socket对象的接收方法,接收数据包      • 解析数据包,并显示在控制台      • 释放资源 2. 代码实现 (1)首先我们先写发送端的程序,如下: 1 packag

Android(java)学习笔记80:UDP协议发送数据

UDP协议发送数据:我们总是先运行接收端,再运行发送端发送端: 1 package cn.itcast_02; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 /* 8 * UDP协议发送数据: 9 * A:创建发送端Socket对象 10 * B:创建数据,并把数据打包 11 *

串口字符串发送数据

在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照二进制的方式一位一位的发送出去. 例如我们要发送一串数据"A852010100000000A91A",以字符串和十六进制两种方式发送: (1)字符

[ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据

主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest.HttpRequestBuilder; 5 import com.fylib.httpRequest.HttpRequestBuilderConsts; 6 import flash.display.Bitmap; 7 import flash.display.BitmapData; 8 impor

从串口软件发送数据到单片机

/*接收*/#include <reg52.h>void InitUART(void){    TMOD = 0x20;    SCON = 0x50;    //    TH1 = 0xF3;    TL1 = TH1;    PCON = 0x80;    EA = 1;    ES = 1;    TR1 = 1;}void SendOneData(){ }void main(void){   P2=0xff;//全部熄灭    InitUART();  while(1);} void

stm32 普通IO口模拟串口通信

普通IO口模拟串口通信 串口通信协议 串口传输 默认 波特率9600 1起始位 1停止位 其他0 数据位是8位(注意图上的给错了). 传输时,从起始位开始,从一个数据的低位(LSB)开始发送,如图从左向右的顺序,对电平拉高或拉低,最后停止位时拉高. 波特率大小,改变延时时间即可.例如9600 波特率    根据公式 : 1/9600=0.000104s(大致) 也就是说每发送1bit延时104us (下面我用9600波特率来说,代码用的是19200) 串口发送       将电平拉低 延时104

模拟串口UART的实现

我所祷告的,就是要你们的爱心,在知识和见识上,多而又多,使你们能分辨是非,做诚实无过的人,直到基督的日子.--腓立比书[1:9~10] 最近在调的MCU的型号为STM32F030,配置芯片相较之前的MCU都比较简单,功能配置很顺利.但是在写串口程序的时候,发现串口一直不通,使用示波器也没有波形.因为基本的串口通讯线只有Tx和Rx两根线,配置也相对简单,8位数位,1位停止位,9600波特率.协议结构为 起始位(低电平)+8位数据(低位在前)+1位停止位(高电平),例如发送字节0x55,即电平为低

php模拟post请求发送文件

由于项目需要,需要本地服务器接收数据后,再将数据转发到另外一台服务器上,故要用到模拟post请求发送数据,当然数据中也包含文件流. curl是php比较常用的方式之一,一般代码如下: $params1 = "test"; $params2 = "@".$absolute_path;//如果是文件 则参数为"@"+绝对路径 $post_data = array( 'params1' => $params1, 'params2' => $