STC15不同配置模式下的串口输出方式总结
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC15不同配置模式下的串口输出方式总结相关的知识,希望对你有一定的参考价值。
STC15不同配置模式下的串口输出方式总结
- ✨基于
STC15W408AS
单片机。STC15W401AS系列单片机(含IRC15W415AS)有:2个普通定时器/计数器(T0
和T2
) - 🔰晶振频率:11.0592MHz;波特率:115200
🌴串口配置模式1
在不开启串口中断情况下,仅作为一般调试信息输出,不能接收串口数据。
//STC15W408AS,512字节的RAM,8K FLASH
//晶振频率:11.0592MHz
//波特率:115200
#include <STC15F2K60S2.H>
#include "intrins.h"
//#include "stdio.h"
bit busy;
//#define FOSC 11059200UL
//#define BAUD 115200
//sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
void Delay500ms();
void UartInit(void); //115200bps@11.0592MHz
void SendData(unsigned char dat);
void SendString(char *s);
void main()
P1M0 = 0x00;
P1M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
UartInit();
Delay500ms();
SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
while (1)
P17 = 0x01;
Delay500ms();
P17 = 0x00;
Delay500ms();
// printf("Hello World /r/n");
SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
void UartInit(void) //115200bps@11.0592MHz
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xFE; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
SBUF = dat;
while (!TI); //等待前一个数据发送完成
TI = 0;//清除发送标志
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
while (*s) //检测字符串结束标志
SendData(*s++); //发送当前字符
void Delay500ms() //@11.0592MHz
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 36;
k = 227;
do
do
while (--k);
while (--j);
while (--i);
🌷串口配置模式2
在不开启串口中断情况下,实现
printf
输出。仅作为一般调试信息输出,不能接收串口数据。
//STC15W408AS,512字节的RAM,8K FLASH
//晶振频率:11.0592MHz
//波特率:115200
#include <STC15F2K60S2.H>
#include "intrins.h"
#include "stdio.h"
bit busy;
//#define FOSC 11059200UL
//#define BAUD 115200
//sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
void Delay500ms();
void UartInit(void); //115200bps@11.0592MHz
void SendData(unsigned char dat);
void SendString(char *s);
void main()
P1M0 = 0x00;
P1M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
UartInit();
Delay500ms();
SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
while (1)
P17 = 0x01;
Delay500ms();
P17 = 0x00;
Delay500ms();
printf("Hello World \\r\\n");
// SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
void UartInit(void) //115200bps@11.0592MHz
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xFE; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
SBUF = dat;
while (!TI); //等待前一个数据发送完成
TI = 0;//清除发送标志
char putchar(char dat)
SendData(dat);
return dat;
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
while (*s) //检测字符串结束标志
SendData(*s++); //发送当前字符
void Delay500ms() //@11.0592MHz
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 36;
k = 227;
do
do
while (--k);
while (--j);
while (--i);
🌻串口配置模式3
开启串口中断情况下,仅作为一般调试信息输出,可以实现接收串口数据(接收部分需要代码完善)。
//STC15W408AS,512字节的RAM,8K FLASH
//晶振频率:11.0592MHz
//波特率:115200
#include <STC15F2K60S2.H>
#include "intrins.h"
//#include "stdio.h"
bit busy;
//#define FOSC 11059200UL
//#define BAUD 115200
//sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
void Delay500ms();
void UartInit(void); //115200bps@11.0592MHz
void SendData(unsigned char dat);
void SendString(char *s);
void main()
P1M0 = 0x00;
P1M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
// P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
UartInit();
Delay500ms();
SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
while (1)
P17 = 0x01;
Delay500ms();
P17 = 0x00;
Delay500ms();
SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
void UartInit(void) //115200bps@11.0592MHz
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xFE; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
ES = 1; //使能串口中断
EA = 1;
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
if (RI)
RI = 0; //清除RI位
if (TI)
TI = 0; //清除TI位
busy = 0; //清忙标志
/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
while (*s) //检测字符串结束标志
SendData(*s++); //发送当前字符
void Delay500ms() //@11.0592MHz
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 36;
k = 227;
do
do
while (--k);
while (--j);
while (--i);
🌼串口配置模式4
开启串口中断情况下,使用
printf
函数输出调试信息,可以实现接收串口数据(接收部分需要代码完善)。
//STC15W408AS,512字节的RAM,8K FLASH
//晶振频率:11.0592MHz
//波特率:115200
#include <STC15F2K60S2.H>
#include "intrins.h"
#include "stdio.h"
bit busy;
//#define FOSC 11059200UL
//#define BAUD 115200
//sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
void Delay500ms();
void UartInit(void); //115200bps@11.0592MHz
void SendData(unsigned char dat);
void SendString(char *s);
void main()
P1M0 = 0x00;
P1M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
// P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
UartInit();
Delay500ms();
SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
while (1)
P17 = 0x01;
Delay500ms();
P17 = 0x00;
Delay500ms();
printf("Hello World \\r\\n");
// SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
void UartInit(void) //115200bps@11.0592MHz
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xFE; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
TI = 1; // 很关键,使用printf函数时必须有此命令
ES = 1; //使能串口中断
EA = 1;
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
if (RI)
RI = 0; //清除RI位
if (TI)
TI = 0; //清除TI位
busy = 0; //清忙标志
/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
char putchar(char dat)
SendData(dat);
return dat;
/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
while (*s) //检测字符串结束标志
SendData(*s++); //发送当前字符
void Delay500ms() //@11.0592MHz
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 36;
k = 227;
do
do
while (--k);
while (--j);
while (--i);
以上是关于STC15不同配置模式下的串口输出方式总结的主要内容,如果未能解决你的问题,请参考以下文章
STC单片机通过ADC外部输入调节PWM占空比输出并串口打印当前脉冲值