一、什么是串口(RS232 9针串口)

串口是我们的大多数微控制单元(MCU)都具有的基本的外部接口,一般串口最基本的功能就是调试,又能做数据通信的接口(数据量要小一些)。


二、串口通信原理

一条信息的各位数据按位依次顺序的通信方式称为串行通信,传信通信可以是串口也可以是其他(74LS164移位寄存器)。

根据传输方式又分为单工、半双工和全双工三种,如图所示:

串口传输如下图所示:


三、串口相关寄存器介绍

1、串口控制寄存器SCON

2、电源控制寄存器PCON


四、串口示例代码

1、串口发送单个数据

/**************************************************************************************
*
*实现现象:串口发送单个数据
*
*注意事项:波特率为4800
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;      //对数据类型进行声明定义
typedef unsigned char u8;void Delay(void)//延时500ms
{unsigned char i,j;for(i=0;i<255;i++)     //进行循环操作,以达到延时效果for(j=0;j<255;j++);for(i=0;i<255;i++)for(j=0;j<255;j++);for(i=0;i<255;i++)for(j=0;j<255;j++);}/*******************************************************************************
* 函数名         :UsartInit()
* 函数功能         :设置串口
* 输入           : 无
* 输出             : 无
*******************************************************************************/
void UsartInit()
{SCON=0X50;            //设置为工作方式1:8位数据位TMOD=0X20;          //设置计数器工作方式2  高四位和低四位PCON=0X80;            //波特率加倍TH1=0XF3;           //计数器初始值设置,注意波特率是4800的,如果波特率要9600,修改TH1和TL1即可TL1=0XF3;
}/*******************************************************************************
* 函数名         :UsartSendByte()
* 函数功能       :串口发送单个字节
* 输入           : 无
* 输出             : 无
*******************************************************************************/
void UsartSendByte(unsigned char byte)
{SBUF=byte;    //缓冲区装载要发送的字节while(TI==0)//等待发送数据完成,TI标志位会置1TI=0;     //清空发送中断标志位
}/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{   unsigned char i = 0;UsartInit();          //串口初始化while(1){UsartSendByte(i);//串口发送单字节数据Delay();i++;if(i>255)i=0;}
}

2、串口接收并返回数据

/**************************************************************************************
*
*实现现象:串口接收并返回数据
*
*注意事项:波特率为4800
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;      //对数据类型进行声明定义
typedef unsigned char u8;void Delay(void)//延时500ms
{unsigned char i,j;for(i=0;i<255;i++)     //进行循环操作,以达到延时效果for(j=0;j<255;j++);for(i=0;i<255;i++)for(j=0;j<255;j++);for(i=0;i<255;i++)for(j=0;j<255;j++);}void UsartInit()
{SCON=0X50;            //设置为工作方式1:8位数据位TMOD=0X20;          //设置计数器工作方式2  高四位和低四位PCON=0X80;            //波特率加倍TH1=0XF3;           //计数器初始值设置,注意波特率是4800的,如果波特率要9600,修改TH1和TL1即可TL1=0XF3;ES=1;              //打开接收中断EA=1;              //打开总中断TR1=1;              //打开计数器
}/*******************************************************************************
* 函数名         :UsartSendByte()
* 函数功能       :串口发送单个字节
*******************************************************************************/
void UsartSendByte(unsigned char byte)
{SBUF=byte;    //缓冲区装载要发送的字节while(TI==0)//等待发送数据完成,TI标志位会置1TI=0;     //清空发送中断标志位
}/************************************************************
*
*输入:pstr 字符串
*
*功能:串口打印字符串
*
************************************************************/
void PrintfStr(char *pstr)
{while(pstr && *pstr){UsartSendByte(*pstr++);}
}void main()
{   unsigned char i = 0;UsartInit();  //   串口初始化while(1);
}/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能        : 串口通信中断函数*******************************************************************************/
void Usart() interrupt 4    //串口中断号
{u8 receiveData;receiveData=SBUF;  //出去接收到的数据    接收中断标志位   RI = 0;               //清除接收中断标志位UsartSendByte(receiveData);//返回接收到的数据//SBUF=receiveData;  //将接收到的数据放入到发送寄存器//while(!TI);        //等待发送数据完成//TI=0;              //清除发送完成标志位   发送中断标志位
}

