当前位置: 首页 > news >正文

51单片机-串口通信编程

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

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

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

#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;
}



相关文章:

  • js 实现隔行幻色
  • 第五篇:DeepSeek-R1 的应用场景与未来展望
  • [特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)
  • Linux第十三节 — 进程状态详解
  • sklearn中的决策树-分类树:重要参数
  • reacct hook useState
  • RT-Thread+STM32L475VET6——icm20608传感器
  • Maven 基础环境搭建与配置(一)
  • 固态电容寿命
  • 【Java学习】抽象类与接口
  • 14.5 基于LangChain重构Auto-GPT:新一代自主智能体架构设计实践
  • Deepseek存算分离安全部署手册
  • Baklib革新数字化内容管理流程安全策略
  • Git常见命令--助力开发
  • 论文绘图工具
  • 【多模态处理篇八】【DeepSeek增强现实:AR导航实时推理优化】
  • Vue 不同大版本与 Node.js 版本匹配的详细参数
  • 蓝桥杯真题 - 缴纳过路费 - 题解
  • 【Agent的革命之路——LangGraph】工作流中的 Command 模式
  • 【C语言】(一)数据在计算机中的存储与表示
  • 五一假期上海虹桥边检站出入境近4.7万人次,韩国入境旅客同比增118%
  • 柳向春:关于美国国会图书馆所藏《全芳备祖》的一些故事
  • 五一档观众最满意《水饺皇后》
  • 赵心童世锦赛历史性夺冠,你今天打斯诺克很可能订不到位
  • 当一群杜克土木工程毕业生在三四十年后怀念大学的历史课……
  • 人民日报头版:让青春之花绽放在祖国和人民最需要的地方