STC15F2K60S2单片机的串口通信程序及相关知识

2023-11-01

一、STC15F2K60S2单片机简介

    中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的,且与MCS-51兼容的STC系列单片机。它完全兼容51单片机,是新一代增强型单片机,速度快、抗干扰性强、加密性强,带ADC/PWM,超低功耗,可以远程升级,内部有MAX810专用复位电路,价格低廉。深圳宏晶科技有限公司根据市场需求,在STC89C51、STC89C52的基础上,先后推出STC10、STC11、STC12、STC15系列单片机。

    其中,STC15F2K60S2单片机是一种增强型的8051单片机,是新型的FLASH单片机,与传统的8051系列单片机兼容,在片内资源、操作性能和运行速度上做了很大的的改进。IAP15F2K60S2是可以把单片机芯片硬件配置为具有仿真功能的单片机,与Keil C51编译器配合使用,进行仿真实验。

二、STC15F2K60S2单片机串口通信的相关知识

    STC15F2K60S2单片机内部有两个可编程的全双工串行通信接口。每个串行口由一个数据缓存器、一个移位寄存器、一个串行控制器和一个波特率发生器组成。每个串行口的数据缓冲器在物理上分为两个独立的发送、接收缓冲器,可以同时发送和接收数据。发送缓存器只可以写入数据,接收缓存器只能读出数据,两个缓冲器共用一个地址。串口1的数据缓冲器为SBUF,地址为99H,串口2的数据缓冲器为S2BUF,地址为9BH。与串行口相关的特殊寄存器见下表。

与串行口相关的特殊寄存器

寄存器 功能 地址 位地址 复位值
PCON 电源控制寄存器 87H SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 00110000
AUXR 辅助寄存器 8EH T0x12 T1x2 UART_M0x6 T2R T2C/T T2x12 EXTRAM S1ST2 00000001
CLK-DIV 时钟分频寄存器 97H MCKO-S1 MCKO-S0 ADRJ Tx-Rx Tx2-Rx2 CLKS2 CLKS1 CLKS0 00000000
SCON 串口控制寄存器 98H SM0 SM1 SM2 REN TB8 RB8 TI RI 00000000
SBUF 串口数据寄存器 99H 00000000
S2CON 串口2控制寄存器 9AH S2M0 - S2M2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000
S2BUF 串口2数据缓冲区 9BH 00000000
AUXR1 辅助寄存器 A2H S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0 0 DPS 01000000
IE 中断控制寄存器 A8H EA ELVD EADC ES ET1 EX1 ET0 EX0 00000000
IE2 中断控制寄存器2 AFH - - - - - ET2 ESPI ES2 xxxxx000
IP2 中断优先级控制寄存器2 B5H - - - - - - PSPI PS2 xxxxxx00
IP 中断优先级控制寄存器 B8H PPCA PLVF PADC PS PT1 PX1 PT0 PX0 00000000
P_SW2 外围功能切换寄存器 BBH - - - - - S4_S S3_S S2_S xxxxx000

(1)寄存PCON中的SMOD位为波特率倍增系数选择位,SMOD为1时,波特率加倍。

(2)辅助寄存器AUXR中的UART_M0x6用于设置串口1在方式0时数据传输的波特率,置1时波特率为fsys/2,置0时波特率为fsys/12。辅助寄存器AUXR中的S1ST2位用于选择串口1在方式1、3时的波特率发生器,置1时选择T2为波特率发生器,置0时选择T1为波特率发生器。

(3)串口控制寄存器SCON的功能和用法与一般的8051单片机类似,不同的是其中的SM0/FE位可以用作帧错误检测。

(4)数据寄存器SBUF和S2BUF分别用于串口1和串口2的数据缓冲器。

(5)寄存器S2CON用于设置串口2的工作方式,其余用法与SCON相同。

(6)寄存器IE、IE2中的PS、PS2位分别用于控制串口1和串口2的中断允许与禁止。置1为允许,置0为禁止。

(7)寄存器IP、IP2中的PS、PS2分别用于控制串口1和串口2的中断优先级,置1为高优先级,置0为低优先级。

(8)时钟分频寄存器CLK_DIV中的Tx_Rx用于设置串口1的中继广播方式,置1为中继广播方式,置0为正常工作方式。

