找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1599|回复: 3
收起左侧

这个C语言程序send_buf[]函数怎么定义?

[复制链接]
ID:320487 发表于 2021-12-25 11:16 | 显示全部楼层 |阅读模式
51hei图片20211225110127.png
定义语法是什么 ,在哪个文件夹里定义好?
谢谢啊
#include "config.h"
#define FOSC 22118400L      //System frequency
uint32_t baud=9600;           //UART baudrate
/************************************************************************
函 数 名: 串口初始化
功能描述: STC10L08XE 单片机串口初始化函数
返回函数: none
其他说明: none
**************************************************************************/
void UartIni(void)
{
    SCON = 0x50;            //8-bit variable UART
    TMOD = 0x20;            //Set Timer1 as 8-bit auto reload mode
    TH1 = TL1 = -(FOSC/12/32/baud); //Set auto-reload vaule
    TR1 = 1;                //Timer1 start run
    ES = 1;                 //Enable UART interrupt
    EA = 1;                 //Open master interrupt switch
}
/***********************************************************
* 名    称:
* 功    能:
* 入口参数: 无
* 出口参数:无
* 说    明:                                          
**********************************************************/
void Uart_Isr() interrupt 4 using 1
{        
        if(RI)
        {        
                  
        }

}
/************************************************************************
功能描述:         串口发送一字节数据
入口参数:        DAT:带发送的数据
返 回 值:         none
其他说明:        none
**************************************************************************/
void UARTSendByte(uint8_t DAT)
{
        ES  =  0;
        TI=0;
        SBUF = DAT;
        while(TI==0);
        TI=0;
        ES = 1;
}
/************************************************************************
功能描述: 串口发送字符串数据
入口参数:         *DAT:字符串指针
返 回 值: none
其他说明: API 供外部使用,直观!
**************************************************************************/
void PrintCom(uint8_t *DAT)
{
        while(*DAT)
        {
                 UARTSendByte(*DAT++);
        }        
}


         /******************************************************************************
- 功能描述:  串口向外发送命令[包括控制和查询]
- 参数说明:CMD:表示控制指令,请查阅指令表,还包括查询的相关指令
feedback:是否需要应答[0:不需要应答,1:需要应答]
data:传送的参数
******************************************************************************/
void SendCmd(uint8_t len)
{
uint8_t i = 0 ;
UARTSendByte(0x7E); //起始
for(i=0; i<len; i++)//数据
{
UARTSendByte(Send_buf[ i][ i]) ;
}
UARTSendByte(0xEF) ;//结束
}
/******************************************************************************
- 功能描述:求和校验
- 和校验的思路如下:
发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反码。接收端就将
接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验字节。刚好
为0.这样就代表接收到的数据完全正确。
******************************************************************************/
void DoSum( uint8_t *Str, uint8_t len)
{
uint16_t xorsum = 0;
uint8_t i;
for(i=0; i<len; i++)
{
xorsum = xorsum + Str[ i];
}
xorsum = 0 -xorsum;
*(Str+i) = (uint8_t)(xorsum >>8);
*(Str+i+1) = (uint8_t)(xorsum & 0x00ff);
}
void Uart_SendCMD(uint8_t CMD ,uint8_t feedback , uint16_t dat)
{
Send_buf[0] = 0xff;                           //保留字节
Send_buf[1] = 0x06;                          //长度
Send_buf[2] = CMD;                           //控制指令
Send_buf[3] = feedback;                      //是否需要反馈
Send_buf[4] = (uint8_t)(dat >> 8);             //datah
Send_buf[5] = (uint8_t)(dat);                 //datal
DoSum(&Send_buf[0],6);                        //校验
SendCmd(8);                                   //发送此帧数据
}

回复

使用道具 举报

ID:301191 发表于 2021-12-25 17:50 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:320487 发表于 2021-12-26 12:02 | 显示全部楼层
已解决
回复

使用道具 举报

ID:290373 发表于 2021-12-26 20:54 | 显示全部楼层
你这个send_buf是变量而不是函数。
简单点的,在Uart_SendCMD函数开头直接声明一个uint8_t Send_buf[6]

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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