欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机串口总结修改版.docx

    • 资源ID:23055498       资源大小:32.13KB        全文页数:26页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机串口总结修改版.docx

    1、单片机串口总结修改版第一篇:单片机串口总结51单片机串口总结 有句话说“尽信书不如无书”,要学好单片机就要不断的、大胆的实验,要多怀疑,即使我们的怀疑最终被证明是错误的那么这也是进步(人们认识事物很多情况下来源于怀疑),当怀疑出现时就要去实践。有很多东西如果不通过实践是不可能掌握其中隐藏的奥秘,就拿51单片机串口通讯这一块,我认为掌握很好了,可以很轻松的实现数据的接收 、发送,但这段时间当我重新学习串口时,我才发现里面还有很多小细节从没注意,更别说研究了。对于接收发送程序永远是按照别人的模式来编写程序,并没有真真正正的挖掘深层次的内容。我身边太多的人在临摹别人的程序,当然我不反对,但是希望自己

    2、多问几个问什么,单纯的会编程是学不好单片机的,毕竟单片机有自己独特的硬件结构。 开讲之前先简要说一下同步、异步通信: 同步通信:发送方时钟对接收方时钟控制,使双方达到完全同步。 异步通信:发送与接受设备使用各自的时钟控制数据的发送和接受过程(虽然时钟不同,但一般相差不大)。 51单片机串行口结构 从上图中我们看到,51单片机有两个物理上独立的接收、发送缓冲器SBUF,它们共用同一个地址99H,但是请注意:接收缓冲器只能读而不能写,发送缓冲器只写不读。单片机可以同时实现数据的发送与接收功能。 特别注意:接收器是双缓冲结构:当前一个字节从接收缓冲区取走之前,就已经开始接收第 二个字节(串行输入至移

    3、位寄存器),此时如果在第二个字节接收完毕而前一个字节还未被读走,那么就会丢失前一个字节。 51单片机串口控制寄存器 关于51单片机的控制寄存器各个位表示的含义在这里我只谈SM2。 SM2为多机控制位,主要用于工作方式2和3,当接收机的SM2=1时,可以利用接收到的RB8来控制是否激活RI(RB8=0不激活RI,收到的数据丢失;RB8=1时收到的数据进入SBUF,并激活RI ,进而在中断服务程序中将数据从SBUF中读走)。当SM2=0时,不论收到的RB8为何值都将使接收到的数据进入SBUF,并激活RI,通过控制SM2实现多机通信。 51单片机串口通讯方式 51串口通讯方式有3种,方式0、方式1、

    4、方式2与方式3,他们的工作模式不尽相同。 首先他们的波特率很容易忽视。方式0与方式2的波特率固定,而方式1和3的波特率由T1的溢出率决定。 方式0的波特率=f/12 系统晶振的12分频,换句话说12M晶振的情况下,其波特率可达1M,速度是很高的(当我们在选用串行器件并采用方式0时需要特别注意器件所能允许的最大时钟频率)。 方式2 =f/64或f/32(当SMOD=1时为f/32,SMOD=0时为f/64)。 曾经我用方式2进行MODBUS通信时,总是通讯失败,我仔细检查程序,没有发现逻辑错误,特别是当我参考别人的程序时,发现很少有人用方式2进行MODBUS通讯,所以当时自己妄下结论51单片机的

    5、串行方式2不可用,直到有一天夜里我突然想起方式2的波特率是固定的,试想晶振11.0592M/32或11.0592M/64怎么也不可能是9600啊,怎么可能通信成功。这才恍然大悟,看来还是自己太武断了,没有认真看书啊。有时我们认为我们犯这样的错误很低级,其实我们很多次都是因为这样的小细节导致我们整个系统不正常,正所谓“千里之堤毁于蚁穴”,这些细节真的伤不起啊。 方式1、3波特率=(2smod/32)*T1的溢出率,其中TI的溢出率=f/12*256-(TH1). 关于3种通讯方式其中有几点特别容易出错: 1、无论采用哪种通讯方式,数据发送和接受都是低位在先,高位在后。 2 、3种方式作为输出,由

    6、于输出是CPU主动发送,不会产生重叠错误,当数据写入SBUF后,发送便启动(通过单片机内部逻辑控制,与程序无关),当该字节发送结束(SBUF空), 置TI。不要理解为当数据一写入SBUF就置位TI,如果中断允许则在中断中发送数据,这就大错特错了。 3 同样作为输入,可能会产生重叠错误(主要依赖于特定的环境),当一个字节的数据接收完毕(SBUF满)置位RI,表示缓冲区有数据提示CPU读取。 接下来通过一些实验具体说明串口通信中需要注意的地方 1 方式0输出 方式0主要功能是作为移位寄存器,将数据从SBUF中逐位移出,最常见的用法就是外接串入并出的移位寄存器,如74LS164。之前在做这一部分实验

    7、时总是利用单片机I/O端口模拟实现,现在想想在串口未被占用的情况下,方式0是最好的实现方式。 利用串口方式0,向74LS164输出字符“0”的编码,程序如下: 该程序采用了中断方式实现,结果是通过74LS164使数码管显示“0”。 实验结果如下: 这里我说明几点: 1 如果采用查询方式,并且只发送一遍,那么程序最后的while(1);不可以省略,否则会出现数码管闪烁的现象(在KEIL环境下,main()函数也是作为一个调用函数,最后也有返回RET,它不像C中的main()函数,当执行完毕后就停止,而是重新复位执行,如此反复,这一点要特别注意) 这是查询方式下不加while(1);的现实效果 2

    8、 如果采用中断方式发送,请记得中断中清除TI,仅仅是为了解除中断标志,而不是等待发送结束,因为此时数据早已离开了SBUF跑到外边去了。 3 74LS164最高25MHZ,采用方式0,没有问题。 方式0作为输入模式 以74ls165(最高时钟25MHZ)为例,可以满足要求。 对应结果如下: (注意:74ls165线传送高位,而串口通信低位在先,所以显示的数据和实际数据高低位正好相反P1.7-P1.0对应D0-D7)。 本程序只接收一次,也许有人会问,中断程序中REN=0,表示什么意思?可不可以改成ES=0? 这个问题很好,首先REN=0表示接收禁止,即不允许串口接收数据;ES=0是禁止中断和单片

    9、机是否接收数据没有关系,不接收数据自然中断允许也是徒劳,这两者有很大的区别。我们在很多接收程序中经常可以看到在判断RI标志后紧跟着清除标志位,我想问一下,为什么?) 如果我们也按照这种模式改写会怎样呢? 实验结果如下 两次结果差异怎么这么大?为什么会这样子? 为了便于理解,也为了说明问题方便,对中断程序做了如下处理: 结果又变了 是不是感觉很奇怪,究竟咋回事呢? 首先中断程序中当判断RI置位标志后紧跟着清零是为了接收下一个字节的数据,也为了避免单片机重复中断。 当51单片机串口方式0作输入时,在REN=1且RI=0的条件下就启动了单片机串口接收过程。如果有一个条件不满足就不能启动接收过程,以上

    10、出现的错误正式由于忽略了这个重要的因素造成的。在RI清零后由于REN仍然为1,单片机已经开始接收第二字节的数据,由于串口速度很快,RI仍会置位,而紧接着将REN清零只能阻止单片机接收数据,但是却 不能阻挡第二次中断。由于只接收了部分外部引脚数据(此时外部引脚为高电平,即逻辑1,其实单片机只接收了一位,对于12M晶振而言,方式0大约8us接收一个字节数据)。相反在RI=0与REN=0之间加上适当的延迟,就可以保证一个字节的数据全部接收完毕,故此时我们读上来的一个字节为0xff。 我在中断程序中添加了一个中断计数器(不加延迟),发现中断服务程序的确执行了两次 结果如下 加上延迟结果 这就验证了刚才

    11、的结论。 至于说可不可以换做ES=0,回答是可以的,尽管同样可以实现数据的读取,但是实质不同,当禁止中断后,单片机仍在接收外部数据,只是不再请求中断,自然的不再读取第2、3。字节的数据,那么P1将保留第一次中断时从SBUF中读出的数据。如果某一时刻打开中断发现结果不正常,如果理解了上面的机制就不会觉得惊讶了。 建议:单次接收时,中断服务程序中REN清零放在RI之前。还有一个问题非常重要: 如果我在中断服务程序中不清除RI,会怎样? 很少有人会这样用,但是经常有人忘记了(包括我)。课本上写得很清楚,务必在中断中用软件清除RI,为什么要这样呢?难道仅仅是为了接收下一次数据并且避免单片机不断的响应中

    12、断?的确如此,如果对于一个小系统而言,不清除中断标志,那么单片机将不停的中断,影响接下来任务的执行,系统必然瘫痪,而且不能正常的接收数据。 总结:方式0作为发送方,只要向SBUF中写入数据就启动了发送过程; 方式0在座位接收模式时,REN=1、 RI=0的情况下就已经启动了接收过程。在中断程序中要注意两者清零的顺序。 还有一种情况要特别注意:单片机复位时SCON自动清零,如果单片机不工作在方式0,那么如果采用位操作SCON时也要注意REN=1与SM0、SM1的书写顺序,总之切记方式0启动发送、接收数据的条件。 方式1 方式1为10位异步通信模式。作为输出和方式0没有本质的区别,不同的是数据帧的

    13、形式,但是对于接受模式则有点不同,当REN=1且RI=0时,单片机并不启动接收过程。而是以已选择波特率的16倍速率采样RXD引脚的电平,当检测到输入引脚发生1-0负跳变时,则说明起始位有效,才开始接受本帧数据。 方式1模式下 单片机可以工作在全双工以及半双工方式。 下面举两个例子 半双工主机发送某一字符,从机接收到数据后返回数据加1的值 比如 主机发送“1“,从机收到后回复主机”2“。 实验结果如下: 方式1工作方式主要注意: 1 波特率可变。 2 数据接收以起始位为标志,停止位结束。 3 当RI=0且SM2=0或接收到有效停止位时,单片机将接收到的数据移入SBUF中,两个条件缺一不可。 方式

    14、2和方式3 方式2和3不同的只是波特率,这里以方式3为例 作为输出模式同方式1没有区别,只是增加了第八位数据位,第八位数据可以用作校验位或在多机通信中用作数据/地址帧的判别位。首先我们来做模拟主从奇偶校验模式 主机发送一帧数据,并发送奇偶校验位,从机接收数据后,判断数据是否正确,如果正 确,接收指示灯亮,并且回送主机数据加1,反之回送0;主机接收从机信息,如果校验正确点亮LED指示灯.(从机、主机接收数据无论校验正确与否,均显示接收到的字节数据)。 奇校验模式 演示结果如下: (注:从接接收不正确,返回0)主从机接收正确效果 之前我们已经介绍了SM2的具体用法,主要用于多机通信,将SM2作为数

    15、据/地址帧 的判别位,在接收地址时令SM2=1,当接收到的第八位数据为1时激活RI产生中断,然后比较地址,如果地址符合则清除SM2准备接受数据信息,反之不理睬。 特别注意 当RI=0且SM2=0(或SM2=1时接收到第9位数据为1)时,单片机将接收到的数据移入SBUF中,两个条件缺一不可。 在这里我只举一个简单的例子 一个主机,两个从机 1 起始时,主机从机的SM2均置位,所有的从机等待主机发送地址帧,主机令TB8=1,发送地址帧。 2 所用的从机将接受到的地址和自己的地址比较,如果符合,点亮LED指示灯,清除SM2(准备接受主机发送的数据帧),并将自己的地址发送到主机。 3 主机接收从机发送

    16、的地址信息,如果地址符合则数码管显示从机地址并开始准备发送数据,反之发复位信号,TB8=1。 4 从机接收数据先判断RB8,如果RB8=1,则复位,重新开始接收主机发送的地址帧,反之通过P1口外接数码管显示接收到的数据。 实验结果如下: 注意:如果主机没有得到正确的地址,则将按照一定的速率发送地址帧,直到接收正确的地址为止,该试验主机向从机2发送信息。 另外在这里我补充两点: 1 我们可以很方便的利用串口通信的工作方式2或3实现奇偶校验,注意技巧,当为偶校验时TB8=P,奇校验时TB8=P; 2当单片机利用中断发送大量数据时,尽量采用中断发送,因为单片机在写入SBUF数据后由硬件将数据发送完,

    17、在发送过程中,单片机还可以做很多事情,利用中断发送数据可以提高CPU利用率。尤其在低波特率时效果更明显。 第二篇:单片机串口通信方式总结IIC总线通信协议数据传输高位在前 1,起始和停止条件 开始信号:SCL为高电平,SDA由高电平向低电平跳变,开始传送数据。 void start() / 开始位 SDA = 1; /SDA初始化为高电平“1”SCL = 1; /开始数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 0; /SDA的下降沿被认为是开始信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期

    18、_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) 结束信号:SCL为高电平,SDA由低电平向高电平跳变,结束传送数据。 void stop() / 停止位 SDA = 0; /SDA初始化为低电平“0”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 1; /结束数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 1

    19、; /SDA的上升沿被认为是结束信号 2,数据格式(数据输入)在IIC总线开始信号后,送出的第一个字节数据是用来选择器件地址和数据方向的,其格式为 从器件收到地址型号后与自己的地址比较,一致则此器件就是主器件要找的器件,并返回AC(不管是写数据还是地址都会返回)。传送数据时为低电平时可改变高低电平,转跳为高时数据输入(此时不能跳变), 发送数据:bit WriteCurrent(unsigned char y) unsigned char i; bit ack_bit; /储存应答位for(i = 0; i 8; i+) / 循环移入8个位 SDA = (bit)(y&0x80); /通过按位

    20、“与”运算将最高位数据送到S /因为传送时高位在前,低位在后_nop_(); /等待一个机器周期SCL = 1; /在SCL的上升沿将数据写入AT24Cxx _nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 0; /将SCL重新置为低电平,以在SC线形成传送数据所需的个脉冲y /将y中的各二进位向左移一位 SDA = 1; / 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,/以让SDA线转由接收设备(AT24Cxx)控制_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 1; /根据上述规定,SCL应为高电

    21、平_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期ack_bit = SDA; /接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节/若送高电平,表示没有接收到,传送异常SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)return ack_bit; / 返回AT24Cxx应答位 读数据:unsigned char ReadData() / 从AT24Cxx移入数据到MCU unsigned char i; unsigned char x; /储存从

    22、AT24Cxx中读出的数据for(i = 0; i =1; /将dat中的各二进制位数据右移1位 for(time=0;time; /稍作延时,给硬件一点反应时间 对于读时隙,单总线器件仅在主机发出读时隙时,才向主机传输数据。所有主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60us,且在两次独立的读时隙之间至少需要1us恢复时间。每个读时隙都由主机发起,至少拉低总线1us。在主机发出读时隙后,单总线器件才开始在总线上发送1或0。若从机发送1,则保持总线为高电平;若发出0,则拉低总线。 当发送0时,从机在读时隙结束后释放总线,由上拉电阻将总线拉回至空闲高电平

    23、状态。从机发出的数据在起始时隙之后,保持有效时间15us,因此主机在读时隙期间必须释放总线,并且在时隙起始后的15us之内采样总线状态。下图给出读时隙(包括0或1)时序 图中黑色实线代表系统主机拉低总线,灰色实线代表总局拉低总线,而黑色的虚线则代表上拉电阻总线拉高。 代码为: unsigned char ReadOneChar(void) unsigned char i=0; unsigned char dat; /储存读出的一个字节数据for (i=0;i DQ =1; / 先将数据线拉高_nop_(); /等待一个机器周期DQ = 0; /单片机从DS18B20读书据时,将数据线从高拉低即启动读时序dat=1; _nop_(); /等待一个机器周期DQ = 1; /将数据线人为拉高,为单片机检测DS18B20的输出电平作准备for(time=0;time; /延时约6us,使主机在15us内采样if(DQ=1) dat|=0x80; /如果读到的数据是1,则将1存入dat else dat|=0x00;/如果读到的数据是0,则将0存入dat /将单片机检测到


    注意事项

    本文(单片机串口总结修改版.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开