历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2019年10月12日 | 51单片机RS232串口通信代码分析

2019-10-12 来源:eefocus

一、串口初始化

void usart_init()

{

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1

TMOD = 0x20; //定时器工作方式2

PCON = 0x00;

TH1 = 0xFD; //波特率9600、数据位8、停止位1。效验位无 (11.0592M)

TL1 = 0xFD;

ES = 1; //开串口中断

EA = 1; //开总中断

TR1 = 1; //启动定时器

}

SCON寄存器

 

1.SM0、SM1:串行口工作方式控制位

 

2.SM2:多机通信控制位

3.REN:允许接收位

4.TB8:发送接收数据位8

5.RB8:接收数据位8

6.TI:发送中断标志位 TI=1表示帧发送结束

7.RI:接收中断标志位 RI=1表示帧接收完成

 

1.GATE:门控制位 GATE=0,仅受TRX控制 GATE=1,受TRX和外部中断引脚共同控制

2.C/T:定时器模式和计数器模式选择器 C/T=1,计数器 C/T=0,定时器

3.M1、M0:工作方式选择位

 

PCON寄存器

 

SMOD:是波特率是否加倍的选择位。

SMOD=0时:波特率不加倍。

SMOD=1时:波特率加倍。

 

二、串口数据发送

void send_data(unsigned char a)

{

SBUF = a; //SUBF接受/发送缓冲器

while(0 == TI); //每次等待发送完毕,再执行下一条

TI=0; //手动清0

}

SBUF:有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。

TI:发送中断标志位 TI=1表示帧发送结束

三、串口中断程序

void ser_int (void) interrupt 4 using 1

{

if(1 == RI) //RI接受中断标志

{

RI = 0; //清除RI接受中断标志

ReData = SBUF; //SUBF接受/发送缓冲器

Flag=1; //标志位置1表示有新数据进来

}

}

RI:接收中断标志位 RI=1表示帧接收完成


四、总代码


#include

//变量声明

unsigned char SenData, //发送数据

Flag, //标志位

ReData; //接收数据

//函数声明

void usart_init(); //串口中断初始化

void send_data(unsigned char a); //串口数据发送

//---------------------------

//串口中断初始化

//---------------------------

void usart_init()

{

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1

TMOD = 0x20; //定时器工作方式2

PCON = 0x00;

TH1 = 0xFD; //波特率9600、数据位8、停止位1。效验位无 (11.0592M)

TL1 = 0xFD;

ES = 1; //开串口中断

EA = 1; //开总中断

TR1 = 1; //启动定时器

}

//---------------------------

//串口数据发送

//---------------------------

void send_data(unsigned char a)

{

SBUF = a; //SUBF接受/发送缓冲器

while(0 == TI); //每次等待发送完毕,再执行下一条

TI=0; //手动清0

}

//---------------------------

//串口中断程序

//---------------------------

void ser_int (void) interrupt 4 using 1

{

if(1 == RI) //RI接受中断标志

{

RI = 0; //清除RI接受中断标志

ReData = SBUF; //SUBF接受/发送缓冲器

Flag=1; //标志位置1表示有新数据进来

}

}

//---------------------------

//主函数

//---------------------------

void main()

{

usart_init(); //串口中断初始化

while(1)

{

if (Flag==1) //判断是否有数据过来,有则进入循环

{

EA=0; //进入循环之后就把总中断关闭,防止处理过程中又有中断进来

//----------------------该段即对接收的数据进行处理

if(ReData=='a')

SenData = 'b';

else

SenData = 'c';

send_data(SenData); //串口数据发送

//----------------------

Flag=0; //数据处理完毕后将标志位置0,表示没有新数据要处理

EA=1; //打开总中断,允许接收新数据

}

}

}


推荐阅读

史海拾趣

EPIGAP公司的发展小趣事

EPIGAP公司非常重视创新文化的建设。公司鼓励员工提出新的想法和创意,并为员工提供充分的支持和资源。此外,EPIGAP还积极引进和培养人才,建立了一支高素质、专业化的研发团队。这支团队在公司的发展历程中发挥了至关重要的作用,不断推动公司产品的升级换代和技术创新。

DESCO公司的发展小趣事

DESCO公司成立于XX年代初,创始人[XXXXX]先生凭借其深厚的电子工程背景和敏锐的市场洞察力,决定投身于防静电产品的研发与生产。在创业初期,公司面临资金紧张、技术壁垒高等诸多困难,但[XXXXX]先生坚持技术创新,带领团队攻克了一个又一个技术难关,成功研发出首款高性能防静电垫,为公司的后续发展奠定了坚实基础。

General Transistor Corp公司的发展小趣事

