学习笔记——串口通信的基本原理与应用

一、任务简述

在CT107D单片机上,利用51单片机的串行接口与上位机建立传输信道进行数据的收发。采用8位的URAT模式,即模式一,波特率为9600BPS。数据发送采用查询方式,数据接收采用中断方式。系统上电初始化后,单片机向上位机发送两个字节:0x5a,0xa5,然后等待接收上位机的数据,接收到一个字节后,在该字节的基础上加1后返回给上位机。

二、信息介绍

串行接口是一个非常重要的外设,它是单片机与外部终端的数据传输渠道。不管是简单的51单片机,还是复杂的ARM处理器,串口通信都是必不可少的,有些芯片甚至有几个串行接口。

1、串口重要概念概述
<1> 串行通信是指数据一位接一位地顺序发送或接收。
<2> 串行通信有SPI、IIC、UART等多种,最常见最通用的是指UART。
<3> 串行通信的制式有:单工(只能接收或者发送)、半双工(可以接收和发送,但是不能同时进行)、全双工(可以同时进行接收和发送)三种。
<4> 计算机的串行通信接口是RS-232的标准接口,而单片机的UART接口则是TTL电平,两者的电气规范不一致,所以要完成两者之间的数据通信,就需要借助接口芯片在两者之间进行电平转换,常用的有MAX232芯片。
<5> 波特率:每秒钟传输的位数,9600波特率就是指每秒钟传输9600位。12M晶振或11.0592M晶振的情况下,要产生9600BPS的波特率。
注意:在51单片机中需要使用定时器1来产生波特率,因此,如果使用串口通信,则定时器1就不能做其他用途,在初始化串行接口模块的时候,除了要配置SCON寄存器之外,还有根据波特率参数设置定时器1的技术初值。
SCON:串行接口控制寄存器。如下图
设置为0x50,即0101 0000 在这里插入图片描述

三、参考代码

#include "reg52.h"

sfr AUXR = 0x8e;

unsigned char urdat;

void Initial_UART()
{
	TMOD = 0x20; //设置定时器1的工作模式。
	TH1 = 0xfd; //    TH1和TL1:设置波特率参数。
	TL1 = 0xfd;
	
	TR1 = 1;	//打开定时器1。
	AUXR = 0x00;
	
	SCON = 0x50;  //0101 0000,选择8位的URAT工作模式,允许接收数据。
	
	ES = 1;	//打开串口中断开关。
	EA = 1;	//打开总中断开关。
}

void Send_Byte(unsigned char dat)
{
	SBUF = dat; //    SBUF:串行通信数据的发送和接收缓冲器。
	while(TI == 0);	//发送完后跳出。
	TI = 0;
}

void Service_UART() interrupt 4
{
	if(RI == 1)
	{
		RI = 0;
		urdat = SBUF;
		Send_Byte(urdat + 1);
	}

}

void main()
{
	Initial_UART();
	Send_Byte(0x5a);
	Send_Byte(0xa5);
	while(1);
}


学习来源于:https://www.bilibili.com/video/BV1Bt41187hw?p=3

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
书名:《C/C++串口通信典型应用实例编程实践》(电子工业出版社.曹卫杉) PDF扫描版,全书共分10章,共316页。 内容介绍 本书从工程应用的角度出发,对目前流行的三种不同类型的C/C++语言(包括C++ Builder、Visual C++和LabWindows/CVI)开发串口通信(也称为串行通信)程序进行了阐述。 基础篇简单介绍了C/C++语言实现串口通信需要的基本知识;应用篇通过PC与PC、PC与单片机、PC与智能仪器、PC与PLC、PC与GSM短信模块、PC与远程I/O模块等典型应用实例,详细介绍了C/C++语言利用MSComm控件、API函数实现串口通信的程序设计方法。每个实例的设计任务同时采用C++ Builder、Visual C++和Labgrmdows/CVI实现。 本书内容丰富,结构清晰,文字叙述深入浅出,通俗易懂,以实践应用为主,突出程序设计,重在功能实现,有较强的实用性和可操作性。 本书可作为高等院校计算机应用、测控技术、机电一体化、自动化等专业的研究生、本科生以及计算机测控系统研发的工程技术人员等学习C/C++串口通信编程技术的参考书。 目录 基础篇   第1章 串口通信基础   1.1 串口通信基本概念   1.2 串口通信及其标准   1.3 串口通信调试   第2章 C/C++编程语言与串口通信   2.1 串行通信控件MSComm   2.2 API函数   2.3 线程   2.4 LabWindows/CVI串口通信函数 应用篇   第3章 PC与PC串口通信程序设计   3.1 设计说明   3.2 任务实现   第4章 PC与单片机串口通信程序设计   4.1 设计说明   4.2 任务实现   第5章 PC与智能仪器串口通信程序设计   5.1 设计说明   5.2 任务实现   第6章 PC与PLC串口通信程序设计   6.1 设计说明   6.2 任务实现   第7章 PC与GSM短信模块串口通信程序设计   7.1 设计说明   7.2 任务实现   第8章 PC与读卡器串口通信程序设计   8.1 设计说明   8.2 任务实现   第9章 PC与智能仪器构成的DCS程序设计   9.1 设计说明   9.2 任务实现   第10章 PC与远程I/O模块构成的DCS程序设计   参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Born_toward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值