历史上的今天

今天是:2024年09月07日(星期六)

2019年09月07日 | 单片机串口发送和接受程序

发布者:王岚枫 来源: eefocus关键字:单片机  串口发送  接受程序 手机看文章 扫描二维码
随时随地手机看文章

include "config.h"


/******************************串口1的波特率********************************/

//T1作波特率发生器

//在波特率加倍情况下 

#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254 FF

#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 254 FE

#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 253 FD

#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 252 FC

#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 250 FA


 


#define SYS_Fosc 11059200L //晶振频率

uint32_t COMM_BAUD_RATE=9600 ; //串口波特率

#define OSC_FREQ 11059200 //11059200


static INT8U Send_buf[10] = {0} ;

static INT8U Recv_buf[10] = {0} ;



static INT8U SendDataLen = 0 ;

static INT8U ResendDataLen = 0 ;

/************************************************************************

函 数 名: 串口初始化

功能描述: STC10L08XE 单片机串口初始化函数

返回函数: none

其他说明: none

**************************************************************************/

void UartIni(void)

{

TMOD = 0x20; // 设置 T1 为波特率发生器

SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验


PCON = 0x00; //PCON=0;


TH1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);//设置为9600波特率

TL1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);


TR1 = 1; //定时器1打开

REN = 1; //串口1接收使能

ES = 1; //串口1中断使能

EA = 1; 

}

//串口接受函数初始化1

void UartIni1(void)

{

SCON = 0x50; //8-bit variable UART

TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode

TH1 = TL1 = -(SYS_Fosc/12/32/COMM_BAUD_RATE); //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)

{


}


}

/************************************************************************

功能描述: 串口发送一字节数据 sbuf=data 

接受 data=sbuf

入口参数: DAT:带发送的数据

返 回 值: none

其他说明: none

**************************************************************************/

void Uart_PutByte(uint8_t DAT)

{

ES = 0;

TI=0;

DAT=SBUF ;

while(TI==0);

TI=0;

ES = 1;

}

///*****************************************************************************************************

// - 功能描述: 串口接受一帧数据

// - 隶属模块: 内部 

// - 参数说明: 

// - 返回说明: 

// - 注:无 

//*****************************************************************************************************/

void SendCmd(INT8U len )

