51单片机学习笔记【六】——串口通信实验

发布者:Meshulun最新更新时间:2018-07-15 来源: eefocus关键字:51单片机  串口通信 手机看文章 扫描二维码
随时随地手机看文章

一.串口通信基础

1.串行通信

  • 串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。单片机采用串行通信。特点是:传输线少,长距离传送成本低,但数据传送控制复杂。

  • 串行通信的传输的传输方向:单工(数据传输只能沿一个方向),半双工(传输数据和接受数据分布进行),全双工(传输和接受同步进行)。

  • 单片机采用异步通信,发送和接受设备使用各自的时钟频率,容易实现,但传输效率不高,数据格式 
    异步通信

2.MAX232

  • 实验通过MAX232电平转换芯片,可把计算机串口电平(-12V~+12V)转换为单片及TTL电平。电路原理图如下 
    MAX232

3.80C51串行口

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

4.工作方式寄存器SCON

D7D6D5D4D3D2D1D0
功能SM0SM1SM2RENTB8RB8T1R1
  • 介绍

  • RI:接收中断标志位 
    接收结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)

  • TI:发送中断标志位 
    发送结束时,会由硬件置1,向CPU发出中断请求。要由软件复位)

  • TB8:用来存放发送的第9位。

  • RB8:用来存放接收的第9位。

  • REN:是串行接收允许位 
    0时:禁止串行接收 
    1时:允许串行接收

5.工作方式寄存器PCON

  • PCON是没有位寻址的,也就是说不能直接操作SMOD要直接操作PCON寄存器。

  • SMOD:是波特率是否加倍的选择位。 
    0时:波特率不加倍。 
    1时:波特率加倍。

6.串口的操作步骤:

第一步:设置波特率,设置定时器T1为工作方式2(设置TMOD寄存器),给计数器赋初值(工作方式2会自动重装)

第二步:设置串口工作方式,设置SCON(如果允许)。

第三步:如果使用中断方式,那么打开相应的中断和总中断。

第四步:打开定时器T1,开始产生波特率。TCON设置TRx。


二.实验例程

1.说明:本实验通过使用串口调试助手向计算机发送数据,并返回,实验不需要接线。

2.程序源代码如下:

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

  > File Name: 串口通信实验

  > Author: pengshp

  > Mail: pengshp3@outlook.com

  > Date: 2015年 7 月 22 日

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

#include

#define uchar unsigned char

#define uint unsigned int


uchar flag,i;

/*串口初始化函数*/

void init_uart()

{

    SCON=0x50;  //设置为工作方式1 0101 0000

    TMOD=0x20;  //设置计数器工作方式2

    PCON=0x80;  //波特率加倍

    TH1=0xF3;   //计数器初始值,波特率为4800

    TL1=0xF3;

    EA=1;       //打开总中断

    ES=1;       //打开接受中断

    TR1=1;      //打开计数器

}


void main()

{

    init_uart();

    while(1)

    {

        if(flag==1)

        {

            ES=0;      //关闭串口中断

            flag=0;

            SBUF=i;    //接受到的数据写入SBUF

            while(!TI);//判断是否发送完

            TI=0;

            ES=1;      //打开串口中断

         }

     }

}   


void serial() interrupt 4

{

    RI=0;              //接受标志位清零

    i=SBUF;            //从SBUF读数据

    flag=1;            //说明接受到数据

}

串口效果

波特率的计算和工作方式介绍略,常用的波特率为9600,晶振频率为11.0592MHZ,则误差为0%。我使用的晶振频率为12MHZ,有一定的误差。


关键字:51单片机  串口通信 引用地址:51单片机学习笔记【六】——串口通信实验

上一篇:UART串口通信浅谈之(三)--字符与数据的转换
下一篇:51单片机之——外部中断0(INT0)

推荐阅读最新更新时间:2024-03-16 16:08

