您好,我是单片机小白, 51单片机串口通讯程序,下图中, 这边给SBUF赋值后

51单片机的串口通信
10:19:41&&&来源:eefocus &&
  一、原理简介
  51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。
  与之前一样,首先我们来了解单片机串口相关的寄存器。
  SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。
  串行口控制寄存器SCON(见表1) 。
表1 SCON寄存器
  表中各位(从左至右为从高位到低位)含义如下。
  SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。
表2 串行口工作方式控制位
  其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。
  SM2 :多机通信控制位。 该仅用于方式2 和方式3 的多机通信。其中发送机SM2 = 1(需要程序控制设置)。接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。工作于方式0 时,SM2 必须为0。
  REN :串行接收允许位:REN =0 时,禁止接收;REN =1 时,允许接收。
  TB8 :在方式2、3 中,TB8 是发送机要发送的第9 位数据。在多机通信中它代表传输的地址或数据,TB8=0 为数据,TB8=1 时为地址。
  RB8 :在方式2、3 中,RB8 是接收机接收到的第9 位数据,该数据正好来自发送机的TB8,从而识别接收到的数据特征。
  TI :串行口发送中断请求标志。当CPU 发送完一串行数据后,此时SBUF 寄存器为空,硬件使TI 置1,请求中断。CPU 响应中断后,由软件对TI 清零。
  RI :串行口接收中断请求标志。当串行口接收完一帧串行数据时,此时SBUF 寄存器为满,硬件使RI 置1,请求中断。CPU 响应中断后,用软件对RI 清零。
  电源控制寄存器PCON(见表3) 。
表3 PCON寄存器
  表中各位(从左至右为从高位到低位)含义如下。
  SMOD :波特率加倍位。SMOD=1,当串行口工作于方式1、2、3 时,波特率加倍。SMOD=0,波特率不变。
  GF1、GF0 :通用标志位。
  PD(PCON.1) :掉电方式位。当PD=1 时,进入掉电方式。
  IDL(PCON.0) :待机方式位。当IDL=1 时,进入待机方式。
  另外与串行口相关的寄存器有前面文章叙述的定时器相关寄存器和中断寄存器。定时器寄存器用来设定波特率。中断允许寄存器IE 中的ES 位也用来作为串行I/O 中断允许位。当ES = 1,允许 串行I/O 中断;当ES = 0,禁止串行I/O 中断。中断优先级寄存器IP的PS 位则用作串行I/O 中断优先级控制位。当PS=1,设定为高优先级;当PS =0,设定为低优先级。
  波特率计算:在了解了串行口相关的寄存器之后,我们可得出其通信波特率的一些结论:
  ① 方式0 和方式2 的波特率是固定的。
  在方式0 中, 波特率为时钟频率的1/12, 即fOSC/12,固定不变。
  在方式2 中,波特率取决于PCON 中的SMOD 值,即波特率为:
  当SMOD=0 时,波特率为fosc/64 ;当SMOD=1 时,波特率为fosc/32。
  ② 方式1 和方式3 的波特率可变,由定时器1 的溢出率决定。
  当定时器T1 用作波特率发生器时,通常选用定时初值自动重装的工作方式2( 注意:不要把定时器的工作方式与串行口的工作方式搞混淆了)。其计数结构为8 位,假定计数初值为Count,单片机的机器周期为T,则定时时间为(256 ?Count)&T 。从而在1s内发生溢出的次数(即溢出率)可由公式(1)所示:
  从而波特率的计算公式由公式(2)所示:
  在实际应用时,通常是先确定波特率,后根据波特率求T1 定时初值,因此式(2)又可写为:
 二、电路详解
  下面就对图1 所示电路进行详细说明。