(9)辅助寄存器AUXR1的S1_S1、S1_S0位用于串口1的硬件引脚切换,具体情况如下表。

串口1的硬件引脚切换

S1_S1 S1_S0 TXD RXD
0 0 P3^1 P3^0
0 1 P3^7 P3^6
1 0 P1^7 P1^6
1 1 无效

(10)寄存器P2_SW2的S2_S位用于串口2的硬件引脚切换,具体情况如下表。

串口2的硬件引脚切换

S2_S TXD2 RXD2
0 P1^1 P1^0
1 P4^7 P4^6

    另外,对于波特率,还有一个很重要的寄存器,即电源控制寄存器(PCON),电源管理寄存器(PCON)也在特殊功能寄存器中,字节地址为87H,不可位寻址,复位值0x00。

    PD:掉电模式设定位。PD=0时,单片机处于正常工作状态;PD=1时,单片机进入掉电(Power Down)模式,可由外部中断低电平触发或由下降沿触发或者硬件复位模式唤醒,进入掉电模式后,外部晶振停振,CPU、定时器、串行口全部停止工作,只有外部中断继续工作。

    IDL:空闲模式设定位。IDL=0时,单片机处于正常工作模式;IDL=1时,单片机进入空闲(IDLE)模式,除CPU不工作外,其余的部件继续工作,在空闲模式下可由任何一个中断或硬件复位唤醒。

三、串口通信程序

注:以下程序在一定程度上已调试成功,但是因为有很多功能没有实现完,所以后期可能需要修改,后期会进行更新。

1. UART头文件

#ifndef _UART_H_
#define _UART_H_

#include <STC15F2K60S2.H>

#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
	
extern bit pageflag;	//返回页面ID标志
extern uchar pageID;	//页面ID号	
extern uchar pagenum;	//页面结束数据检测,满3代表结束


void write_COM(uchar COM);
void write_txt(char *s);	 
void write_END(void);
void UART_Init();

#endif

2. UART程序

#include "UART.h"

/*********串口送数据**********/
void write_COM(uchar COM)
{
 	SBUF=COM;			
  while(!TI);
  TI=0;
}
/*********发送文本串**********/
void write_txt(char *s)	  
{
	int i=0;
	while(s[i]!=0)
	{
		write_COM(s[i]);
		i++;
 	}
}
/*********发送结束符**********/
void write_END(void)   
{
	 write_COM(0xFF);
	 write_COM(0xFF);
	 write_COM(0xFF);
}
/*********串口初始化**********/
void UART_Init()
{		
		//串口1	初始化
    SCON = 0x50;   
    AUXR &= 0xBE;  
    AUXR |= 0x00;    
    TMOD &= 0x0F;	
    TMOD |= 0x20;           
    TH1 = 0xfd;                 
    TL1 = 0xfd;                 
    TR1 = 1;                         //定时器1启动
    ES = 1;                         //开放串口中断
    EA = 1;	

//		//串口2	初始化
//    S2CON = 0x10;  
//    T2L = 0xE8;        
//    T2H = 0xFF;      
//    AUXR &= 0xE3;  
//    AUXR |= 0x10;   
//    IE2 &= 0xFE;        
//    IE2 |= 0x01;          	
	                         
}