{

INT8U i = 0 ;

for(i=0; i{

Uart_PutByte(Send_buf[i]) ;

}

}


///********************************************************************************************

// - 功能描述:求和校验

// - 隶属模块:

// - 参数说明:

// - 返回说明:

// - 注: 和校验的思路如下

// 发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反码

// 接收端就将接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验

// 字节。刚好为0.这样就代表接收到的数据完全正确。

//********************************************************************************************/

void DoSum( INT8U *Str, INT8U len)

{

INT16U xorsum = 0;

INT8U i;


for(i=0; i{

xorsum = xorsum + Str[i];

}

xorsum = 0 -xorsum;

*(Str+i) = (INT8U)(xorsum >>8);

*(Str+i+1) = (INT8U)(xorsum & 0x00ff);

}



///********************************************************************************************

// - 功能描述: 串口向外发送命令[包括控制和查询]

// - 隶属模块: 外部

// - 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令

// feedback:是否需要应答[0:不需要应答,1:需要应答]

// data:传送的参数

// - 返回说明:

// - 注: 

//********************************************************************************************/

void Uart_SendCMD(INT8U CMD ,INT8U feedback , INT16U dat)

{

Send_buf[0] = 0xff; //保留字节 

Send_buf[1] = 0x06; //长度

Send_buf[2] = CMD; //控制指令

Send_buf[3] = feedback;//是否需要反馈

Send_buf[4] = (INT8U)(dat >> 8);//datah

Send_buf[5] = (INT8U)(dat); //datal

DoSum(&Send_buf[0],6); //校验

SendCmd(8); //发送此帧数据

}



/************************************************************************

功能描述: 串口发送字符串数据

入口参数: *DAT:字符串指针

返 回 值: none

其他说明: API 供外部使用,直观!

**************************************************************************/

void PrintCom(uint8_t *DAT)

{

while(*DAT)

{

Uart_PutByte(*DAT++);

}

}


/************************************************************************

功能描述: 串口发送字符串数据 直接发送 hex 文件 0x0f

等价于 0f

入口参数: *DAT:字符串指针

返 回 值: none

其他说明: API 供外部使用,直观!

**************************************************************************/

void PrintCom1(uint8_t *DAT)

{


int i;

for(i=0;i<12;i++)

{

Uart_PutByte(*DAT++); //Uart_PutByte 串口发送一字节数据 sbuf=data 

}

}


关键字:单片机  串口发送  接受程序 引用地址:单片机串口发送和接受程序

上一篇:以AT24C02为例的IIC通信协议
下一篇:单片机中Sprint函数

推荐阅读

德承作为嵌入式计算平台的专业制造商,今天很高兴推出最新的无风扇超薄嵌入式计算器“P1100系列”。该产品设计为“一台主机,两用设备”,可作为嵌入式计算器或工业平板计算机的系统模块。P1100系列采用Intel® Apollo Lake处理器,包括Atom®x7-E3950和Pentium® N4200,与Intel®BayTrail平台相比,Intel® Aplolo Lake处理器的计算能力提高了1.7倍...
  据外媒报道,科技公司Rikatec推出了第四款与公司同名的工业设备Rikatec,可帮助打造汽车故障探测信息系统。该公司会利用大量的数据和机器学习机制探测车辆故障、提供有关车辆磨损的信息,并为保险公司和金融公司创建驾驶员档案和评分。  Rikatec设备适用于所有品牌的汽车,可以探测车辆故障,而且一旦探测到故障,就会发送有关车辆哪个部位发生故障...
1959年,诺贝尔奖得主、理论物理学家Richard Feynman 首次提出微型医用机器人的概念。此后,将器件微型化以生产细胞大小的机器人一直是科学家们追求的目标,但由于缺乏合适的微米级系统,该技术一直受到限制。 近日,使机器人移动的重要部件——致动器研究终于出现重大突破,来自美国宾夕法尼亚大学及康奈尔大学的科学家团队首次制造出尺寸小于0.1...
德国斯图加特和慕尼黑——电动汽车的随充时代已经到来:博世推出的新型轻巧智能充电线缆采用集成控制和安全技术,无需使用“充电盒”(即沉重的缆上控制盒),即可接入230伏电源插座充电。该充电线缆将在2021年德国国际汽车及智慧出行博览会(IAA Mobility)上首次亮相。其重量不足3公斤,平均而言,较带有缆上控制盒的传统线缆轻40%左右,并节省了后备箱...

史海拾趣

问答坊 | AI 解惑

PCB制板技术参数(转载)

英制 1 inch=1000 mil=25.4 mm 公制   电源线: 50 mil(5v或更低) 120mil(220v)   连接线: 12 mil   过孔via:40 mil(外)/28 mil(内)   焊盘pad:座孔 62 mil(外)/40 mil(内)   脚孔 50 mil(外)/32 mil(内)   电源端子 120 mil ...…

查看全部问答∨

电源监控?

我做的东西需要有低电量提醒功能,原本想的诗用ad采样做的,后来听说有电源监控芯片可以用的,大家可以推荐一下吗 电源是6v,低电压的下限值可能在3v左右 我上网查只查到了一个imp706 谢谢大家…

查看全部问答∨

微芯的协议栈说明书上有这么一句 RTOS and application independent

这是什么意思啊?操作系统和应用程序独立?老夫怎么觉得老夫写的应用程序是嵌入到他的操作系统框架里面的呢…

查看全部问答∨

死区时间的问题

图中对应的时间需不需要TBCLK对应多少HZ,还是只要符合SYSCLKOUT/1,SYSCLKOUT/2,SYSCLKOUT/4就可以查出时间来了?…

查看全部问答∨

(cyclone4)助学版_v120之数码管一

准备重新编辑一下的,结果全部都是乱码,还是重新截图吧undefined [ 本帖最后由 Leo417love 于 2013-8-6 21:21 编辑 ]…

查看全部问答∨

买的开发板包装胶布被弄断,不是自己签收的,问题是我还弄不清倒是是卖家少邮东西....

本帖最后由 ddllxxrr 于 2016-1-7 16:42 编辑 不知道发在这里合不合适,心里很是疑惑想问问大家,我在淘宝上买的别人的开发板,全新的两套,之后呢东西今天到了,因为我去上课,是别人签收的,我租的旅店的一个房间,回来之后店主把快件给我了,我 ...…

查看全部问答∨

新手求教 cc2541 sensortag 外加sensor的方案讨论

各位大神,小弟正在纠结于学校的一project 需要了解如何外接而外sensor通过sensortag帮助蓝牙发送数据去PC端,该如何实现呢? 现在的想法是通过sensortag上的P1-1-6的端口用I2C OR UART 连接?是否可行,求教具体的操作 感激不敬!…

查看全部问答∨

千呼万唤始出来,STM32F7开发板终于来了

今早收到意法半导体邮件,看了一下,居然是高大上的STM32F7系列开发板横空出世了。 开售的有STM32F7 evaluation boards  和对应的 STM32F7 Microcontroller Discovery Board!话不多说先来几张靓照 STM32F7 Microcontroller Discovery ...…

查看全部问答∨

[转]设计LED驱动电源的一些建议

 LED驱动电源设计并不难,但一定要心中有数。只要做到调试前计算,调试时测量,调试后老化,相信谁都可以搞好LED。 1、LED电流大小   大家都知道LEDripple过大的话,LED寿命会受到影响,影响有多大,但目前没有具体的指标。 2、芯片发热   ...…

查看全部问答∨

探讨怎样学习单片机编程

首先我谈谈我个人认为的学习方法,我大致分成了三大部分去学习单片机。1.基础理论         基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved