C51单片机串口通信以及管脚配置

A_A03_002 51(STC)单片机程序串口烧录 阅读详情

1、芯片型号及说明

        在工作过程中产品需要和一块开发板通信,开发板用的芯片是STC15W408S,具体可以查询STC官网,附上​​​​​​STC15W408S规格书。

注:该芯片烧录要用到STC专用烧录器,专用的烧录软件stc-isp,可以在STC官网下载,附上STC官网。编译器需要用到keil C51版本,写好的代码生成hex文件用stc-isp打开烧录。烧录接口是RXD、TXD、-、+。注意串口烧录时芯片RXD接烧录器的TXD,TXD接烧录器的RXD。

1.1、芯片原理图

2、串口通信硬件连接

2.1、硬件连接

硬件连接部分很简单,该芯片和所需连接的产品需要共地,芯片发送端TXD接所连接产品的接收端RXD,芯片接收端RXD接所连接产品的发送端TXD即可。将芯片的RXD(P3.0)、TXD(P3.1)、GND引出,方便外接。

2.2、串口通信选用及注意事项

        在实际应用中,我用的其实是p3.6和p3.7接口,也就是手册中对应的RxD_2和 TxD_2,这是因为    RXD和TXD被 下载接口占用,若执意用该接口的话,需要用“冷启动”。相关说明附上 STC15W408S注意事项

        该芯片只有一组UART,但是可以映射到别的管脚上复用成别的串口(实际还是用的UART,并不是UART2、UART3)。(该部分我理解有些片面,不过我实验验证了,可能表达有问题)

注:“冷启动”方法是,接上RXD和TXD点下载,再接上正负电源。

3、代码示例

3.1串口初始化和管脚初始化

void SystemInit(void) 
{
		P0=0xff;                   //初始化将所有IO口全部置高
		P1=0xff;
		P2=0xff;
		P3=0xff;                            
		EA = 0;                    //使能       
//设置串口 
		ACC = P_SW1;
		ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
		ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
		P_SW1 = ACC;  
		#if (PARITYBIT == NONE_PARITY)
		    SCON = 0x50;                //8位可变波特率
		#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
		    SCON = 0xda;                //9位可变波特率,校验位初始为1
		#elif (PARITYBIT == SPACE_PARITY)
		    SCON = 0xd2;                //9位可变波特率,校验位初始为0
		#endif
		
		    AUXR = 0x40;                //定时器1为1T模式
		    TMOD = 0x20;                //定时器1为模式2(8位自动重载)
		    TL1 = (256 - (FOSC/32/BAUD));   //设置波特率重装值
		    TH1 = (256 - (FOSC/32/BAUD));
		    TR1 = 1;                    //定时器1开始工作
		    ES = 1;                     //使能串口中断
}

        首先使能p0、p1、p2、p3。

        可通过配置管脚之间切换的寄存器AUXR1(P_SW1)来选择不同的管脚作为 串口输出脚,根据数据手册,S1_S1 =0;S1_S0=1时,串口1在p3.6和p3.7上输出了。

        然后设置波特率,在初始化函数前定义了:

        #define NONE_PARITY     0       //无校验
        #define ODD_PARITY      1       //奇校验
        #define EVEN_PARITY     2       //偶校验     

        打开定时器,使能串口中断。    

3.2 串口收发

unsigned char aaa;
void Uart() interrupt 4 using 1
{
    if (RI)
    {
			aaa = SBUF;               //将接收到的数据存到aaa中
			SBUF = aaa+1;             //把aaa+1放到发送数据寄存器中并发送
			while(TI==0);	          
			TI=0;                     //手动置0
            RI = 0;                  //清除RI位
    }
}

        TI:发送中断请求标志位,在方式0,当串口发送数据第8位结束时,由内部硬件自动置位,即T1=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位。

        RI:接收中断请求标志位。在方式0,当串口发送数据第8位结束时,由内部硬件自动置位,即RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中,则在停止位的中间时刻由内部硬件置位,必须用软件复位。

        SBUF为串口数据缓存寄存器,物理上是两个独立的寄存器,但是占用相同的地址.写操作时,写入的是发送寄存器.读操作时,读取的是接收寄存器。

单片机会自动将TI/RI置1,只需将数据放入或读取即可,操作完手动置0。

注:串口收发到此已经完成了,注意到该型号单片机还支持485下载,就动手配置了一下。

4、管脚的配置

4.1 配置介绍

以p0.0口为例,由P0M0和P0M1寄存器控制模式,p0.0~p0.7由8位数据进行位操作,即p0.0对应最低位。