/************UART1 中断服务程序*******************/
void Uart1(void) interrupt 4 
{
	uchar dataflag=0;//返回的十六进制数据的第一位

  if(RI)                           //如果是接收中断
  {
    RI=0;
    dataflag = SBUF;    //将接收缓冲区的数据保存到num1变量中
    /***********页面接收**********/			
    if(dataflag==0x66) pageflag = 1;
    if(pageflag==1)
    {
	pageID = dataflag;//接收页面ID号
	if(dataflag==0xff)	//开始接收结束符
	{
	    pagenum++;
	    if(pagenum==3) pageflag = 0;//接收3个结束符,数据接收完成				
	}
    }	
		
   }			
    else                           //如果是发送中断,将TI清0
        TI = 0;
}

                
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STC15F2K60S2单片机的串口通信程序及相关知识 的相关文章

  • 关于ESP8266自动下载和CH340的几件事

    最近在玩ESP8266 做了些东西 比如考研倒计时器 网络闹钟 网络灯 用手机控制亮度 气象站等等 ESP8266本身挺简单的 倒是这个自动下载电路 我还是第一次玩 以前玩51也用过串口下载 都是自己冷启动 玩STM32用的ST LINK
  • SPI协议代码

    软件模拟SPI程序代码 文章目录 SPI协议简介 SPI接口介绍 SPI数据传输方向 SPI传输模式 通过两个单片机模拟SPI来加深理解 硬件连接方式 SPI模式 程序思路 主机C代码 波形 从机C代码 波形 概述 通过两个MCU STM3
  • 基于FPGA的串口通讯设计与实现

    繁體 基于FPGA的串口通讯设计与实现 日期 2012 03 26 来源 作者 字体 大 中 小 随着多微机系统的应用和微机网络的发展 通信功能越来起重要 串行通信是在一根传输线上一位一位传送信息 这根线既作数据线又作联络线 串行通信作为一
  • 基于stm32f1的lora开发基础通信实验

    一 实验条件 环境 win10专业版 keil uv5 串口调试助手 stm32f1系列单片机 as32lora模块 这里是泽耀科技的as32 ttl 100 二 实现功能 1 使用定时器将底层数据通过as32每隔1秒向上层串口发送一段数据
  • Windows使用串口API函数串口编程

    Windows使用串口API函数串口编程 前言 1 打开串口 1 1 参数详解 1 2 代码示例 1 2 1 获取串口号 1 2 2 打开串口 同步通信 1 2 3 打开串口 异步通信 2 关闭串口 3 配置串口 3 1 配置输入输出缓冲区
  • ESP-NOW无线通信

    本文由铁熊与默联合创作 在学习 Arduino 开发的过程中 无线通讯是我们学习道路上一道必过的坎 无线通讯摆脱了线材的束缚 使用更加灵活且通讯距离根据不同无线模块可达几十米甚至是数公里 常见的无线通讯方式有蓝牙 WiFi LoRa NB
  • 用虚拟串口进行串口调试

    由于现在的笔记本电脑一般不带有串口 再进行串口调试时 可以用虚拟串口代替 虚拟串口下载链接 虚拟串口 Win7 下载 串口调试助手下载链接 串口调试助手 VS2010串口程序 使用的unicode库 纯API 不利用Mscomm控件 下载链
  • 485通讯与MODBUS的区别与联系

    最近做智能检测的项目 设备 串口之间的通讯比较多 一会儿485 一会儿modbus RTU 有点晕了 这里重新梳理一下RS485 485通讯协议 ModBus通讯协议 Modbus Rtu通讯这几个点的联系和区别 先说RS485吧 RS48
  • C#串口通讯中 16进制与字符串、字节数组之间的转换

    1 c 中如何将十进制数的字符串转化成十六进制数的字符串 十进制转二进制 Console WriteLine 十进制166的二进制表示 Convert ToString 166 2 十进制转八进制 Console WriteLine 十进制
  • Arduino基础篇(五)-- 如何快速上手串口通信(Serial)

    文章目录 1 基础篇 1 1 通信基础 2 串口通信 2 1 Arduino串口的硬件结构 2 2 串口工作原理 2 3 硬件串口通信 2 4 软件模拟串口通信 1 基础篇 1 1 通信基础 1 并行通信 通过输入 输出端口在 Arduin
  • 九.ARM裸机学习之串口通信详解1(串口通信接口及原理框图详解)

    一 串口通信的基本概念及原理理解 2017 11 12 22 52 1 同步通信和异步通信 异步通信 指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程 为使双方的收发协调 要求发送和接收设备的时钟尽可能一致 即发送方和接收方没有
  • 串口收发最高位为0

    串口收发最高位为0 昨天在现场 读取电表度数的时候发现一个问题 读取字节最高位不管多少全部为0 搞的我相当郁闷 最后没有办法 只好人工给他置1 今天到了公司打开 linux 程序设计 翻到终端这一章 152页 赫然写着几个大字 ISTRIP
  • 51单片机之串口通讯应用实例(逻辑分析仪调试)

    硬件 STC89C52RC 开发工具 Keil uVision4 前言 8051是一款很经典的 历史悠久的单片机 作为一款入门级的单片机8051受到很多初学者的欢迎 89c52是8051系列的成员之一 拥有8K字节程序存储空间 512字节随
  • DS18B20温度传感器模块介绍及与USART HMI通信

    一 DS18B20温度传感器 DS18B20是常用的数字温度传感器 其输出的是数字信号 具有体积小 硬件开销低 抗干扰能力强 精度高的特点 DS18B20数字温度传感器接线方便 封装成后可应用于多种场合 如管道式 螺纹式 磁铁吸附式 不锈钢
  • 基于STM32F103RB的模拟液位检测告警系统(已实现)

    这次先看一下老朋友STM32 有关Zigbee的内容 Z stack协议栈和基于Zigbee的环境温湿度 烟雾传感器的环境监测系统 等有时间再更 基于STM32的模拟液位检测告警系统 记得好像是某一届蓝桥杯省赛题 基于STM32告警系统介绍
  • Python2.7网络通信socket和串口通信serial多线程同时实现

    Python2 7下多线程网络通信socket和串口通信serial同时进行 最近在写网络通信TCP IP读取数据和串口通信读取发送数据 之前写了单线程的然后这次尝试多线程实现 当然我是写的网络通信的服务端 话不多说贴上代码 coding
  • 【嵌入式基础】串口通信

    目录 1 前言 2 基本概念 2 1 波特率 2 2 起始位 2 3 数据位 2 4 校验位 2 5 停止位 2 6 空闲位 3 工作模式 3 1 单工模式 3 2 半双工模式 3 3 全双工模式 4 同步通信和异步通信 4 1 同步通信
  • Unity缺少System.IO.Ports

    问题 我需要使用串口相关的类库 但是引用不到 怎么解决的 PlayerSetting 界面把 Api Compatibility Level 切换为 NET 4 x 然后就好了
  • OUT指令时,就进入了I/O端口读写周期

    1 译码电路的输入信号 每当CPU执行IN或者OUT指令时 就进入了I O端口读写周期 此时首先是端口地址有效 然后是I O读写控制信号 IOR和 IOW有效 把对端口地址译码而产生的译码信号同 IOR和 IOW结合起来一同控制对I O端口
  • 51单片机的串口通迅

    通信的基本方式分为并行通信和串行通信 并行通信 数据的各位同时在多根数据线上发送或接收 特点 控制简单 传输速度快 由于输线较多 长距离传送时成本高且接收方的各位同时接收存在困难 串行通信 使用一条数据线 将数据一位一位的依次传输 每一位数