串口通信协议stm32
串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 UART串口时序 UART串口配置 1)串口时钟使能。串口作为 STM32 的一个外设,其时钟由外设时钟使能寄存器控制,这里我们使用的串口1是APB2ENR寄存器的第14位。(除了串口 1 的时钟使能在 APB2ENR 寄存器,其他串口的时钟使能位都在 APB1ENR 寄存器,而 APB2(72M)的频率一般是 APB1(36M)的一倍。) 2)串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始
[单片机]
<font color='red'>串口通信</font>协议stm32
MCS-51单片机的内部结构介绍
1、8051单片机片内并行接口 2、MCS-51的内部资源 3、MCS-51的芯片引脚 4、单片机的工作方式 单片机的工作方式包括:复位方式、程序执行方式、单步执行方式、低功耗操作方式以及EPROM编程和校验方式。 1. 复位方式:经典的上电复位电路 2. 程序执行方式:(1)执行内部程序;(2)执行外部程序 3. 单步执行方式:用于调试程序和系统 4. 低功耗操作方式 5. 编程和校验
[单片机]
MCS-<font color='red'>51单片机</font>的内部结构介绍
51单片机C编程(十、74LS165串口输入)
通过74ls165将按键的状态串口输入到51单片机,在数码管上显示出来,每个按键对应数码管上的一段。 proteus仿真电路图如下: #include reg51.h sbit SL=P3^7 //串口接收启动端口:0- 1启动。 #define LEDPORT P0; void main() { unsigned char ucCount; SCON=0x10; //设置串口模式:模式0,允许接收。 while(1) { SL=0; SL=1; //启动接收。 while(RI==0); LEDPORT=SBUF; //转存数据。 RI=0;
[单片机]
51单片机串口通信详解-原理 寄存器 编程等
单片机的通信一般有并行通信和串行通信。并行通讯是数据的各位同时发送或接收,并行通信控制简单,传输速度快,传输线较多。 参看下图: 串行通讯传输线少,可利用电话网,但传送控制复杂。数据一位一位顺序发送或接收。 串行通讯中有一种是异步通信,即我们通常所说的串口通信。这是我们今天要分享的内容: 异步通讯用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。用这种格式表示字符,则字符可以一个接一个地传送。 一、在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特
[单片机]
<font color='red'>51单片机</font>的<font color='red'>串口通信</font>详解-原理 寄存器 编程等
51单片机MAX7219程序
该程序已使用过,免调试。 #include reg52.h #include intrins.h #define byte unsigned char //#define N_NOP _nop_();//_nop_();_nop_(); /////////////////////////////////////////////////////// //MAX7219 //////////////////////////////////////////////////////////////////// //管脚,变量和常数定义;DEFINE #define Model_addr 0x09 // X9 H #d
[单片机]
51单片机中断入口地址在c语言中的表示
函数类型 函数名(随便) 中断标识(不同的数字代表不同中断入口) 例如: void INT () interrupt 0 //外部中断0 {} void INT () interrupt 1 //定时/计数器0 {} void INT () interrupt 2 //外部中断1 {} void INT () interrupt 3 //定时/计数器1 {} void INT () interrupt 4 //串口 {} interrupt X 其中X表示中断号, 0表示外部中断0 1表示定时器0溢出中断 2表示外部中断1(/INT1) 3表示定时器1溢
[单片机]
C-51单片机动态数码管显示1234.5
利用数码管显示数字,可以在静态数码管上加以改良, 给出短码想要的数字可以自己修改。。。。 下面给显示1234.5的码, 这个没有用到循环语句,比较简单 #include reg51.h #define uchar unsigned char void delay(uchar x) { uchar i; while(x--) { for(i=0;i 120;i++); } } void main() //**主程序** { while(1) { P0=0Xfe; P2=0X06; delay(1); P0=0Xfd; P2=0X5b;
[单片机]
C-<font color='red'>51单片机</font>动态数码管显示1234.5
基于51单片机的数字钟
//作者:中山董豪 时间:2010年 //功能:4位数码管可以显示 时分,月日,年份;万年历,整点报时,定时自动(或手动)关闭显示器,空闲模式工作省电 //硬件:2051单片机,P1.6到P1.0分别是 A到G,P1.7=DP,P3.5=D4,P3.4=D3,P3.1=D2,P3.0=D1,P3.7控制直流蜂鸣器(整点报时)。 //.2=0(改时间),P3.3=0(改状态),6Mhz晶振。 //使用说明:默认时间为 2010年1月1日,0点0分,状态1显示时分 //按P3.2为0,状态++,状态功能分别为 1:显示时间 2:显示月日 3:显示年 4:修改分钟 5:修改时钟 6:修改年 7:修改月 8:修改日 ; //用DP来表示
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved