51单片机-串口通信编程

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

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

串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器(中断优先级通常不设置))

cpp 复制代码
#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

void UsartInit()
{
   //TMOD控制T1、T0寄存器工作方式
   TMOD=0X20;  // 0010 0000 选择定时器1,工作方式2
   // 设置波特率,12MHZ晶振、4800波特率、定时器:方式2、SMOD=1波特率倍频,初值F3H
   TH1=0XF3;
   TL1=0XF3;
   //PCON不能位操作,设置SMOD
   PCON=0X80;
   //TCON寄存器启动定时器
   TR1=1;
   //SCON寄存器串行口控制
   SCON=0X50; // 0101 0000
   //IE寄存器打开串口中断
   ES=1;
   EA=1;
}

void main()
{
   UsartInit();
   while(1);
}

void Usart() interrupt 4
{
    u8 receiveData; //定义一个变量用于保存数据
    receiveData=SBUF; //读取缓冲器里面的数据
    //由内部硬件使RI置1,需要软件把RI清零
    RI=0;
    // 发送数据
    SBUF=receiveData;
    while=(!TI); //发送完成通过硬件置1,取反跳出循环
    TI=0; //发送完成,软件清0;
}
相关推荐
国科安芯24 分钟前
在轨服务与空间机器人任务中跨飞行器CANFD互连的共模与单粒子问题综述
嵌入式硬件·机器人·canfd·低轨卫星·商业航天·抗辐射
沐欣工作室_lvyiyi1 小时前
基于STM32的社区养老控制系统设计(论文+源码)
stm32·单片机·嵌入式硬件·社区养老控制系统·保定理工学院·华德学院·淮南师范学院
chengpei1471 小时前
硬改斐讯K2路由器32M Flash编译适配immortalwrt固件
嵌入式硬件·智能路由器
snow@li1 小时前
单片机:全景梳理核心原理与体系深度分析
单片机·嵌入式硬件
创界工坊工作室1 小时前
26-基于51单片机的智能热水器控制系统设计
stm32·单片机·嵌入式硬件·毕业设计·51单片机·proteus
NendoZen1 小时前
mangopi(芒果派)MQ-R T113 Buildroot开启adbd调试
linux·嵌入式硬件
霖霖7141 小时前
【ESP32笔记】蓝牙BLE连接与广播
笔记·单片机·mcu·物联网
sayang_shao2 小时前
用 Rust 开发 STM32H743:从零搭建一个能烧录、能看日志的项目
stm32·单片机·rust
碧海银沙音频科技研究院2 小时前
基于炬芯ATS308X内置音乐铃声与扫频音频功能实现
单片机·嵌入式硬件
硅基造物主2 小时前
18.从 IP 到 MQTT:STM32 用 AT 指令驱动 ESP-12F 上云的完整链路(含全套实战代码 + 踩坑清单)
网络·stm32·单片机·嵌入式硬件·网络协议·tcp/ip