随机推荐

  • 计算机毕业设计-基于SSM的音乐播放器管理系统

    项目摘要 随着社会的发展 计算机的优势和普及使得音乐播放器管理系统的开发成为必需 音乐播放器管理系统主要是借助计算机 通过对首页 音乐推荐 付费音乐 论坛信息 个人中心 后台管理等信息进行管理 减少管理员的工作 同时也方便广大用户对个人所需
  • openGL增强表面细节--高度贴图

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 高度贴图原理 二 代码实现 1 c 主程序 2 着色器程序 运行效果 源码下载 前言 现在我们扩展法线贴图的概念 从纹理图像用于扰动法向量到扰乱顶点位置本身 实 际上
  • 深度学习环境配置5——windows下的torch-cpu=1.2.0环境配置

    深度学习环境配置5 windows下的torch cpu 1 2 0环境配置 注意事项 一 2021 10 8更新 学习前言 各个版本pytorch的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anaconda的下载 2 A
  • SystemServer启动服务

    一 启动流程 SystemServer的在Android体系中所处的地位 SystemServer由Zygote fork生成的 进程名为system server 该进程承载着framework的核心服务 startSystemServe
  • 超强语义分割算法!基于语义流的快速而准确的场景解析

    论文地址 https arxiv org abs 2002 10120 代码地址 https github com donnyyou torchcv 该论文提出了一种有效且快速的场景解析方法 通常 提高场景解析或语义分割性能的常用方法是获得
  • C语言图形库——EasyX基本贴图

    在C语言的学习过程中 接触最多的就是黑乎乎的DOS窗口 这也是在消磨学习者的兴趣 学到最后可能还不知道C语言到底能做什么 难道就是输入输出数据吗 当然不是 C的用处很广泛 这里不做讨论 我们能不能用C语言做些好玩的东西 当然可以 我们可以做
  • 玩转oled屏(基于SPI协议)

    玩转OLED屏 一 简介 一 SPI协议简介 二 OLED简介 二 OLED滚动显示长字符 一 常用OLED滚屏命令 1 水平左 右移 2 垂直和水平移动 二 取字模 三 OLED屏滑动演示 三 OLED显示温湿度 总结 一 简介 一 SP
  • 爬虫漫游指南:加速乐__jsl_clearance破解

    爬虫漫游指南 JS破解之加速乐 本文会介绍加速乐cookie中的 jsl clearance的生成方式 纯粹技术讨论 如果侵害到任何人的利益 请联系本人邮箱yu haojia foxmail com 会立刻删除 如何识别加速乐 使用加速乐的
  • @RefreshScope工作原理

    本文主要从两个层次来分析 RefreshScope 1 加了 RefreshScope注解的bean是如何注入到IOC容器中的 2 触发 RefreshScope后IOC容器是如何工作的 注 本文不讨论 RefreshScope是如何触发的
  • Vue项目中使用Mapbox完成GIS可视化

    1 项目准备 首先准备好Vue项目 然后安装mapbox依赖 npm install save mapbox gl 项目结构 首先需要引用mapbox的css样式 虽然在index html里面直接引用cdn也有效果 但是不建议直接修改in
  • 计算机毕业论文选题

    今天给大家整理了关于计算机毕业设计选题 供大家参考 教学进度管理系统设计与实现 基于SSM的学科竞赛管理系统 办公管理系统设计与实现 库存管理系统设计与实现 人事管理系统设计与实现 财务管理系统设计与实现 基于jsp和ssm的客户关系管理系
  • 每天一个面试知识点Java(6)java中堆内存、栈内存、常量池详细讲解,学完就考同事

    Java程序是运行在JVM Java虚拟机 上的 因此Java的内存分配是在JVM中进行的 JVM是内存分配的基础和前提 Java程序的运行会涉及以下的内存区域 寄存器 JVM内部虚拟寄存器 存取速度非常快 程序不可控制 栈 存放基本类型的
  • Springboot框架整合jsp开发【干货满满】

    晚安独角兽 hello你好我是独角兽 很高兴你能来阅读 昵称是希望自己能不断精进 向着优秀程序员前行 博客来源于项目以及编程中遇到的问题总结 偶尔会有读书分享 我会陆续更新Java前端 后台 数据库 项目案例等相关知识点总结 感谢你的阅读和
  • verilog中的基本数据类型

    Verilog 最常用的 2 种数据类型就是线网 wire 与寄存器 reg 其余类型可以理解为这两种数据类型的扩展或辅助 一 线网 wire wire 类型表示硬件单元之间的物理连线 由其连接的器件输出端连续驱动 如果没有驱动元件连接到
  • 炫酷的登录界面--20230907

    Login Form with floating placeholder and light button HTML div class login box h2 Login h2 div
  • docker安装ElasticSearch8.x和Kibana8.x

    安装es和kibana 1 访问镜像官网 https hub docker com 搜索elasticsearch kibana进行查找 选择合适的版本 这里选择 elasticsearch 8 8 0和 kibana 8 8 0 2 下载
  • 编写程序,由键盘输入三个整数分别存入变量num1,num2,num3,对他们进行排序,并且从小到大输出。

    var num1 prompt 请输入数字1 var num2 prompt 请输入数字2 var num3 prompt 请输入数字3 prompt 返回的值类型是string 用 将num先转换成number再比较 if num1 lt
  • GitHub上README.md文章的上传图片和图片大小尺寸

    看到别人的仓库里的readme md有图文介绍 自己试了一下 发现并不成功 学习了一下 主要有以下几个步骤 1 上传图片到github 并且要Commit changes 2 返回仓库目录打开刚才上传的图片 复制此时的网页地址栏连接 例如这
  • CAN15765和1939协议

    1 15765协议介绍 简单的来说 15765协议指的是 基于CAN2 0A B 协议 也可以叫做ISO11898协议 链路层 硬件接口的 应用层 通讯协议 它用于实现通用的车辆诊断服务 ISO11898协议参考下图 参考搜索到的 CAN总
  • STC15F2K60S2单片机的串口通信程序及相关知识

    一 STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的 且与MCS 51兼容的STC系列单片机 它完全兼容51单片机 是新一代增强型单片机 速度快 抗干扰性强 加密性强 带ADC