STC15 单片机 串口使用

本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问

在研究串口前,我们需要看一下所有的寄存器

首先是SCON,主要是用来设置串口的工作方式

详细参数其实不需要知道的非常非常清楚,因为我们一般都是有默认情况的

文档写着麻烦,直接上例程

/***
串口控制发送函数
***/
#include "reg51.h"
#include "intrins.h"
#include "send.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC 11059200L          //系统频率
#define BAUD 9600             //串口波特率

sfr AUXR  = 0x8e;               //辅助寄存器

sfr P_SW1   = 0xA2;             //外设功能切换寄存器1

#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7

bit busy;


/*串口初始化*/
void uInit()
{
   
	//ACC 是一个累加器,主要用来存放数据
	ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
	//P_SW1是一个特殊功能的寄存器,用来将串口1进行切换
    P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STC15 单片机串口通信可以分为两种方式:硬件串口和软件模拟串口。 硬件串口通信需要使用单片机内置的 UART 模块,可以直接使用串口发送和接收数据。在 STC15 单片机中,UART 模块的引脚为 P3.0 (RXD) 和 P3.1 (TXD)。使用串口通信需要对 UART 模块进行初始化,设置波特率、数据位、停止位等参数,然后使用相关函数进行发送和接收数据。示例代码如下: ```c #include <STC15F2K60S2.H> void UART_Init() { TMOD &= 0x0F; // 设置定时器1为模式0 TMOD |= 0x20; TH1 = 0xFD; // 波特率为9600 TL1 = TH1; PCON |= 0x80; // SMOD = 1 TR1 = 1; // 启动定时器1 SCON = 0x50; // 8位数据位,无校验,1位停止位,允许接收 } void UART_SendByte(unsigned char dat) { SBUF = dat; while (!TI); // 等待发送完成 TI = 0; // 清除发送完成标志 } unsigned char UART_ReceiveByte() { while (!RI); // 等待接收完成 RI = 0; // 清除接收完成标志 return SBUF; } ``` 使用上述代码可以实现 STC15 单片机串口通信功能。发送数据可以使用 `UART_SendByte` 函数,接收数据可以使用 `UART_ReceiveByte` 函数。 另外一种方式是软件模拟串口通信,即使用 GPIO 口模拟串口通信。这种方式需要在程序中自行实现串口通信的数据帧格式和通信协议。示例代码如下: ```c #include <STC15F2K60S2.H> #define TX P3_3 // 发送引脚 #define RX P3_2 // 接收引脚 void UART_Init() { TX = 1; // 初始化发送引脚为高电平 RX = 1; // 初始化接收引脚为高电平 } void UART_SendByte(unsigned char dat) { unsigned char i; TX = 0; // 启动发送,将发送引脚设置为低电平 for (i = 0; i < 8; i++) { if (dat & 0x01) { TX = 1; // 发送数据位 } else { TX = 0; } dat >>= 1; } TX = 1; // 停止发送,将发送引脚设置为高电平 } unsigned char UART_ReceiveByte() { unsigned char i, dat = 0; while (RX); // 等待接收引脚为高电平 for (i = 0; i < 8; i++) { dat >>= 1; if (RX) { dat |= 0x80; // 接收数据位 } while (RX); // 等待接收引脚为低电平 } return dat; } ``` 使用上述代码可以实现 STC15 单片机的软件模拟串口通信功能。发送数据可以使用 `UART_SendByte` 函数,接收数据可以使用 `UART_ReceiveByte` 函数。需要注意的是,在使用软件模拟串口通信时,需要将发送和接收引脚的电平转换时间考虑在内,以避免数据传输错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值