历史上的今天
返回首页

历史上的今天

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

2019年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 

}

}


推荐阅读

史海拾趣

Datapro International Inc公司的发展小趣事

面对不断变化的市场环境和客户需求,Datapro International Inc公司始终保持着对创新的追求。他们不断投入研发资源,推动新技术和新产品的不断涌现。同时,他们还积极关注行业趋势和客户需求的变化,以便及时调整自己的发展战略和业务模式。

在未来的发展中,Datapro International Inc公司将继续秉承“创新、质量、服务”的理念,致力于为客户提供更加卓越的产品和服务。同时,他们也将积极探索新的市场机会和商业模式,以实现更加持续、稳健的发展。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展历程和故事。如需了解Datapro International Inc公司的真实历史和发展故事,请查阅相关官方资料或行业报告。

Eska公司的发展小趣事

为了满足全球客户的需求,Eska公司实施了市场拓展和国际化战略。公司在欧洲各大主要城市及美国设立了服务中心,以便为当地客户提供快速可靠的服务。此外,Eska还利用先进的分切设备,为当地客户集中快速地提供载切大小格式灰板的服务。同时,Eska的产品也通过全球代理商、经销商及存货商网络,覆盖到更广泛的市场。

EECO Switch公司的发展小趣事

EECO Switch公司成立于1947年,最初作为加利福尼亚州的一家电子工程公司,致力于电子产品的设计与制造。随着技术的不断进步和市场需求的变化,公司逐渐将业务重心转向人机界面产品的设计与开发。在这个过程中,EECO Switch凭借其深厚的技术积累和创新精神,成功开发出了一系列具有领先技术的人机界面产品,从而确立了其在该领域的领先地位。

柯爱亚(ceaiya)公司的发展小趣事

在电子行业的发展历程中,柯爱亚以其对技术创新的执着追求而闻名。1999年,柯爱亚成功研发出超薄型功率电感CDH2D11/CD31,并率先实现了量产。这一创新不仅提升了产品的性能,而且满足了市场对于更轻薄、更高效电子元件的迫切需求。柯爱亚凭借这一技术突破,迅速在市场中脱颖而出,赢得了业界的广泛认可。

AMS公司的发展小趣事

柯爱亚一直秉承“持续改进,满足客户要求,不断创新,超越客户期望”的品质方针。公司严格把控产品质量,从原材料采购到生产流程,再到产品检测,每一个环节都力求精益求精。这种对品质的坚持赢得了客户的信任,柯爱亚的产品逐渐在市场上树立了良好的口碑。

Advanced Technology Corp公司的发展小趣事

随着科技的飞速发展,ATC公司始终保持着对技术创新的热情与追求。公司不断投入研发资源,引进先进设备和技术人才,致力于开发更具创新性和实用性的电子产品。经过多年的努力,ATC公司在多个技术领域取得了重要突破,推出了一系列具有行业影响力的创新产品,赢得了市场的广泛认可。

问答坊 | AI 解惑

语音门禁

有哪位大侠做过这样的门禁没有:整栋楼的门禁机(每层有4户),功能:密码开锁,刷卡开锁,语音通话,主人可远程开大门?…

查看全部问答>

分布式控制系统

分布式控制系统分布式控制系统 (distributed control systems,简称DCS),又称为分散控制系统,分散型控制系统,集散控制系统.行业内业称4C技术既Control控制技术;Computer 计算机技术;Communication 通信技术;Cathode Ray Tube CRT显示技术。    ...…

查看全部问答>

ISPlever调用RAM出错

# ELAB2: Fatal Error: ELAB2_0036 Unresolved hierarchical reference to \"PUR_INST.PURNET\" from module \"mac_add_tb.UUT.u4.u1.ram1_0_0_0\" (module not found).# ELAB2: Last instance before error: /UUT/u4/u1/ram1_0_0_0# KERNEL: Error ...…

查看全部问答>

嵌入式培训 茫然无措啊 从何入手呢?需要高手指点一二

马上就要开始嵌入式培训,可是不知道该看哪些书籍,不知道从哪里入手,希望老师师哥师姐们能伸出援助之手 …

查看全部问答>

用VC编写与HID设备通信程序遇到问题!

大家好,现在情况是这样的,HID设备可以正常枚举并且Windows提示可以使用,我也基本知道了在 VC中如何访问HID设备,但是现在的问题是,CreateFile之后可以得到正确的句炳,并且HidD_GetAttributes,HidD_GetPreparsedData以及HidP_GetCaps都正确得 ...…

查看全部问答>

有人使用KEIL C166吗?

我怎么下载的都有2k限制啊 破解的也不行啊…

查看全部问答>

开发板申请-基于eZ430-RF2500的无线收发实验

[ 本帖最后由 ch0721 于 2011-2-16 23:39 编辑 ]…

查看全部问答>

现在S3C2440只要50块钱.STM32不能松懈啊

可以把2440当成单片机用的.可能2440的门槛会高一些,封装也麻烦.但它的可外接SDRAM,速度高,可扩展视频.个人觉得它的应用范围可以覆盖很多STM32的领域.如果STM32能外接SDRAM就比较完美了.片内RAM始终还是比较受限.不知后续的带网络功能的STM32会 ...…

查看全部问答>

最后一晚

本帖最后由 paulhyde 于 2014-9-15 03:59 编辑 之前不是说了猜中一道题目类型就有100芯币的吗?怎么到现在还没有。。。。  …

查看全部问答>