4.2、代码示例

			P0M0 = 0x01;
            P0M1 = 0x00;              //推挽输出
            P0 |= 0X01;               //p0.0 = 1
			P0 &= 0XFE;               //p0.0 = 0
           //不改变其他位,只对P0的p0.0进行操作

5、RS485通信

5.1、原理图

注:该芯片是5V供电,485芯片类型选的也是5V供电。

p0.0是使能脚,高发低收。

5.2、代码示例

//主函数中先配置 P0 &= 0XFE; 即485使能接收            
void Uart() interrupt 4 using 1
{
	unsigned char aaa;
    if (RI)
    {
			aaa = SBUF;               
			P0 |= 0X01;             //485使能发送
			SBUF = aaa+1;
			while(TI==0);	          
			TI=0;                   //清除TI位
			P0 &= 0XFE;             //发送完立即使能接收
            RI = 0;                 //清除RI位
    }
}

注:相当于有俩个开关,必须俩个开关同时打开时为发送,同时关闭时是接收,一开一关不起作用。即485使能接收后,接收到数据RI=1(硬件自动置1,只需将数据放入SBUF),才能收到数据;即485使能发送后,接收到数据TI=1(硬件自动置1,只需将数据放入SBUF),才能发送数据。发送完接收到都需要置0中断标志位。

51单片机(80951系列)引脚功能说明 全双工异步通信通信数据线。全双工:就是两个单片机之间串行数据可以同时双向传输异步通信:就是收发双方使用各自的时钟控制数据收发过程,不需要同步时钟信号串行口通信:将一个字节的8位数据低位在前,高位在后一位一位地串行接收或发送RXD(P3.0):数据接收引脚TXD(P3.1):数据发送引脚来实现SCON:串行口控制寄存器,字节地址(98H),可位寻址PCON:电源控制寄存器(87H),不可位寻址。 阅读详情

相关推荐

51单片机之——串口通信(含实现部分)

本篇文章将实现两个部分,第一部分为实现单片机通过串口向电脑发送数据;第二部分为实现电脑通过串口控制单片机LED灯

欢迎一起交流问题! 3万+

51单片机--串口通信(详细教程)

希望对大家能有所帮助,欢迎大家指教。51单片机串口通信是指通过单片机内部硬件自带的串口模块实现的通信方式。串口通信是一种全双工,异步通信方式,它通过发送和接收数据来使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,单片机不仅可以使用串口来实现通信,还可以通过IO口模拟实现多种其他通信,比如SPI,IIC等。USB转串口模块1.注意硬件,连接发送端TXD和接收端RXD要交叉连接,通信波特率配置要相同;

Deepembed 3万+

51 单片机 + ESP8266 实现互联网远程控制小灯

1、准备工作 1.1、软件 keil 4 串口调试工具 1.2、硬件 STC89C516(已经停产的芯片,第一次买学习板,商家真黑,勉强用吧) 跳线若干 ESP8266 我这里使用的 普中51-单核-A4学习板,硬件电路已经基本都连接完了,而且它比较好的一点就是提供了 ttl 转 usb的接口,可以用于配置 ESP8266,而且还提供了 3.3V & 5V 电源外接(注意: 烧录程序的时候还是不要外部供电,否则程序烧录不进去) 还是很贴心的,淘宝上价格 60 多块钱吧,作为我这种从...

Dreamcatcher_yxc的博客 1万+

51单片机编程应用(C语言):串口通信

串口,全称为串行接口(Serial Port),是一种计算机通信接口,主要用于连接计算机和其他外部设备,如键盘、鼠标、打印机等。串口通过串行通信的方式工作,这意味着数据是以位(bit)为单位依次发送的。这种通信方式的一个显著特点是可以使用简单的双绞线实现双向通信,这在成本降低方面非常有用,尤其适合于长距离通信。尽管串口的速度相对较慢,但它提供了可靠的数据传输和低成本的解决方案,因此在许多应用中仍然被广泛使用。串口通信遵循特定的通信协议,这些协议定义了数据位的位数、波特率、校验位和停止位等参数。

weixin_64484421的博客 2686

51单片机(STC89C52RC版本)学习笔记(更新中...)

B站江协科技《51单片机入门教程-2020版 程序全程纯手打 从零开始入门》课程学习笔记,包含LED,独立按键,数码管,LCD1602,矩阵键盘,定时器,串口通信,蜂鸣器等模块。

weixin_43364551的博客 2569

单片机与上位机通过串口通信