图1 串行通信实验电路图
  最小系统部分(时钟电路、复位电路等)第一讲已经讲过,在此不再叙述。我们重点来了解下与计算机通信的RS-232 接口电路。可以看到,在电路图中,有TXD 和RXD 两个接收和发送指示状态灯,此外用了一个叫MAX3232 的芯片,那它是用来实现什么的呢?首先我们要知道计算机上的串口是具有RS-232 标准的串行接口,而RS-232 的标准中定义了其电气特性:高电平&1&信号电压的范围为-15V~-3V,低电平&0&
  信号电压的范围为+3V~+15V。可能有些读者会问,它为什么要以这样的电气特性呢?这是因为高低电平用相反的电压表示,至少有6V 的压差,非常好的提高了数据传输的可靠性。由于单片机的管脚电平为TTL,单片机与RS-232 标准的串行口进行通信时,首先要解决的便是电平转换的问题。一般来说,可以选择一些专业的集成电路芯片,如图中的MAX3232。MAX3232 芯片内部集成了电压倍增电路,单电源供电即可完成电平转换,而且工作电压宽,3V~5.5V 间均能正常工作。其典型应用如图中所示,其外围所接的电容对传输速率有影响,在试验套件中采用的是0.1&F。
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
51单片机相关资源
串口通信相关资源
编辑:什么鱼
本文引用地址:
大学堂最新课程
本周热门资源推荐
EEWORLD独家单片机小白学步(10) 单片机程序下载相关知识
09:48:16来源: eefocus
注:本篇在写《入门指南系列》之前就已经写过,现在发现这篇比较合理的位置,应该是放在《单片机入门指南系列(六) &&麻雀虽小,五脏俱全》之后的,但是由于之前考虑不周,所以只好放在这里了,也就不重新修改文章的位置了。
作为基础知识补充,本篇详细介绍了串口、的ISP下载等知识,虽然这些知识并不一定要很了解也能学习单片机,但是有一些概念有时对解决问题还是很有好处的。
==============================================
前面已经说了,单片机相当于一个微型电脑,所以单片机是可以执行程序的。在电脑上,我们可以上网下载各种游戏各种软件,但是单片机这灰不溜秋的一块芯片,怎么让它执行程序呢?不要急,这就给大家介绍。这里涉及到一些专业词汇,可能大家不明白,但是并没有很大影响,大致了解就好了,有兴趣的可以上网搜索去了解下。另外等学到后面,不少概念也自然就明白了。
串口(RS232、UART)
广义上而言,简称串口,也称串行通信接口,是采用串行通信方式的扩展接口。我们比较熟悉的USB接口,全名通用串行(Universal Serial BUS),就属于串口。串口还包括UART、RS232、RS422、RS等。通常狭义上,我们所说的串口指的是RS232、UART这一类串口,常称为COM接口。
老式的台式计算机和部分笔记本上就有RS232串口(RS232指RS232电平的串口)。后来由于这种串口使用很少、速度较慢、体积较大而逐渐在笔记本甚至台式机上被淘汰了。
而51单片机具有UART串口(UART = Universal Asynchronous Receiver/Transmitter, 通用异步收发传输器,指的是TTL电平的串口)。
UART与RS232区别主要在于其电平定义不同。UART是TTL电平,定义3~5V为高电平,表示&1&,0V为低电平,表示&0&,就和前文说的一样;而RS232是负逻辑电平,它定义+5~+12V为低电平,表示&0&,而-12~-5V为高电平,表示&1&。
标准串口指的就是RS232串口(也叫做COM接口),如图就是台式电脑机箱后面的标准串口。
给单片机下载程序
一些读者可能已经猜到,给单片机装进程序是通过电脑并且是使用串口来完成的。但是很可惜只猜对了一半。
说点题外话,为了感觉&专业&一点,以后不要再说给单片机&装程序&了,专业点的说法应该是烧写程序,或者下载程序。读者很可能会好奇为什么叫烧写程序呢?难道下载程序的时候,要用火烤一烤单片机吗?当然不是。这个就像马路为什么叫马路一样,是有来历的,想知道具体原因,还是等大家学习了单片机,了解早期ROM的工作原理再去深究吧。
回归正题,不同的单片机烧写程序的方式是不一样的。刚开始介绍STC单片机的时候,我提到了它的一个优点:可使用串口下载程序,不知读者有没有注意到。同样是51单片机,Atmel的产品分为两种,一种是早期的89Cxx系统,这种型号的单片机下载程序时,需要把单片机取下来,使用专用的编程器烧写程序,非常麻烦;另一种是后来推出的支持ISP的89Sxx系列(ISP = In System Programming,在线编程),只需要几根线连接单片机和下载器,就能轻松下载程序。
ISP在线编程
什么是ISP呢?ISP意为在线编程,其作用在于,下载程序的时候,单片机不需要从已有的电路中取下来。大家可能体会不到这样有什么好处,但是它的好处还是非常明显的。下面我举个例子。
有一天你给客户设计了一种电器,是通过单片机控制的。然后很多人都购买了,但是过了一段时间,你发现你写的程序有问题,或者有些地方需要优化一下,但是你卖出去的产品,程序已经写在里面了呀。这个时候,如果你用的单片机不支持ISP,你得亲自一个个的去找客户,把他们的产品拆下来,然后取下单片机,烧好程序,再装回去。如果你设计不当,单片机还是焊接在电路上的,取不下了,那就更惨了。
但是有了ISP就不一样了。你可以设计好产品,然后把ISP接口留出来。发现程序有问题,你把写好的新的程序发到网上,然后群发一批电子邮件,告诉你的客户,用产品附赠的下载线连接电脑和你的产品ISP接口,然后安装一个下载软件,把新的进去,就可以用了。你甚至可以在说明书上写,我们的产品软件经常会更新,请自行到官网下载最新软件,这样简直是一劳永逸。
所以一个小小的改进,就带来了如此大的变化。要用单片机,我选ISP,实惠又好用。
而STC单片机不仅支持ISP下载,而且只需要通过串口和电脑连接就可以下载,这样又省去了我们购买编程器的钱,实在是物美价廉,适合我们使用。
USB与串口的转换模块
由于USB接口与单片机的TTL串口不一样,不能直接连接,一般通过转换芯片来连接。连接到USB接口的转换芯片则要求在电脑上安装相应的驱动程序,驱动程序很容易在网上找到。
USB、RS232、UART三者之间的转换都有芯片可以实现,并且很容易买到做好的成品模块。下面给出了几种常用的转接器。
第一个是USB转TTL串口,这是最常用的一种转接器,常称为USB转TTL小板,USB-TTL转接板,常用转换芯片为PL2303,需要在电脑上安装对应驱动程序。
USB转RS232串口,常用转换芯片为CH341,使用时要在电脑上安装CH341的驱动程序,可以在百度上搜索
RS232串口转TTL串口,电平转换芯片是MAX232,如果你的电脑有串口,可以直接使用这种转接器,然后把TTL串口一端接到单片机上,这个不需要驱动程序。
也有这种集成了三种接口转换功能的 USB & RS232串口 & TTL串口转接板,如图所示。这个功能比较强大,但是电子市场不一定能买到。
市面上的成品,很多都提供USB接口,或者RS232串口+USB接口。一方面USB接口负责给单片机供电,另一方面,USB转TTL,或RS232转TTL已经集成在学习板上。
参考电路图
下面顺便提供这些模块的参考图,不需要掌握。如果有需要自己制作这些模块,可以参考这几个电路图。
MAX232电路图
PL2303电路图
USB-RS232电路图
51单片机程序的烧写
关于AT89Cxx系列单片机使用的编程器下载,以及AT89Sxx系列单片机使用的ISP方式下载程序,不做详细介绍,这里我们主要介绍STC单片机的串口下载方式。STC单片机烧写程序时,电脑端除了驱动以外,一般使用宏晶专用的STC-ISP软件进行下载。其界面如图。
这里先说一点注意事项。STC-ISP软件最好在宏晶官网下载最新版本。在首次运行时常常会出现类似下图中的情况,提示部件XXX不能注册。对应Win7系统可以先尝试右击STC-ISP的exe程序文件,选择&以管理员身份运行&(如果是XP系统,则只需以管理员身份登录计算机运行程序)。如果还是不行,则需要上网下载提示的XXX.DLL或XXX.OCX文件,放在C:\Windows\System32文件夹中,然后以管理员身份运行C:\Windows\System32\cmd.exe,输入regsvr32 C:\Windows\System32\xxx.dll回车,进行注册。这样的文件是系统动态链接库文件,是程序执行所需要的,有些电脑里没有,或者无法注册,所以会发生这种情况。
如果你已经购买了USB转串口模块,你可以安装好对应驱动并把它插到电脑的USB口上,如果是成品学习板,就用给学习板供电,然后把下载线连接到电脑上。如果一切顺利,我们可以在电脑上右击&我的电脑&(XP系统)或&计算机&(Win7以上系统),管理,打开设备管理器,在设备管理器中就能看到相应的串口,如图。
希望本篇看完了,大家把STC-ISP软件安装到自己的电脑上,有条件的把驱动也安装好。具体下载方法将在随后进行介绍。
=======================================================
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。在电子工程世界为您找到如下关于“51串口”的新闻
51串口资料下载
LCD图形生成.exe
串口调试助手.exe
网络调试助手.exe
51寄存器查询质料\51单片机寄存器.pdf
................\51单片机寄存器功能一览表.doc
................\51常用寄存器.doc
tftpd32.334\EUPL-EN.pdf
...........\Readme-说明.htm
...........\tftpd32.chm...
单片机51串口通讯例程,单片机51串口通讯例程,单片机51串口通讯例程...
51单片机与串口通信代码 - 51 单片机与串口通信代码 关键字:51 单片机 串口通信 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址...
proteus虚拟串口调试
Proteus通过虚拟串口程序仿真51单片机串口的实现
2.虚拟串口
3.串口调试助手
4.Proteus 7.5 sp3
1.参考文章(参考文章是从CSDN下载的一篇PDF文件)已经很详细的说明了怎么实现,我就不想啰嗦了,我只提供几个关键的截图和串口调试程序代码
如果参考文章打不开我提供参考文章的下载连接...
51单片机和Proteus+虚拟串口调试 - 51 单片机和 Proteus 虚拟串口调试 解释下什么是 51 单片机和 Proteus 虚拟串口调试,就是我们不需要实际的串口进行调试, 只需要......
51开发板串口通信小程序(IDE 是用的KELL)
51串口通信
..................\(51串口通信中断)
..................\........................\reg51.h
..................\........................\SCI.c...
介绍APC220无线传输模块的使用,以及用51单片机测试程序。介绍上位机与下位机的数据传输方式APC220资料PL\\51单片机串口测试程序\\串口COM通讯(C语言)\\COM
............\\....................\\..................\\COM.C...
一套比较完整的51单片机C51串口通信驱动程序,其中包括(1)串口初始化,晶振为11.0592M,方式1 波特率300-57600;(2)串口输出一个字符(非中断方式);(3)串口输出一个回车换行;(4)串口输出一个字符串(非中断方式);(5)串口接收一个字符(非中断方式);(6)串口接收一个定长字符串(非中断方式,只用于字符需有一个的idata字符串数组);...
51单片机串口通信
简介:文中介绍了并行,串行通信的基本概念和特点,以及两者之间的区别及比较。 重点介绍了基于51单片机如何进行串口通信。...
51串口通信计算器、51串口通信计算器 方便实用!!!...
51串口相关帖子
1.BK2425:单RF,有裸片和QFN20两种封装,适用于手柄、玩具和无线周边设备
2.BK2535:SOC芯片,Flash版本,51核+RF2.4G,有QFN32和QFN56两种封装,可用于无线键鼠,智能遥控器,无线数据传输,安防产品,数据采集系统等
3.BK2451:SOC芯片,OTP版本,51核+RF2.4G,SOP20和QFN20封装,支持USB2.0,常用于USB接收端
://.cn/course/4143/learn?preview=1#lesson/10183
DIY过程图片:
看看300多块一个喂食器贵在哪
采用减速齿轮, 感觉还不如用减速电机
齿轮占的空间也不小
控制板部分, 看起来挺简单的
看看送料杆, 这个是重点, taobao找了好久没找到, 喂食器贵就贵在模具费了。
偷瞄了内部MCU, 看着想51啥的...
本人小白,初次接触msp430f5438a,我们老师布置的任务,让用5438a连接ad7076,以前没接触过,上课没听懂,网上找的代码原本是51的,有没有大神教一下如何把51的改成f5438a的连接,我们老师说改个脚输出输入就可以,但是我还是没弄明白,书上都说的用f5438a自带的ADC12就可以,但是我们老师不让使用那个,希望有大神可以赐教,领着入个门,告诉我一下如何改变输出输入什么都如何连接...
优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。拿51单片机为例,比较一下就可以发现这样做的好处。假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间...
(2.4G音频).BK2471
1.BK2425:单RF,有裸片和QFN20两种封装,适用于手柄、玩具和无线周边设备
2.BK2535:SOC芯片,Flash版本,51核+RF2.4G,有QFN32和QFN56两种封装,可用于无线键鼠,智能遥控器,无线数据传输,安防产品,数据采集系统等
3.BK2451:SOC芯片,OTP版本,51核+RF2.4G,SOP20和QFN20封装,支持USB2.0...
“frdmkw41z_wireless_examples_bluetooth_wireless_uart_freertos”)
& && &&&实验所需软件要求:
& && && && &&&1、串口调试助手(软件不限)
& && &nbsp...
/2、BK2461、BKG音频).BK2471
1.BK2425:单RF,有裸片和QFN20两种封装,适用于手柄、玩具和无线周边设备
2.BK2535:SOC芯片,Flash版本,51核+RF2.4G,有QFN32和QFN56两种封装,可用于无线键鼠,智能遥控器,无线数据传输,安防产品,数据采集系统等
3.BK2451:SOC芯片,OTP版本,51核+RF2.4G,SOP20...
作业需要 pdf格式就好 谢谢
想找一个五个芯片以上的原理图 50个原件以上的
你是电气几班的同学?不自己去找在论坛伸手?让我看到挂了你!
楼上:lol:lol:lol:lol
自己动手丰衣足食,画5个放大器,每个放大器配10的阻容就可以了:lol
越是老电路,芯片越多。
当初的TP801单板机,存储器芯片一大排,并口一个扩展芯片,串口一个扩展芯片……。
互联网,让强者更强,弱者...
、玩具和无线周边设备
2.BK2535:SOC芯片,Flash版本,51核+RF2.4G,有QFN32和QFN56两种封装,可用于无线键鼠,智能遥控器,无线数据传输,安防产品,数据采集系统等
3.BK2451:SOC芯片,OTP版本,51核+RF2.4G,SOP20和QFN20封装,支持USB2.0,常用于USB接收端
BK2452:SOC芯片,OTP版本,51核+RF2.4G,SOP16和...
;QQ一、2.4G系列:BK2535(取代BK2433)、BK2451/2、BK2461、BKG音频).BK24711.BK2425:单RF,有裸片和QFN20两种封装,适用于手柄、玩具和无线周边设备2.BK2535:SOC芯片,Flash版本,51核+RF2.4G,有QFN32和QFN56两种封装,可用于无线键鼠,智能遥控器,无线数据传输,安防产品,数据采集系统等3.BK2451...
51串口视频
你可能感兴趣的标签
热门资源推荐遇到单片机问题,找我帮忙答疑解惑。【51单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:49,873贴子:
遇到单片机问题,找我帮忙答疑解惑。收藏
如题,跟帖说出你的问题即可。简单的,免费。
两个实现不同功能的单片机怎么并联到一起
用E18-D50Nk实现车流量检测并在数码管显示的程序有吗,我自己写了一个,在开发版上能实现,在焊的的硬件上实现不了,我估计是没加锁存器,求大神帮忙
我在设计一个用红外和光感同时控制的步进电机,但是卡在了写程序上边,红外和光感分别控制已经做好了,可是如何将两个C程序合在一起,本想强行合一波,结果光感的不运行- -求大神帮忙啊
没有人需要解答疑问的吗?
您好,C中怎样实现
一个按键第一次按键之后,立刻切换到中断,然后中断程序中的一个子程序处于循环状态,然后同一个按键第二次按下时结束循环,回到中断入口?
#include&reg52.h&#include&stdio.h&#define uchar unsigned char#define uint unsigned intuchar CNCHAR[6] = &摄氏度&;sbit ds=P3^7//温度传感器接线sbit lcden=P2^7;//lcdesbit rw=P2^5;sbit rs=P2^6;sbit fengshan=P2^3;sbit s1=P1^0;//功能键sbit s2=P1^1;//增大sbit s3=P1^2;//减小unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,//带小数点的0~9编码
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xff,0xef};//不带小数点的0~0编码uchar num,uchar code table1[]=&Hello!&;uchar code table2[]=&Please Press S1!&;void write_ds(uchar,uchar);void read_ds(uchar);void set_tem();//定义整形的温度数据float f_//定义浮点型的温度数据uint low_temp=20;//定义温度的下限值uint high_temp=30;//定义温度的上限值void delay(uint z)//延时函数 {
for(x=z;x&0;x--)
for(y=110;y&0;y--); }void di()//蜂鸣器{
fengshan=1;
fengshan=0;
delay(5);} void dsreset(void)//DS1820复位,初始化函数 {
while(i&0)i--;
while(i&0)
} bit tempreadbit(void)//读1位数据函数 {
ds=0;i++;//i++起延时作用
ds=1; i++; i++; dat=
i=8; while(i&0) i--;
return(dat);
} uchar tempread(void)//读1个字节数据函数{
uchar i,j,
for(i=1;i&=8;i++)
j=tempreadbit();
dat=(j&&7)|(dat&&1);//读出的数据最低位在最前面,这样刚好一个字节在dat里
return(dat); }void tempwritebyte(uchar dat)//想DS18B20写一个字节数据函数 {
for(j=1;j&=8;j++) {
testb=dat&0x01;
dat=dat&&1;
if(testb)//写1
while(i&0)i--;
while(i&0)
} } } void tempchange(void)//DS18B20开始获取温度并转换{
dsreset();
tempwritebyte(0xcc);//写跳过读ROM指令
tempwritebyte(0x44);//写温度转换指令 }uint get_temp()//读取寄存器中存储的温度数据 {
uchar a,b;
dsreset();
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread();//读低8位
b=tempread();//读高8位?
temp&&=8;//两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625;//温度在寄存器中为12位,分辨率为0.0625度
temp=f_temp*10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
//temp是整型 } /*LCD*/void write_com(uchar com){
lcden=0;}void write_date(uchar date){
lcden=0;}void init()//初始化{
low_temp=22;
high_temp=30;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num&15;num++)
write_date(table1[num]);
write_com(0x80+0x40);
for(num=0;num&6;num++)
write_date(table2[num]);
}}void LcdDisplay1(int temp)
//lcd显示{
unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定义数组
if(temp& 0)
//当温度值为负数
write_com(0x80);
//写地址 80表示初始地址
SBUF='-';
//将接收到的数据放入到发送寄存器
while(!TI);
//等待发送数据完成
//清除发送完成标志位
write_date('-');
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=f_temp*0..5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算由?.5,还是在小数点后面。
write_com(0x80);
//写地址 80表示初始地址
write_date('+');
SBUF='+';//将接收到的数据放入到发送寄存器
while(!TI);
//等待发送数据完成
//清除发送完成标志位
f_temp=//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=f_temp*0..5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。 } datas[0] = temp / 10000; datas[1] = temp % 10000 / 1000; datas[2] = temp % 1000 / 100; datas[3] = temp % 100 / 10; datas[4] = temp % 10; write_com(0x82);
//写地址 80表示初始地址 write_date('0'+datas[0]); //百位
SBUF = '0'+datas[0];
//将接收到的数据放入到发送寄存器 while (!TI);
//等待发送数据完成 TI = 0;
write_com(0x83);
//写地址 80表示初始地址 write_date('0'+datas[1]); //十位 SBUF = '0'+datas[1];
//将接收到的数据放入到发送寄存器 while (!TI);
//等待发送数据完成 TI = 0;
write_com(0x84);
//写地址 80表示初始地址 write_date('0'+datas[2]); //个位
SBUF = '0'+datas[2];
//将接收到的数据放入到发送寄存器 while (!TI);
//等待发送数据完成 TI = 0; write_com(0x85);
//写地址 80表示初始地址 write_date('.');
//显示 ‘.’ SBUF = '.';
//将接收到的数据放入到发送寄存器 while (!TI);
//等待发送数据完成 TI = 0; write_com(0x86);
//写地址 80表示初始地址 write_date('0'+datas[3]); //显示小数点
SBUF = '0'+datas[3];
//将接收到的数据放入到发送寄存器 while (!TI);
//等待发送数据完成 TI = 0; write_com(0x87);
//写地址 80表示初始地址 write_date('0'+datas[4]); //显示小数点
SBUF = '0'+datas[4];
//将接收到的数据放入到发送寄存器 while (!TI);
//等待发送数据完成 TI = 0; for(i=0; i&6; i++) {
SBUF = CNCHAR[i];
//将接收到的数据放入到发送寄存器
while (!TI);
//等待发送数据完成
}//void deal(uint t)//{//
if((t&=low_temp)&&(t&=high_temp))//
di();//}void init_com(void)//串口初始化函数 {
TMOD=0X20; PCON=0X00; SCON=0X50;
TH1=0XFD;//波特率9600
void comm(char*parr)//串口数据发送函数 {
SBUF=*parr++;//发送数据
while(!TI);//等待发送完成标志为1
TI=0;//标志清零
} while(*parr);//保持循环直到字符为'\0' }void keyscan(){
while(!s1)
if(slnum==1)
delay(10);
while(!s2);
delay(10);
while(!s3);
} slnum++;
if(slnum==2)
while(!s1)
if(slnum==1)
delay(10);
while(!s2);
delay(10);
while(!s3);
} slnum=0; }}void main(){
write_com(0x88);
//写地址 80表示初始地址
write_date('C');
LcdDisplay1(tempread());
delay(10);//
deal(temp);
delay(10);
keyscan();
为何运行不出来
前辈请问这个程序中pwm的周期频率怎么算?还有利用延时和终端是怎样控制占空比的?求解答啊
预安装成功
然后链接不了电脑 怎么破???
楼主我想问一下老师要我们自己找一个仿真课题,有哪些课题,谢谢
为什么我这段程序在keilc里面编译错误#include&reg52.h&sbit BY1=P3^4;unsigned char count,count1;unsigned char a,b;#define A 0x40;#define B 0x80;void delay10ms(void){unsigned char i,j;for(i=20;i&0;i--)for(j=248;j&0;j--);}unsigned char Tunsigned char Cvoid KeyRead(void){unsigned char ReadData=P3^0Trg=ReadData&(ReadData^Cont);Cont=ReadD}void KeyProc(void){KeyRead();if(Trg&&A)//有错误{count++;} //有错误if(Cont&&B) //有错误{ count1++;delay10ms();if(count1&100){count++;count1=0;}}if(count==8){ count=0;}// syntax error near';'}void move(){a=temp&&b=temp&&(8-count);P1=a|b;}main(){count=0;temp=0P1=0P1=while(1){KeyProc();move();}}
帮我看看,PQFP封装的at89c51一直检测不到单片机,搞了很久没解决下载线是在淘宝买的,用直插式封装的同样的电路又能烧录,但pqfp封装的就是不行!
楼主,何必呢,我看了一下上面的楼层,这些是真的想学吗?有问题就丢出一大堆源码到处求大神,他们自己想过吗?真正自己想过的人虽然不一定能知道怎么解决,但好歹能大概知道问题在哪,缩小范围,贴代码只贴有问题那部分,或者是请教思路,像上面那些贴一大串代码然后撒手就那样的,神烦!
可以帮忙写这个图得程序嘛?基于AT89C51的工业顺序控制电路感谢
楼主,想利用单片机设计小车避障实验,通过单片机接光电传感器作为信号输入,再将输出接到继电器上,再通过继电器接到电动机上从而控制转速,这样合理么?电路板上还需要其他东西么?
楼主您好,请问如何从串口的SBUF中读出任意两个数并做乘法运算呀,小白不是很明白串口数据缓存器SBUF的存储机制,谢楼主啦
设备管理器里没有显示端口怎办
楼主较少来贴吧,有疑问的,可以加我QQ聊,(上班时间通常都在线的。)有些人的问题确实太让人无语,所以现在一律收费。有需要的可以加我抠(),楼主解决不了的,不要钱!
我想通过单片机采集电路电压 如和编程才能使其显示到lcd1602上呢
终于找到大神了问题已经困扰我两周了就是做不好
我做的是避障小车 用的51单片机
可是接上电机不转两端压差为0找不出问题 电路也是好着呢 换个坏的单片机就有一个电机不转 (坏的单片机没烧程序) 好的单片机烧了程序电机死活不转 不知为什么 跪求楼主解答 !!!
楼主有8*8点阵资料吗
1.以24c02储存备份密码,以1602显示操作和过程;2.密码要求至少4位,且可以通过按键修改备份密码;3.按键位数不限,按键输入密码时,应显示“*”代替实际数值;4.密码输入次数最大为三次,超出则按键锁死,并绿灯熄灭,红灯闪烁;输入正确,则红灯熄灭,绿灯常亮;5.密码输入时常最长为一分钟,超出则按键锁死,并绿灯熄灭,红灯闪烁;
我想问用单片机做双机通信。然后主机怎样发数据到串口 控制灯的亮暗。主机用的是矩阵键盘
登录百度帐号推荐应用

我要回帖

更多关于 单片机串口通讯原理 的文章

 

随机推荐