51单片机串口通信——串口设置

  51单片机的串口通信如果全部把发送原理讲完的话可能要打好字,
最重要的是我有些地方也没搞懂的,也讲不清楚,所以今天就直接用代码来解释…….hahahaha


串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。
具体步骤如下:

1.确定T1的工作方式(编程TMOD寄存器);  
  
2.计算T1的初值,装载TH1、TL1;  
  
3.启动T1(编程TCON中的TR1位);  
  
4.确定串行口控制(编程SCON寄存器);  
  

5.串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。  


一言不合上代码:

#include "reg52.h"           //此头文件中定义了单片机的一些特殊功能寄存器  
  
typedef unsigned int u16;        
typedef unsigned char u8;  
  
void UsartInit()  
{  
    SCON=0X50;          //0101 000设置串行口控制寄存器sm0,sm1为01,即为工作方式1  
    TMOD=0X20;          //设置计数器工作方式2  
  
     /*看到这里的TMOD=0x20可能有同学会有疑问了,将定时器工作方式寄存器定义为0x20  
      就是将计数器1的M1M0设为10,即方式2(8位初值自动重装的8位定时器/计数器)  
      做过动态数码管的同学可能知道,数码管里的是选择定时器0,为什么要用定时器1呢?  
      单片机内部定时器0和定时器1虽然都是16位定时计数器,但在硬件结构和寄存器配置方面,  
      还是有一些不同之处的,通过对寄存器的配置:  
  
      1,定时器0可分成2个独立的8位定时器,而定时器1则不能;  
      2,定时器1可作为**串口的波特率发生器**,而定时器0则不能。*/  
  
    PCON=0X80;          //定义PCON寄存器中的SMOD=1,波特率加倍  
    TH1=0XF3;               //计数器初始值设置,注意波特率是4800的,当然大家可以改  
    TL1=0XF3;  
    EA=1;               //打开总中断  
    ES=1;               //打开中断允许中的串行口中断允许  
    TR1=1;              //打开计数器  
}  
void main()  
{     
    UsartInit();  //    串口初始化  
    while(1);         
}  
void Usart() interrupt 4  
{  
    u8 rec;  
    rec=SBUF+1;//出去接收到的数据,为了效果更明显,即向pc机发送1,回应2这样的效果  
    RI = 0;//清除接收中断标志位  
    SBUF=rec;//将接收到的数据放入到发送寄存器  
    while(!TI);          //等待发送数据完成  
    TI=0;                        //清除发送完成标志位  
}


  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
51单片机串口通信与定时器有一定的关系。定时器可以提供精确的时序控制,而在串口通信中,定时器常常被用来生成波特率时钟,即串口通信的时钟信号。通过定时器的计数和溢出,可以实现精确的波特率设定,从而使得串口通信能够按照预定的速率进行数据传输。此外,定时器还可以用来检测接收数据的间隔时间,或者用来生成特定的时序信号,以实现串口通信的各种功能。所以可以说,定时器在51单片机串口通信中扮演着重要的角色。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [51--定时器/计数器,串口,中断的巧妙关系](https://blog.csdn.net/weixin_64473106/article/details/126725789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [AutoLeaders控制组——51单片机学习笔记(定时器、串口通信)](https://blog.csdn.net/draw_future_TL/article/details/127914528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值