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;
}
相关推荐
智者知已应修善业1 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
智商偏低7 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen9 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森11 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白11 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D11 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术14 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt15 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘15 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang15 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c