0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STC15F2K60S2串口通信程序及相关知识简析

冬至子 来源:清晨的小树洞 作者:清晨。 2023-11-08 16:16 次阅读
一、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。

(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.jpg

另外,对于波特率,还有一个很重要的寄存器,即电源控制寄存器(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
  1. 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;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓冲器
    +关注

    关注

    6

    文章

    1930

    浏览量

    45609
  • 移位寄存器
    +关注

    关注

    3

    文章

    259

    浏览量

    22321
  • 串口通信
    +关注

    关注

    34

    文章

    1627

    浏览量

    55680
  • STC15F2K60S2
    +关注

    关注

    9

    文章

    25

    浏览量

    17342
  • 波特率发生器

    关注

    0

    文章

    11

    浏览量

    4089
收藏 人收藏

    评论

    相关推荐

    stc15f2k60s2驱动程序pwm

    stc15f2k60s2驱动程序pwm 占空比可调频率1k也可自己重新设定。 有详细的注释!
    发表于 07-24 16:30

    STC15F2K60S2的PWM怎么实现?

    STC15F2K60S2的PWM怎么实现?基于STC15F2K60S2的智能循迹小车硬件电机控制代码分享
    发表于 09-24 07:11

    STC15F2K60S2单片机的特点有哪些呢

    STC15F2K60S2单片机是什么?STC15F2K60S2单片机的特点有哪些呢?
    发表于 11-03 07:56

    STC15F2K60S2具有哪些引脚功能?

    STC15F2K60S2具有哪些引脚功能?STC15F2K60S2单片机的内部结构由哪几部分组成?
    发表于 11-09 07:13

    STC15F2K60S2系列单片机器件手册讲解

    stc单片机手册,15F2K60S2单片机,双串口型。
    发表于 03-16 13:58 437次下载

    STC15F2K60S2技术手册

    STC15F2K60S2技术手册
    发表于 12-17 09:33 0次下载

    STC15F2K60S2单片机电路原理图的详细资料免费下载

    本文档的主要内容详细介绍的是STC15F2K60S2单片机电路原理图的详细资料免费下载。
    发表于 09-17 08:00 228次下载
    <b class='flag-5'>STC15F2K60S2</b>单片机电路原理图的详细资料免费下载

    单片机STC15F2K60S2的详细资料和程序资料说明

    本文档的主要内容详细介绍的是单片机STC15F2K60S2的详细资料和程序资料说明,与信捷PLC相搭配使用的单片机。
    发表于 12-17 08:00 88次下载

    STC15F2K60S2单片机的使用程序免费下载

    本文档的主要内容详细介绍的是STC15F2K60S2单片机的使用程序免费下载。
    发表于 03-28 18:13 123次下载
    <b class='flag-5'>STC15F2K60S2</b>单片机的使用<b class='flag-5'>程序</b>免费下载

    使用STC15F2K60S2单片机驱动PWM的程序免费下载

    本文档的主要内容详细介绍的是使用STC15F2K60S2单片机驱动PWM的程序免费下载占空比可调 频率1k 也可自己重新设定。 有详细的注释!
    发表于 08-01 08:00 38次下载
    使用<b class='flag-5'>STC15F2K60S2</b>单片机驱动PWM的<b class='flag-5'>程序</b>免费下载

    STC15F2K60S2系列学习板原理图免费下载

    本次分享的是来自STC官网的stc15F2K60S2系列学习板-32KSRAM电路图。STC15F2K60S2单片机是一种增强型的8051单片机,是新型的FLASH单片机,与传统的8051系列单片机
    发表于 11-09 14:43 77次下载
    <b class='flag-5'>STC15F2K60S2</b>系列学习板原理图免费下载

    stc15f2k60s2单片机开发环境构建

    stc15f2k60s2单片机开发环境构建
    发表于 11-13 11:36 21次下载
    <b class='flag-5'>stc15f2k60s2</b>单片机开发环境构建

    单片机学习笔记——双机通信(型号:STC15F2K60S2

    一、定义变量/**********************myM485 485双机通信例程测试型号:STC15F2K60S2 主频:11.0592MHz
    发表于 11-18 14:36 42次下载
    单片机学习笔记——双机<b class='flag-5'>通信</b>(型号:<b class='flag-5'>STC15F2K60S2</b>)

    stc15f2k60s2开发板

    stc15f2k60s2开发板
    发表于 11-30 10:21 58次下载
    <b class='flag-5'>stc15f2k60s2</b>开发板

    STC15F2K60S2系列LQFP48管脚图

    电子发烧友网站提供《STC15F2K60S2系列LQFP48管脚图.pdf》资料免费下载
    发表于 10-25 15:42 13次下载
    <b class='flag-5'>STC15F2K60S2</b>系列LQFP48管脚图