C51/C52单片机的串口原理及参考代码相关推荐

  1. C51/C52单片机,最小系统

    一个小白,开始学习单片机,从C51/52开始, 我学习的型号是STC98C52单片机. STC89C52是一种低功耗.高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器.在单芯片上,拥有 ...

  2. C51/C52单片机printf打印出来的值是原来值的256倍

    开发环境(蓝色粗体字为特别注意内容) 1,开发板:89C52RC. 2,开发环境:Keil uv5 在51单片机的KEIL程序中,使用printf("Voltage0:%d\r\n" ...

  3. C52单片机中断定时系统思路和实现代码

    最近拿到了单片机的课程设计题目,乍一看还挺简单的,就是一个简单的电子时钟,想都没想就直接把我arduinod的DS1302时钟模块拿来直接就做出来了,好家伙这两天仔细读了题目才发现直接指出了不能用DS ...

  4. 电赛校赛-三相逆变电源设计(单片机部分--C52仿真测频+串口发送机与串口接收机)

    写在前面 承接前文的模拟部分,这次开始写下单片机部分的仿真程序设计,本文介绍C52单片机的设置,后面将会介绍MSP430F249的具体配置. 题目 基础部分 搭建 DC-AC 电路以及检测电路. 调整 ...

  5. C51单片机与C52单片机内部的资源区别

    C52单片机可以理解为是C51单片机的增强版 • 两个方面有差异,存储空间和定时器计数器方面有区别○ C52单片机的内部ROM为8KB:C51单片机的内部ROM为4KB○ C52单片机的内部RAM为2 ...

  6. 利用c51进行数模转换并在液晶屏上显示_51单片机汇编语言实验(五)-----A/D 0809模数转换和DA0832数模转换实验(附参考代码及注释)...

    本系列共6篇文章,本文作为本系列的第五篇文章,介绍实验五 :A/D 0809模数转换和DA0832数模转换实验,本系列文章基于Dais-52PRO实验箱. 本系列文章链接: ------------- ...

  7. 8051(c51)单片机从汇编到C语言,从Boot到应用实践教程

    8051(c51)单片机从汇编到C语言,从Boot到应用实践教程 作者 将狼才鲸 创建日期 2022-09-29 本仓库相关网址: CSDN文章地址 Gitee工程和源码地址 相关仓库: 嵌入式整体介 ...

  8. 51单片机多任务操作系统的原理与实现

    写在前面的话:这篇文章值得看十遍.分享一下 51单片机多任务操作系统的原理与实现 -- 一个超轻量级的操作系统 前言 想了很久,要不要写这篇文章?最后觉得对操作系统感兴趣的人还是很多,写吧.我不一定能 ...

  9. android单片机wifi通信原理,基于单片机计算机之间无线通信实现.doc

    基于单片机计算机之间无线通信实现 课 程 设 计 报 告 学 院: 专业名称: 学生姓名: 指导教师: 时 间: TOC \o "1-3" \h \u 课程设计任务书 题目:基于单 ...

最新文章

  1. 关于final局部变量引用的研究
  2. vector基础操作
  3. python汉诺塔问题_Python汉诺塔问题
  4. PS提示错误1解决办法
  5. 随机森林降维matlab代码,随机森林代码实现问题
  6. java 内部类 返回值_Java学习笔记:形参和返回值、内部类、常用API
  7. 《码出高效:Java 开发手册》“码” 出高效的同时编写出高质量的代“码”。
  8. FoxitReader3.0注册码和foxit pdf creator key foxit pdf editor v2.0 key
  9. Qt 6安装(qt6 测试在win7运行崩溃,不再支持win7)
  10. 对 torch 中 dim 的总结和理解
  11. Linux文件比较工具
  12. Error 0x80240017: Failed to execute MSU package.
  13. Tomcat详细使用步骤
  14. 我的2013——学习、工作与生活
  15. rabbitmq reply-code=404, reply-text=NOT_FOUND
  16. 浏览器的储存方式有哪些
  17. Linear Algebra 线性代数
  18. Servlet 和Session的关系
  19. ASP.NET Zero 11.1.0
  20. 李炎恢jquery学习笔记

热门文章

  1. 框架运行错误:Ljava/lang/String;Ljava/lang/String;
  2. Android数组适配器ArrayAdapter用法(用于只有文字的列表显示)
  3. 冰河公开了其总结的一项重要的编程技能!
  4. 初次使用hammer.js做卡片滑动效果
  5. smali代码结构解析
  6. 学什么程序语言工资高
  7. Web 1.0、Web 2.0 和 Web 3.0 之间的比较
  8. Python连接mysql,插入数据时不报错,但是没有插入进去
  9. OpenCV入门基础学习
  10. Windows服务没有及时响应启动或控制请求