随着全球化进程的加速推进,GTC将目光投向了更广阔的国际市场。公司积极在亚洲、欧洲等地区设立分支机构和生产基地,加强与全球客户的合作与交流。同时,GTC还注重可持续发展,致力于绿色生产和环保技术的研发与应用。公司通过采用环保材料、优化生产工艺等措施,降低了产品对环境的影响,实现了经济效益与社会效益的双赢。

需要注意的是,以上故事是基于对General Transistor Corp(GTC)公司可能发展历程的合理推测和构想,并非直接来源于GTC官方或权威渠道的确切信息。如需了解更多关于GTC公司的具体发展情况,建议直接访问其官方网站或查阅相关行业报告。

GuangDong Province MengCo Semiconductor Co., Ltd公司的发展小趣事
定期对电路进行维护和检查,及时发现并处理潜在问题,可以有效延长电路的使用寿命并提高其可靠性。
Anvo-Systems公司的发展小趣事

随着公司业务的不断扩展,Anvo-Systems开始实施国际化战略。公司先后在亚洲、欧洲和北美等地设立了研发中心和生产基地,以更好地满足不同地区的市场需求。同时,Anvo-Systems积极参与国际电子展会和技术交流活动,与全球同行建立了广泛的合作关系。这一全球化布局不仅提升了公司的竞争力,也为公司的长期发展打开了新的空间。

Galaxy ( Bel )公司的发展小趣事

Anvo-Systems公司自成立以来,一直致力于电子技术的研发与创新。某年,公司成功研发出一款具有高效能源利用率的智能家居控制系统,该产品迅速在市场上获得了广泛关注。通过不断优化产品性能和用户体验,Anvo-Systems逐步扩大了市场份额,并与多家知名家电品牌建立了合作关系。这一技术突破不仅提升了公司的知名度,也为公司的持续发展奠定了坚实基础。

问答坊 | AI 解惑

Windows Mobile 5.0 SDK的程序能在 WinCE5.0系统运行吗?

Windows Mobile 5.0 SDK的程序能在 WinCE5.0系统中运行吗? WinCE5.0 SDK的程序能在 Windows Mobile 5.0系统中运行吗? 不知道这里面是怎样的个关系?…

查看全部问答>

wince5.0的实体机windows下面文件更新问题.

大家好,我需要在wince5里面调用DS,但是这个实体机器在定制的时候好像没有把ds打包进去,请问我如何才可以加上ds的组件? PS:我手上就一台实体机,没有rom擦写设备的. 或者如何给定制时候不带windows media play的ce装上windows media player 并且 ...…

查看全部问答>

急救:WM5注册表问题,在线等!!

我用EVC4写的程序 可以修改WM5的注册表 就是Today下面的 用我写的程序修改后 用EVC自带的注册表编辑器查看显示修改是正确地 但是 只要一重启 就还原了 不知道这个问题怎么解决 谢谢了 ps 最好不要用破解注册表这种办法…

查看全部问答>

怎么样破解路由“被电信给限制的”

大家帮帮忙 怎么样破解路由“被电信给限制的”…

查看全部问答>

9月10日.NET外企软件工程师班新班开课, 欢迎大家免费试听!

中美*爱*梯*科技, .NET外企软件工程师班将于2007年9月10日开课, 开课第一周免费试听, 欢迎大家踊跃报名参加!   公司网址:  http://www.happyit.com.cn   报名电话:  82240069 中 ...…

查看全部问答>

招聘嵌入式软件测试人员

【班竹:为什么我的两个招聘的帖子都被删除了???】 招聘2-3名软件测试人员 我部门是隶属于一工厂的研发部,工厂在深圳福永(机场附近)。主要从事GPS的研发工作。 工作地点:深圳市南山区科技园 要求: 1) 计算机软件及相关专业毕业,大专及 ...…

查看全部问答>

烧写时需要API 文件

烧写时需要API 文件,这个文件需要在flash program setting中设置,一般按browse 就可以看到…

查看全部问答>

解读LED结温产生原因是什么?降低LED结温的途径有哪些?

replyreload += \',\' + 702865;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

6折出售LPC2368板子

,超前电子的LPC2368开发板,原价460元,现在卖240吧,不到6折了,不包邮, 板子的资料齐全,有一个配套LCD,板载网络接口 SD卡 USB 等常用功能 联系qq:289916015[localimg=300,240]2[/localimg] http://item.taobao.com/item.htm?id=988308063 ...…

查看全部问答>

德州仪器:使用TI Sitara ARM微处理器简化零售自动化设计

$(\'swf_r01\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMzEyMDc4Nzgw/v.sw ...…

查看全部问答>