找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3793|回复: 12
打印 上一主题 下一主题
收起左侧

哪位大佬有用单片机串口发送接收long int数据的经验?

  [复制链接]
楼主
ID:388197 发表于 2019-3-28 11:18 | 显示全部楼层
可以用联合体,一个LONG的64位拆分成4个8位的CHAR
回复

使用道具 举报

沙发
ID:388197 发表于 2019-3-28 11:26 | 显示全部楼层
以前的代码,你可以参考下.里面传的是float,long int只要改下就行了
//=================头文件======================
#ifndef __UART_H_
#define __UART_H_
#include <stc8f.h>
#include <intrins.h>
typedef union                                   //float联合体
{
        float value;
        unsigned char byte[4];
}float_data;

#define FOSC 11059200UL                         //晶振频率
#define BRT (65536-FOSC/9600/4)                 //波特率设置

void UartInit();
void UartSend(char dat);
void SendUint(unsigned int value);
void UartSendStr(char *p);
void SendFloat(float_data* float_union);

#endif

//===================C文件=====================
#include "uart.h"

char Uart_get_char;

void UartIsr() interrupt 4
{
        RI = 0;
        Uart_get_char = SBUF;           //读
}

void UartInit()
{
        SCON = 0x50;
        T2L = BRT;                 //波特率设置
        T2H = BRT>>8;
        AUXR = 0x15;
        ES = 1;
        EA = 1;
}

void UartSend(char dat)      //送1个字节
{
        SBUF = dat;
        while(!TI);
        TI = 0;
}

void SendUint(unsigned int value)  //送U16数据
{
        unsigned char valueH = 0;
        unsigned char valueL = 0;
        valueL |= value;
        valueH |= value >> 8;
        UartSend(valueL);
        UartSend(valueH);
       
}

void SendFloat(float_data* float_union)  //送float数据
{
        UartSend(float_union->byte[3]);
        UartSend(float_union->byte[2]);
        UartSend(float_union->byte[1]);
        UartSend(float_union->byte[0]);
}
//==============================================
基本都是从手册上照搬的代码,稍作修改整理就行了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表