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

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




http://www.kler.cn/a/557436.html

相关文章:

  • 创建监听器报错“一个或多个listeners启动失败”
  • 区块链相关方法-PEST分析
  • 如何在cursor上使用 deepseek 模型
  • 深入理解 JSP 与 Servlet:原理、交互及实战应用
  • 怎么学习调试ISP的参数
  • 无法打开包括文件: “crtdbg.h”: No such file or directory
  • 《论单元测试方法及应用》审题技巧 - 系统架构设计师
  • Win10操作系统从机械硬盘HDD迁移到SSD固态硬盘
  • Redis-AOF
  • 进制转换--PAT(B)1022
  • Spring Cloud — Hystrix 服务隔离、请求缓存及合并
  • 什么是方法
  • 项目需求管理及其活动
  • 如何确定虚函数在虚函数表中的位置3 (Linux x64版本)
  • PySide6中如何实现TableWidget跨行列粘贴Excel表格内容
  • 深入理解 JUnit 的 @RunWith 注解与自定义 Runner
  • 【Kafka】Kafka高性能解读
  • DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)
  • 【Python爬虫(38)】解锁Scrapy - Redis:构建高效分布式爬虫
  • YOLOv8与DAttention机制的融合:复杂场景下目标检测性能的增强