思路 (1)引脚配置–PA9 (Tx) ----PA10 (Rx) (2)串口配置 (数据协议:起始位–数据位–奇偶校验–停止位; 波特率) (3)查看功能是否正常----回显函数 将下位机接收的数据发送到上位机(串口助手)显示 寄存器 //引脚配置 串口配置 void usart_config(u32 baud)//形参为波特率 { u32 div_m,div_f;//div_...

include1_的博客 3910

C51单片机用esp8266点亮led灯(含源码)

大家好,我是一个单片机新手,也是一个兴趣者,我以前想用c51单片机用esp8266模块的热点控制led小灯的,实验,可是网上的资料很少,所以今天来给新生,老手也好,想出一个教程,希望给大家一点点帮助。 准备材料: 1.c51单片机开发板(最小系统板也可以,可是要自己准备led灯和小电阻,分好阳极和阴极) 2.esp8266模块(测试待一会儿讲) 3.ttl转usb线(开发板不需要ttl转换模块) 注意:以下一样接线,esp才能正常工作。 1.esp8266的管脚和接线: TXD-接单片机或ttl模块的RX

qq_32171385的博客 6629

单片机:串口通信(内含硬件解析+软件编程)

单片机:串口通信

wo12369874的博客 739

51单片机串口通信

串口通信(serial communication)是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。接口标准:常用RS-232和RS-485RS-232C有一种9针的非标准连接器口,简称DB9。串口通信使用的大多都是DB9接口。在串口通信中,通常我们只使用2、3、5三个管脚,即TXD,RXD,SGND。

cai88453626的博客 4039

C51单片机串口通信C程序

C51单片机串口通信C程序,实现PC与单片机的通信,本例主要实现将PC机发给单片机的数据再发回给PC机,可以借助串口调试工具进行调试

PLSQL 14.0.6 下载使用教程

众所周知,PLSQL 只是一个oracle第三方开发测试工具,它依赖oracle 客户端搭配使用,但是oracle 客户端有2G,相当庞大,不建议安装。所以我们如果下载安装好PLSQL,再下载好轻量级的支持远程链接的oracle客户端,这样搭配使用可以的话就最好了,答案是可以的。 第一步: PLSQL 下载与安装 PLSQL 14.0.6 下载地址 : https://www.allroundautomations.com/registered-plsqldev/ 下载下来,除了安装路径更改一下,

qq976511508的博客 2134

51单片机串口使用

今天将为大家讲解51单片机的串口原理及代码编写。串口在debug中有非常重要的重要,希望大家都能够将他掌握。

m0_49476241的博客 6185

强化学习 reward 曲线可视化:从基础绘制到顶刊级对比分析

本文详细介绍了强化学习reward曲线的可视化方法,从基础绘制到顶刊级对比分析。通过matplotlib和seaborn的实战示例,展示了如何优化曲线图的视觉效果,包括多实验对比、置信区间添加和分面图应用。文章还分享了顶刊级图表的进阶技巧,如字体排版、颜色选择和关键标注,帮助研究者提升论文图表质量。

weixin_29096377的博客 270

开发知识点-普中51-单核-A2单片机

普中51 - 普中51功能与使用 介绍功能模块CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)通常 汉字有 16*16 个像素点P2 51单片机介绍(一)基础第二功能P3 51单片机介绍(二)P4 C语言基础添加 stc 芯片库keil5新建c51工程 并配...

weixin_42094308的博客 1550

ESP32S3与ILI9341 LCD屏LVGL移植实战:从零构建嵌入式GUI界面

本文详细介绍了如何在ESP32S3平台上移植LVGL图形库并驱动ILI9341 LCD屏幕,从硬件选型、开发环境配置到显示驱动实现和内存优化。通过实战案例讲解移植过程中的关键步骤和常见问题解决方案,帮助开发者快速构建嵌入式GUI界面。

h9j8k7l6m5n的博客 1096

SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南)

本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。

weixin_28710999的博客 398

【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 4 章 51 单片机介绍

本章将向大家介绍 51 单片机, 通过本章的学习, 让大家对 51 单片机有一个深入的了解, 为后面 51 单片机的学习做好铺垫。

普中科技的博客 1564

如何在Proteus中模拟Arduino

进一步的Proteus可用于设计任何与Arduino相关的项目,它将在进入硬件级别之前提供更好的理解。由于其广泛的库集合,它是Arduino社区中最受欢迎的工具之一,不仅如此,Proteus还可以为Arduino项目设计定制的PCB。就像上一步一样,现在搜索Arduino UNO板,选择Arduino板并单击“确定”以添加到项目中,或者双击以在Proteus项目中添加Arduino。一旦在Proteus中成功创建了一个新项目,现在我们将设计一个用于Proteus中闪烁LED的Arduino电路。

