精华内容
下载资源
问答
  • 单片机串口通信原理图,比较经典的连接方式,电阻电容的值也有标注
  • max232通信电路原理图和PCB串口电路原理图和PCB单片机下载线原理图和PCB
  • 单片机串口通信原理及原理图

    千次阅读 2016-09-06 14:02:00
    串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行...

    转:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=206905

     
    串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。
    通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:  

     a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 

      b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

      c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 
      d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。

    如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

    转载于:https://www.cnblogs.com/jikexianfeng/p/5845527.html

    展开全文
  • 51单片机串口通信原理讲解

    千次阅读 多人点赞 2019-10-24 23:54:50
    51单片机串口通信 今天研究了一下51单片机的串口通信,使用的单片机是普中科技开发板,但实际上所运用到的硬件和其他品牌单片机都相同,没有区别,总结一下,自己的理解和看法。 通信原理 通信原理大致分为串行和...

    51单片机串口通信


    今天研究了一下51单片机的串口通信,使用的单片机是普中科技开发板,但实际上所运用到的硬件和其他品牌单片机都相同,没有区别,总结一下,自己的理解和看法。

    通信原理

    通信原理大致分为串行和并行两种方法,各有优缺点,也不再这里赘述了,使用到的是串行通信的方法,简单介绍一下串行通信的原理,上图

    两个设备,一根互传线,每次传一组数据,总长度不一定8位,由51单片机内部设定来决定。设备间通信有许多接口方式,我用的是51上的串行接口,挂图:
    在这里插入图片描述
    SBUF:是指串行口中的两个缓冲寄存器,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的,但地址是重叠的。它们都是字节寻址的寄存器,字节地址均为99H,
    TXD:Transmit(tx) Data; RXD: Receive(rx) Data;
    两个口通过缩写记一下,我经常记不住(丢人),所以上面的那一个SBUF是发送,下面的是接收寄存器,发送或者接收的数据将暂时储存于里面,编程时直接赋值就行,TH1和TL1是时钟的配置系统,主要用于控制波特率,及每秒发送的总位数。(调试时一定要对应自己设置的波特率)

    控制寄存器SCON:内部结构下图,主要用于设置串口工作方式、接发送控制,以及状态位的控制
    在这里插入图片描述
    SM0和SM1是控制工作方式下图,控制每组总数据(起止位+数据位)的位数。移位则是一个脉冲一个一个脉冲的发送输入输出数据。
    SM2多机通信控制位,方式2和3时。SM2控制RB8是否会触发RI中断,SM2=1时R8=1激活中断(中断将数据读走),R8=0则不激活;SM2=0则失去控制作用。不论RB是否为0,RI都能激活,方式0时,SM2必须为0;方式1时,SM2=0,接受到停止位,R1中断就打开。
    REN允许串行接受位,REN=1,则打开接受,否则不能接受数据。
    TB,方式2和3中才用到,是奇偶效验位
    RB,在方式2、3中还是做奇偶效验位,在方式1中做数据停止位的存放位,用来将RI自动置1,启动中断。
    在这里插入图片描述
    PCON:用于控制波特率是否加倍,及SMOD=1,波特率加倍。复位时SMOD=0;
    在这里插入图片描述
    好了,大致通信原理讲到这里,下面到使用讲解!

    程序编写

    步骤:
    1、确定TMOD(计数器)工作方式
    2、配置TH1和TL1初值
    3、配置SCON、PCON
    4、打开中断允许位(总中断、串口中断),配置中断(中断内主要是SBUF读取发送数据),配置TCON打开中断即TR1置1.

    上代码:作用串口通信输入值,再返回

    include<reg52.h>
    typedef unsigned char u8;
    
    void ready(void)
    {
    	TMOD = 0X20;
    	TH1=0XFF;
    	TL1=0XF9; //波特率9600
    	SCON=0X50;//0101 0000
    	PCON=OX80;//1000 0000
    	EA=1; //打开总中断
    	ES=1; //打开串口中断,相当于ET1 ET0
    	TR1=1;//打开计数器,当其溢出时会给SMOD一个脉冲,接受和读取数据,达到设置波特率作用
    		  //当接受到停止位时RI=1触发中断
    }
    
    void main(void)
    {
    	ready();
    	while(1);
    }
    
    void time1(void) interrupt 4
    {
    	static u8 result;
    	result=SBUF;//进入配置中断,读取数据
    	RI=0;
    	SBUF=result;//将数据输入到SBUF里面发送
    	while(!TI);//等待发送完毕
    	TI=0;
    }
    

    一个简单的串口通信收发完成了

    展开全文
  • 这是之前上传的单片机串口通信原理图对应的PCB板图,请结合原理图
  • 详细介绍了51单片机串口通信原理以及程序流程,对于初学者有很大帮助
  • 51单片机最小系统原理图、PCB及组成原理详解

    万次阅读 多人点赞 2018-04-07 09:40:54
    单片机:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/...先上原理图和PCB,原理介绍...

    关注公众号:大狮熊 回复:最小系统 获取工程文件

    欢迎加入单片机学习交流群:946480874

    单片机:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

     先上原理图和PCB,原理介绍在后面:

    原理图:(如有错误欢迎留言,

    PCB:

    3D效果图:

    最小系统组成:

    51单片机最小系统:单片机、复位电路、晶振(时钟)电路、电源

    最小系统用到的引脚

    1、主电源引脚(2根)
    VCC:电源输入,接+5V电源
    GND:接地线

    2、外接晶振引脚(2根)
    XTAL1:片内振荡电路的输入端
    XTAL2:片内振荡电路的输出端

    3、控制引脚(4根)
    RST/VPP:复位引脚,引脚上出现2个机器周期(如果用11.0592Mhz的晶振,一个机器周期为1us,一个机器周期等于12个时钟周期)的高电平将使单片机复位,

    电源:

        电脑端输出232电平,单片机是TTL电平,需要USB转换模块对其转换

    复位电路:分为高电平和低电平复位。上电复位、按键复位、看门狗复位。

    单片机的复位电路就好比电脑的重启部分,当电脑在使用过程中死机,按下重启按钮电脑内部的程序开始从头执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮,内部程序从头开始执行。

     (包括上电复位和按键复位)

    当这个电路处于稳态时,电容起到隔离直流的作用,隔离了+5V,而左侧的复位按键是弹起状态,下边部分电路就没有电压差的产生,所以按键和电容C11 以下部分的电位都是和GND 相等的,也就是 0V。我们这个单片机是高电平复位,低电平正常工作,所以正常工作的电压是 0V,没有问题。

    我们再来分析从没有电到上电的瞬间,电容 C11 上方电压是 5V,下方是 0V,根据我们初中所学的知识,电容 C11 要进行充电,正离子从上往下充电,负电子从 GND 往上充电,这个时候电容对电路来说相当于一根导线,全部电压都加在了 R31 这个电阻上,那么 RST端口位置的电压就是 5V,随着电容充电越来越多,即将充满的时候,电流会越来越小,那RST 端口上的电压值等于电流乘以 R31 的阻值,也就会越来越小,一直到电容完全充满后,线路上不再有电流,这个时候RST 和 GND 的电位就相等了也就是 0V 了。

    从这个过程上来看,我们加上这个电路,单片机系统上电后,RST 引脚会先保持一小段时间的高电平而后变成低电平,这个过程就是上电复位的过程。那这个“一小段时间”到底是多少才合适呢?每种单片机不完全一样,51 单片机手册里写的是持续时间不少于 2 个机器周期的时间。复位电压值,每种单片机不完全一样,我们按照通常值 0.7VCC 作为复位电压值,复位时间的计算过程比较复杂,我这里只给大家一个结论,时间t=1.2RC,我们用的 R是 4700 欧,C 是 0.0000001 法,那么计算出 t 就是 0.000564 秒,即564us,远远大于 2 个机器周期(2us),在电路设计的时候一般留够余量就行。

    按键复位(即手动复位)有 2 个过程,按下按键之前,RST 的电压是 0V,当按下按键后电路导通,同时电容也会在瞬间进行放电,RST 电压值变化为 4700VCC/(4700+18),会处于高电平复位状态。当松开按键后就和上电复位类似了,先是电容充电,后电流逐渐减小直到 RST 电压变 0V 的过程。我们按下按键的时间通常都会有几百毫秒,这个时间足够复位了。

    按下按键的瞬间,电容两端的 5V 电压(注意不是电源的 5V 和 GND 之间)会被直接接通,此刻会有一个瞬间的大电流冲击,会在局部范围内产生电磁干扰,为了抑制这个大电流所引起的干扰,我们这里在电容放电回路中串入一个 18 欧的电阻来限流。

    晶振(时钟电路):

    晶振通常分为无源晶振和有源晶振两种类型,无源晶振一般称之为 crystal(晶体),而有源晶振则叫做 oscillator(振荡器)。

    有源晶振是一个完整的谐振振荡器,它是利用石英晶体的压电效应来起振,所以有源晶振需要供电,当我们把有源晶振电路做好后,不需要外接其它器件,只要给它供电,它就可以主动产生振荡频率,并且可以提供高精度的频率基准,信号质量也比无源信号要好

    无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能振荡它允许不同的电压,但是信号质量和精度较有源晶振差一些。相对价格来说,无源晶振要比有源晶振价格便宜很多。无源晶振两侧通常都会有个电容,一般其容值都选在10pF~40pF 之间,我们用 20pF 就是比较好的选择,这是一个长久以来的经验值,具有极其普遍的适用性。

    有源晶振通常有 4 个引脚,VCC,GND,晶振输出引脚和一个没有用到的悬空引脚(有些晶振也把该引脚作为使能引脚)。无源晶振有 2 个或 3 个引脚,如果是 3 个引脚的话,中间引脚接是晶振的外壳,使用时要接到 GND,两侧的引脚就是晶体的 2 个引出脚了,这两个引脚作用是等同的,就像是电阻的 2 个引脚一样,没有正负之分。对于无源晶振,用我们的单片机上的两个晶振引脚接上去即可,而有源晶振,只接到单片机的晶振的输入引脚上,输出引脚上不需要接,如图所示。

     

     总结:

    1.   51单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。

     2.    51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。

     3.    51单片机最小系统起振电容C2、C3一般采用10~40pF,并且电容离晶振越近越好,晶振离单片机越近越好

     4.    P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。

    欢迎加入单片机学习交流群:946480874

    展开全文
  • 上是串口的结构。 SBUF是数据缓冲寄存器,发送和接收用的是一个地址,但是不用担心冲突,读只能从接收缓冲区,写只能在发送缓冲区里。 寄存器SCON(SM0 SM1 SM2 REN TB8 RB8 RI) SM0和SM1: 工作方式选择(0...
  • 姓名:周崇杰 学号:16040120059 专业:机械设计制造及其自动化转载自:http://blog.csdn.net/a514371309/article/details/73481423...【嵌牛鼻子】:单片机,C语言,串口通信协议【嵌牛提问】:单片机是通过协议进...

    姓名:周崇杰   学号:16040120059    专业:机械设计制造及其自动化

    转载自:http://blog.csdn.net/a514371309/article/details/73481423,有删节

    【嵌牛导读】:单片机与计算机系统最关键的莫过于信息与数据,本文将在上篇文章的基础上,详细介绍了单片机的串口通信协议。

    【嵌牛鼻子】:单片机,C语言,串口通信协议

    【嵌牛提问】:单片机是通过协议进行通信的,那么协议是怎么一回事,它又是怎么让单片机进行通信呢?

    【嵌牛正文】:

    现实生活中, 我们总是要与人打交道,互通有无。单片机也一样,需要跟各种设备交互。例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。而这个数据的获得过程就是一个通信过程。类似的例子还有控制器通常是单片机或者PLC与变频器的通信。通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达成对话。

    通信协议又分为硬件层协议和软件层协议。硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。常用的硬件协议有串口,IIC, SPI, RS485, CAN和 USB。软件层协议则更侧重上层应用的规范,比如modbus协议。

    好了,那这里我们就着重介绍51单片机的串口通信协议,以下简称串口。串口的6个特征如下。

    (1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。

    (2)、0与1的约定。RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。TTL电平,约定5V的电压信号为1,0V电压信号为0 。CMOS电平,约定3.3V的电压信号为1,0V电压信号为0 。其中,CMOS电平一般用于ARM芯片中。

    (3)、发送秩序。低位先发。

    (4)、波特率。收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。也可理解为每秒可以传输的位数。常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。

    (5)、通信的起始信号。发送方在没有发送数据时,应该将Tx置1 。 当需发送时,先将Tx置0,并且保持1位的时间。接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。

    (6)、停止信号。发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位。

    2c914c33933e

    好了,理论暂时到这里,现在我们要做一个实验,将一个字节从51单片机发送到电脑串口调试助手上。这个实验的目的是为了掌握串口通信协议的收发过程。

    虚拟串口

    实验一、虚拟串口实验

    一般单片机都有专门的串口引脚,51里面分别是P3.0和P3.1,这些引脚拥有串口的硬件电路,因此使用它们并不需要设置信号的发送停止。为了掌握协议,我们使用其他的引脚来模拟串口,所以也叫虚拟串口。这里我们选用P1.0,然而注意到我们51单片机要发送数据给电脑,必须经过一个串口转USB设备(即TTL电平转换为RS232电平),而限于我们的开发板只有P3.0与P3.1连接到了串口转USB设备,所以我们可以将P1.0短接到P3.1 。 下图是这个串口转USB的原理图。

    2c914c33933e

    好了直接上代码吧。

    #include "reg51.h"

    /*

    将P1.0虚拟成串口发送脚TX

    以9600bit/s的比特率向外发送数据

    因为波特率是    9600bit/s

    所以me发送一位的时间是 t=1000000us/9600=104us

    */

    sbit TX=P3^1;//P1^0 output TTL signal, need to transferred to rs232 signal, can be connected to P3^1

    #define u16 unsigned int //宏定义

    #define u8 unsigned char

    u8 sbuf;

    bit ti=0;

    voiddelay(u16 x)

    {

    while(x--);

    }

    voidTimer0_Init()

    {

    TMOD |= 0x01;

    TH0=65440/256;

    TH0=65440%256;

    TR0=0;

    }

    voidIsr_Init()

    {

    EA=1;

    ET0=1;

    }

    voidSend_Byte(u8 dat)

    {

    sbuf=dat;//通过引入全局变量sbuf,可以保存形参dat

    TX=0;//A 起始位

    TR0=1;

    while(ti==0);//等待发送完成

    ti=0;//清除发送完成标志

    }

    voidTF0_isr() interrupt 1//每104us进入一次中断

    {

    staticu8 i;//记录进入中断的次数

    TH0=65440/256;

    TL0=65440%256;

    i++;

    if(i>=1 && i<=8)

    {

    if((sbuf&(1<

    {

    TX=0;

    }

    else

    {

    TX=1;

    }

    }

    if(i==9)//停止位

    {

    TX=1;

    }

    if(i==10)

    {

    TR0=0;

    i=0;

    ti=1;//发送完成

    }

    }

    voidmain()

    {

    TX=1;//使TX处于空闲状态

    Timer0_Init();

    Isr_Init();

    while(1)

    {

    Send_Byte(65);//0x41

    delay(60000);

    }

    }

    实验引入了定时器0来控制发送线上的各个位的保持时间。首先main函数进入,TX置1则使发送线处于空闲,这时候发送方和接受方都处于空闲。接下来初始化定时器0,TR0置0表示还不要启动定时器0。接着中断系统初始化,此时中断系统已经开启。进入while循环,先进Send_Byte()函数,将65传给形参dat,dat再将65赋值给sbuf,到这里准备工作就做好了。接着TX置0,这个是起始位,要保持这个起始位104us。于是就启动定时器TR0置1,计时器开始计数。当第一次溢出的时候,也就是过了104us,进入中断,同时接收方也侦测到了这个突然被拉低的信号,于是迅速启动自己的定时器。进入中断子函数后,先是重装定时器初值,然后i加1,也就是当i=1时,就应该发送数据的最低位了,总共有8位数据,所以使用条件语句if(i>=1 && i<=8)来判断是否发送完数据位。然后再通过if(i==9) 来发送停止位,最后当i=10时,也就是发送完了,这时候要关闭定时器(那么程序也就),同时i置0,ti置1(才能跳出while(ti==0)循环),最后将ti置0,保证下次要发送字节时让程序停留在while(ti==0)。

    片上串口

    以上说的是虚拟串口,上文中谈到与串口相关的引脚P3.0与P3.1,事实上51单片机自带片上串口,那这个串口又该怎么使用呢?

    片上串口支持同步模式与异步模式。简单来说同步模式就是指有时钟线,而异步模式无时钟线。这里的时钟线是指在同步通信时,用一根线专门传输时钟信号,这个信号用来与要发送的每一位保持同步,这样就避免了例如异步通信中因为采用定时器而引入的时间误差。

    片上串口还支持8位模式和9位模式。如下图所示

    2c914c33933e

    其中D0-D7是一个字节的8个位。9位模式只是多了一个位TB8,这个TB8的作用是奇偶校验或多机通信。奇偶校验原理这不加分析。多机通信时比如主机只发送数据给网络中的一台地址为0x02的设备,这时候先让TB8为1,前面的D0-D7则为地址即0x02,之后再让TB8为0,前面的D0-D7则为数据了。

    上面设置了片上串口的模式,另外还要设置串口的波特率。

    片上串口的波特率等于定时器1工作在方式2时溢出率的32分频。如果要定时器1工作在方式2,那么TMOD=0x20。另外要保证为32分频,我们还必须设置计数器初值。设晶振为11.0592Mhz,则定时器的计数脉冲为F=f/12,则定时器每计一个脉冲的时间为T=12/f。又令计数器的起点为x,则溢出一次要计的脉冲数为(256-x)。所以在计数起点为x时,溢出一次的时间为t=12/f*(256-x)。则对应的溢出率为1/t=f/(12*(256-x))。对应的波特率就为b=f/(384*(256-x))。

    x=256-f/(384*b)

    其中f为晶振频率,b为希望的波特率,x为定时器的计数起点TH1的值。

    例如当晶振为11.0592M,希望波特率为9600bit/s,则TH1=253。题外话,我们同样可以演算出在其他常用波特率情况下,TH1始终为一个整数。这里也就解释了为什么51里面选用了11.0592M的晶振而不是12M,这样就保证了串口的时序更加准确,虽然牺牲了定时器的准确度。

    实验二,片外串口发送一个字节。

    好了现在开始我们的实验之旅。直接看代码吧。

    #include "reg51.h"

    #define u16 unsigned int

    #define u8 unsigned char

    voiddelay(u16 x)

    {

    while(x--);

    }

    voidUart_Init()//串口初始化

    {

    SCON=0x50;//8位异步模式

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

    TH1=253;//9600bit/s

    TR1=1;

    }

    voidSend_Byte(u8 dat)

    {

    SBUF=dat;//启动发送,只需要把发送内容给SBUF这个寄存器

    while(TI==0);//等待发送完成,因为TI为1时表示在发送停止位

    TI=0;

    }

    voidmain()

    {

    Uart_Init();

    while(1)

    {

    Send_Byte('m');

    delay(60000);

    }

    }

    实验二较之实验一,代码减少了很多,而且不用考虑繁琐的位发送时序。只需要明白各个寄存器SCON,TMOD,TCON,SBUF的用法。TI是SCON中的第一位,为发送中断请求标志位。在本方式中,在停止位开始发送时由内部硬件置位,响应中断后TI必须又软件清零。

    实验三、片上串口发送一个字符串

    上面介绍了如何发送一个字节,那如何发送一个字符串甚至文本呢?这里我们首先介绍下字符串的概念。

    字符串:从存储器的某个地址开始,连续存放多个字符的ASCII码,并且在最后一个字符的后面存放一个0,这段连续的内存空间就叫字符串,最后的0叫字符串的结束符。注意这里的0和加单引号的0不是一个概念,加单引号的0是指0的ASCII码。

    数组与字符串的关系:字符串是数组的一种特殊情况,数组在特定条件下可当做字符串用。C语言用双引号描述一个字符串,如“abcd”。

    下面我们通过一个实验来展示如何发送字符串。我们实验的目标是打印字符串“Hello World ! 第一!”到打印机。直接上代码。

    #include "reg51.h"

    #define u16 unsigned int

    #define u8 unsigned char

    voiddelay(u16 x)

    {

    while(x--);

    }

    voidUart_Init()//串口初始化

    {

    SCON=0x50;//8位异步模式

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

    TH1=253;//9600bit/s

    TR1=1;

    }

    voidSend_Byte(u8 dat)//串口发送一个字节

    {

    SBUF=dat;//启动发送,只需要把发送内容给SBUF这个寄存器

    while(TI==0);//等待发送完成,因为TI为1时表示在发送停止位

    TI=0;

    }

    voidSend_String(u8 *str)//发送一个字符串  *str为字符串第一个字符的地址

    {

    abc://标号

    if(*str != 0)

    {

    Send_Byte(*str);

    str++;

    gotoabc;

    }

    }

    voidmain()

    {

    Uart_Init();

    while(1)

    {

    Send_String("Hello World! 第一!");

    Send_Byte(10);

    delay(60000);

    delay(60000);

    }

    }

    实验效果

    2c914c33933e

    展开全文
  • 时钟DS1302模块电路原理图:DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。读写时序说明:DS1302是SPI总线驱动方式。它...
  • 单片机 串口 通信 485

    2011-05-09 13:09:25
    基于485方式的单片机与PC机的串口通信 源代码 原理图
  • stc51单片机串口通信程序

    万次阅读 多人点赞 2019-04-12 17:37:06
    51单片机串口通信,是全双工的,就是可以同时收/发的,互相不影响的。 串口是可以同时收/发的,虽然都是用SBUF,但却是两个独立的寄存器,互不影响,只是都叫一个名,SBUF。 但是,对于接收或发送,确实是接收到一...
  • 单片机串口通信

    2021-05-05 14:47:15
    串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485 串行通信有...
  • 51单片机串口通信

    2020-04-26 17:56:36
    目录 串口初始化 SCON PCON TMOD 波特率设置 ...最近在学习51单片机,需要做一个...使用串口通信,需要对SCON、PCON和TMOD三个特殊寄存器进行配置。 SCON 串口工作方式寄存器SCON(98H)的结构如下表所示: SC...
  • 数码管显示及双单片机串口通信实验实验项目名称:数码管显示及双单片机串口...2、掌握单片机串口通信的设计方法,了解双单片机通信的原理。二.实验原理及实验线路1、中,74LS47 是七段译码器。它是将BCD 码翻译成...
  • 单片机串口通信理解(一)

    千次阅读 2019-11-08 14:59:56
    多机通信控制位REN:串口接受允许位TB8:发送的第9位数据RB8:接收的第9位数据TI:发送中断标志RI:接收中断标志电源控制寄存器PCON二、串口通信工作原理波特率/比特率三、单片机串口通信流程==中断注意事项== ...
  • 一.串口通信概念; 二.串口通信原理; 三.51单片机的串行口资源; 四、串口使用步骤; 五、例程;
  • 51单片机串口通讯UART

    万次阅读 多人点赞 2018-08-05 20:33:39
    1、串行通信的的基本知识 在实际的工业生产,或者生活中,计算机的CPU要与外部的设备之间进行信息的交流,数据的交换,所有的这些信息交换均可称为通信通信的方式有两种,分别为串行通信和并行通信。我们通常...
  • 内有相关电路原理图 使用atmega16l单片机 元件封装均做好 有pcb印制电路图
  • 成长中的小白又来发博客了,这次带来的分享是结合我前两篇『串行口通信』和『初学者模式下的12864液晶(一)』的技术博客综合起来再加今天的蓝牙模块的应用,今天稍微讲讲蓝牙基本的操作和基本接法,重点是几个方面的...
  • 串口的51单片机最小系统原理图
  • 一、串口通信电路 电路: 说明:当RXD TXD为低电平时,对应的led灯会亮起 二、串口通信控制寄存器 下为80C51串行口的结构: SCON(serial Control Register):串行口控制寄存器 bit 7 6 5 4 3 2 1 0 ...
  • 描述串口通信概述串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。常用三种串口通信协议1、RS-232RS-232(ANSI/EIA-232标准)是...
  • 51单片机串口多机通信原理与编程实现

    千次阅读 多人点赞 2020-06-11 12:15:44
    51单片机串口多机通信 需要用的的寄存器 (了解的可直接跳到下一节) TMOD 定时器/计数器模式控制寄存器 TCON 定时器控制寄存器 SCON 串口控制寄存器 PCON 电源控制位寄存器 IE 中断中断使能寄存器 补充说明,...
  • 单片机串口通信技术

    千次阅读 2014-06-01 09:39:33
    串口通信 随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。在多微机系统...
  • 单片机串口通信实验

    2021-05-07 14:52:57
    0x1 实验要求 (1)每隔1秒钟,A向B通过串口发送一个字节c_num(该字节按照0x00-0x09循环,例如某一时刻发送c_num=0x-3); (2)B接收到数据后,做9-c_num的计算,并将计算结果通过串口发送给A...0x2 电路原理图 ![im
  • 51单片机串口通信初始化

    千次阅读 2020-10-23 20:15:35
    51单片机串口通信 实验仿真: 实验原理: 主机的P3,1(TXD)连接到从机的P3,0(RXD),利用开关对主机的P1口赋值,将P1的数据存到主机SBUF,在通过串口传动到从机的SBUF,从机将接收到的数据从机的P1口体现。 说明...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,598
精华内容 2,639
关键字:

单片机串口通信原理图