acktomas的博客 1万+

51单片机之串口通信(一)

一.基础知识1.串行通信和并行通信:目前用的比较多的是串行通信。串行通信优点是连接简单,传输距离远;缺点是传输速度慢。 2.串行通信:分为同步通信和异步通信;异步通信是指发送和接收设备利用各自的时钟控制数据的发送和接收。 3.串行通信的传输方向:单工,半双工,全双工。 4.波特率:每秒钟传输2进制代码的位数,如1个字节为10位,每秒传输240个字节,则波特率为10*240=2400bps,单位

搭呀搭积木 1142

七步设计高频变压器

七步设计高频变压器

m0_71394959的博客 5400

手把手教你学Simulink--基础电机控制场景实例:基于Simulink的无刷直流电机六步换相仿真

摘要:本文详细介绍了基于Simulink的无刷直流电机(BLDC)六步换相仿真方法。文章首先阐述了BLDC六步换相控制的原理,包括霍尔传感器定位、六步换相逻辑和方波电流驱动三大支柱。然后通过电动工具(角磨机)应用场景,展示了如何在Simulink中搭建完整的六步换相系统:从主电路构建、霍尔信号生成、Stateflow换相逻辑实现到开环电压控制。仿真结果显示该系统具有低成本优势(仅需霍尔传感器),但存在±20%转矩脉动。文章还提供了核心代码实现,包括霍尔信号生成、六步换相状态机和转矩分析脚本,并对比了六步换相

MHD0815的博客 148

Keil5 C语言实战:单片机管脚控制与LED交互

本文详细介绍了Keil5环境下C语言单片机开发实战,从环境搭建、管脚控制原理到LED与按键的交互编程。通过具体代码示例讲解寄存器操作、延时函数实现及按键消抖处理,并提供完整的项目实战和调试技巧,帮助初学者快速掌握单片机开发。

root9的博客 158

从0到1用OpenClaw打造酒店收益管理系统:数据整合→AI策略迭代全链路落地实战

本文基于三亚某连锁海景酒店真实项目落地经验编写,系统上线3个月,酒店平均入住率从62%提升至80%,RevPAR(平均可售房收入)提升26%,淡季空置率降低46%,完全覆盖中小酒店全场景收益管理需求。本文配套OpenClaw全量Skill代码、工作流配置文件,可直接复用落地。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 491

STC12C5A60S2单片机双串口通信,互相发送

STC12C5A60S2单片机双串口通信,互相发送 STC12C5A60S2单片机拥有两个全双工串行通信接口, 串口1的功能及操作与传统51单片机串行相同; 特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, 串口1可以使用定时器1作为波特率发生器,也可以使用独立波特率发生器作为波特率发生器; 而串口2只能使用独立波特率发生器作为波特率发生器。 /*----------------------------------------------- 名称:STC12C5A60S2双串口通信,单片机

weixin_44180133的博客 4569

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

51单片机——定时器中断

本文介绍了51单片机定时器中断的原理与应用。主要内容包括:1. 定时器基本概念,包括振荡周期、机器周期等时序知识;2. 定时器工作原理,作为16位加1计数器实现定时/计数功能;3. 定时器结构,由TMOD和TCON寄存器控制工作模式;4. 四种工作方式(0-3)的特点及初值计算方法;5. 实验示例展示如何使用定时器0实现1秒LED闪烁,详细说明了初始化配置、中断服务函数编写等关键步骤。文章通过硬件原理与软件实现相结合的方式,系统地讲解了单片机定时器中断的应用方法。

m0_74012211的博客 1627

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

51单片机虽然不过时,为什么我还是推荐STM32

寄存器vs库函数我的观点是:当你debug的时候寄存器很重要,当你需要理解芯片工作细节的时候寄存器很重要,当你开发的时候寄存器不重要。刚开始接触STM32时还在学校,有很多时间,当时就用寄存器将提供的所有例程,自己重新对照着DataSheet敲一次,根据自己的想法做一些改变,C语言、编程思想、STM32都有了较大的进步。现在在单位也在做STM32的编程,不过都不用寄存器了,但是感觉之前敲的例程还是对现在的工作有着非常大的帮助,觉得吧,还是得多动手,基础的东西还是得自己去完整的过一遍。1.熟悉编译下载环境;

hxsln11的博客 754
上一篇: STM32单片机关于引脚复用和重定义问题
下一篇: 单片机——ADC采样
nolate_chen
博客等级 码龄3年 1万+粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值