✨当然如果不需要深入了解计算,可以使用STC-ISP工具一键自动生成相对于的相关代码。但是看不到具体的参数时怎么计算得来的。
TH1 = TL1 = 256 - (MAIN_Fosc / 12 / 32 / BAUD); //STC12/STC15/STC8 Set auto-reload vaule
TH1 = TL1 =256 -(MAIN_Fosc / 32 / BAUD); //STC12/STC15 1T Set auto-reload vaule
✨定时器运行速度选择1T还是12T绝对上面在计算波特率时,否则再除以12.
TL1 =(unsigned int)(65536 -(MAIN_Fosc /12/ 4 / BAUD)); ///STC15 1T Set 16bit auto-reload vaule
TH1 =(unsigned int)((65536 - (MAIN_Fosc/12/4/BAUD))>>8);///STC15 1T Set 16bit auto-reload vaule
TL1 =(unsigned int)(65536 -(MAIN_Fosc / 4 / BAUD)); ///STC15 1T Set 16bit auto-reload vaule
TH1 =(unsigned int)((65536 - (MAIN_Fosc/4/BAUD))>>8);///STC15 1T Set 16bit auto-reload vaule
,STC12单片机定时器1模式0为13位定时器/计数器.
可以适用于STC12/STC15/STC8
✨以下是配置的是定时器1,12T速度,使用内部11.0592MHz,波特率:9600
/************************************************
* 文件描述 : Printf程序
* 芯 片 : STC12、STC15、STC8
* 时 钟 :11.0592MHz
************************************************/
#include //用于printf打印
#include
//#define MAIN_Fosc 48000000L //定义主时钟
//#define MAIN_Fosc 44236800L //定义主时钟
//#define MAIN_Fosc 40000000L //定义主时钟
//#define MAIN_Fosc 36864000L //定义主时钟
//#define MAIN_Fosc 35000000L //定义主时钟
//#define MAIN_Fosc 33177600L //定义主时钟
//#define MAIN_Fosc 30000000L //定义主时钟
//#define MAIN_Fosc 27000000L //定义主时钟
//#define MAIN_Fosc 24000000L //定义主时钟
//#define MAIN_Fosc 22118400L //定义主时钟
//#define MAIN_Fosc 20000000L //定义主时钟
//#define MAIN_Fosc 18432000L //定义主时钟
//#define MAIN_Fosc 12000000L //定义主时钟
#define MAIN_Fosc 11059200L //定义主时钟
//#define MAIN_Fosc 6000000L //定义主时钟
//#define MAIN_Fosc 5529600L //定义主时钟
sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
#define BAUD 9600 //UART baudrate
bit busy;
//函数声明
void Uart1_Init(void);
void Uart1_SendChar(unsigned char dat);
void Delay_ms(unsigned int ms);
void main(void)
{
Uart1_Init();
Delay_ms(500);
while (1)
{
Delay_ms(1000);
printf("Hello World! \r\n");
}
}
/***********************************************
函数名称:Uart1_Init
功 能:串口1初始化函数
入口参数:无
返 回 值:无
************************************************/
void Uart1_Init(void)
{
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器时钟12T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
// AUXR |= 0x40; //定时器时钟1T模式
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器1模式8bit自动重装载
TH1 = TL1 = 256 - (MAIN_Fosc / 12 / 32 / BAUD); //STC12/STC15/STC8 12T Set auto-reload vaule
// TH1 = TL1 =256 -(MAIN_Fosc / 32 / BAUD); //STC12/STC15 1T Set auto-reload vaule
TR1 = 1; //Timer1 start run
ET1 = 0; //禁止定时器中断
// ES = 1; //Enable UART interrupt
// EA = 1; //Open master interrupt switch
}
/***********************************************
*函数名称:Uart1_SendChar
*功 能:串口1发送单个字符函数
*入口参数:Udat:欲发送的数据
*返 回 值:无
*备 注:无
************************************************/
void Uart1_SendChar(unsigned char dat)
{
SBUF = dat;
while (!TI); //等待前一个数据发送完成
TI = 0;//清除发送标志
}
/***********************************************
函数名称:printf重映射
功 能:串口1初始化函数
入口参数:无
返 回 值:无
************************************************/
char putchar(char dat)
{
Uart1_SendChar(dat);
return dat;
}
/*----------------------------
UART interrupt service routine
----------------------------*/
/*
void Uart_Isr() interrupt 4
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
}
if (TI)
{
TI = 0; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}
*/
/***********************************************
函数名称:Delay_ms
功 能:STC 1T单片机1ms延时程序
入口参数:ms:延时的毫秒数
************************************************/
void Delay_ms(unsigned int ms) //注:ms_max=65536
{
unsigned int i;
do
{
// i=MAIN_Fosc/96000L; //STC89_12T
// i=MAIN_Fosc/48000L; //STC89_6T
i = MAIN_Fosc / 14000; //STC12
// i=MAIN_Fosc/13000; //STC15
// i=MAIN_Fosc/10000; //STC8
// i=MAIN_Fosc/6030; //STC32
while (--i);
}
while (--ms);
}
/************************************************
* 文件描述 : Printf程序
* 芯 片 : STC12C5A60S2
* 时 钟 :11.0592MHz
************************************************/
#include //用于printf打印
#include
//#define MAIN_Fosc 48000000L //定义主时钟
//#define MAIN_Fosc 44236800L //定义主时钟
//#define MAIN_Fosc 40000000L //定义主时钟
//#define MAIN_Fosc 36864000L //定义主时钟
//#define MAIN_Fosc 35000000L //定义主时钟
//#define MAIN_Fosc 33177600L //定义主时钟
//#define MAIN_Fosc 30000000L //定义主时钟
//#define MAIN_Fosc 27000000L //定义主时钟
//#define MAIN_Fosc 24000000L //定义主时钟
//#define MAIN_Fosc 22118400L //定义主时钟
//#define MAIN_Fosc 20000000L //定义主时钟
//#define MAIN_Fosc 18432000L //定义主时钟
//#define MAIN_Fosc 12000000L //定义主时钟
#define MAIN_Fosc 11059200L //定义主时钟
//#define MAIN_Fosc 6000000L //定义主时钟
//#define MAIN_Fosc 5529600L //定义主时钟
sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
#define BAUD 9600 //UART baudrate
bit busy;
//函数声明
void Uart1_Init(void);
void Uart1_SendChar(unsigned char dat);
void Delay_ms(unsigned int ms);
void main(void)
{
Uart1_Init();
Delay_ms(500); //等待上电稳定
// printf("AT24C02 Read success! \r\n");
// Uart1_SendChar();
while (1)
{
Delay_ms(1000);
printf("Hello World! \r\n");
}
}
/***********************************************
函数名称:Uart1_Init
功 能:串口1初始化函数
入口参数:无
返 回 值:无
************************************************/
void Uart1_Init(void)
{
SCON = 0x50; //8位数据,可变波特率
// AUXR &= 0xBF; //定时器时钟12T模式
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器1模式8bit自动重装载
// TH1 = TL1 = 256 - (MAIN_Fosc / 12 / 32 / BAUD); //STC12/STC15/STC8 12T Set auto-reload vaule
TH1 = TL1 =256 -(MAIN_Fosc / 32 / BAUD); //STC12/STC15 1T Set auto-reload vaule
TR1 = 1; //Timer1 start run
ET1 = 0; //禁止定时器中断
// ES = 1; //Enable UART interrupt
// EA = 1; //Open master interrupt switch
}
/***********************************************
*函数名称:Uart1_SendChar
*功 能:串口1发送单个字符函数
*入口参数:Udat:欲发送的数据
*返 回 值:无
*备 注:无
************************************************/
void Uart1_SendChar(unsigned char dat)
{
SBUF = dat;
while (!TI); //等待前一个数据发送完成
TI = 0;//清除发送标志
}
/***********************************************
函数名称:printf重映射
功 能:串口1初始化函数
入口参数:无
返 回 值:无
************************************************/
char putchar(char dat)
{
Uart1_SendChar(dat);
return dat;
}
/*----------------------------
UART interrupt service routine
----------------------------*/
/*
void Uart_Isr() interrupt 4
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
}
if (TI)
{
TI = 0; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}
*/
/***********************************************
函数名称:Delay_ms
功 能:STC 1T单片机1ms延时程序
入口参数:ms:延时的毫秒数
************************************************/
void Delay_ms(unsigned int ms) //注:ms_max=65536
{
unsigned int i;
do
{
// i=MAIN_Fosc/96000L; //STC89_12T
// i=MAIN_Fosc/48000L; //STC89_6T
i = MAIN_Fosc / 14000; //STC12
// i=MAIN_Fosc/13000; //STC15
// i=MAIN_Fosc/10000; //STC8
// i=MAIN_Fosc/6030; //STC32
while (--i);
}
while (--ms);
}
/************************************************
* 文件描述 : Printf程序
* 芯 片 : STC12C5A60S2
* 时 钟 :11.0592MHz
************************************************/
#include //用于printf打印
#include
//#define MAIN_Fosc 48000000L //定义主时钟
//#define MAIN_Fosc 44236800L //定义主时钟
//#define MAIN_Fosc 40000000L //定义主时钟
//#define MAIN_Fosc 36864000L //定义主时钟
//#define MAIN_Fosc 35000000L //定义主时钟
//#define MAIN_Fosc 33177600L //定义主时钟
//#define MAIN_Fosc 30000000L //定义主时钟
//#define MAIN_Fosc 27000000L //定义主时钟
//#define MAIN_Fosc 24000000L //定义主时钟
//#define MAIN_Fosc 22118400L //定义主时钟
//#define MAIN_Fosc 20000000L //定义主时钟
//#define MAIN_Fosc 18432000L //定义主时钟
//#define MAIN_Fosc 12000000L //定义主时钟
#define MAIN_Fosc 11059200L //定义主时钟
//#define MAIN_Fosc 6000000L //定义主时钟
//#define MAIN_Fosc 5529600L //定义主时钟
sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
#define BAUD 115200 //UART baudrate
//函数声明
void Uart1_Init(void);
void Uart1_SendChar(unsigned char dat);
void Delay_ms(unsigned int ms);
void main(void)
{
Uart1_Init();
Delay_ms(500); //等待上电稳定
while (1)
{
Delay_ms(1000);
printf("Hello World! \r\n");
}
}
/***********************************************
函数名称:Uart1_Init
功 能:串口1初始化函数
入口参数:无
返 回 值:无
************************************************/
void Uart1_Init(void)
{
SCON = 0x50; //8位数据,可变波特率
// AUXR &= 0xBF; //定时器时钟12T模式
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
// TMOD &= 0x0F; //设置定时器模式
// TMOD |= 0x20; //设置定时器1模式2:8bit自动重装载
TMOD &= 0x0F; //设置定时器模式0:16位自动重载模式
// TH1 = TL1 = 256 - (MAIN_Fosc / 12 / 32 / BAUD); //STC12/STC15/STC8 12T Set 8bit auto-reload vaule
// TH1 = TL1 =256 -(MAIN_Fosc / 32 / BAUD); //STC12/STC15 1T Set 8bit auto-reload vaule
TL1 =(unsigned int)(65536 -(MAIN_Fosc / 4 / BAUD)); ///STC15 1T Set 16bit auto-reload vaule
TH1 =(unsigned int)((65536 - (MAIN_Fosc/4/BAUD))>>8);///STC15 1T Set 16bit auto-reload vaule
TR1 = 1; //Timer1 start run
ET1 = 0; //禁止定时器中断
// ES = 1; //Enable UART interrupt
// EA = 1; //Open master interrupt switch
}
/***********************************************
*函数名称:Uart1_SendChar
*功 能:串口1发送单个字符函数
*入口参数:Udat:欲发送的数据
*返 回 值:无
*备 注:无
************************************************/
void Uart1_SendChar(unsigned char dat)
{
SBUF = dat;
while (!TI); //等待前一个数据发送完成
TI = 0;//清除发送标志
}
/***********************************************
函数名称:printf重映射
功 能:串口1初始化函数
入口参数:无
返 回 值:无
************************************************/
char putchar(char dat)
{
Uart1_SendChar(dat);
return dat;
}
/*----------------------------
UART interrupt service routine
----------------------------*/
/*
void Uart_Isr() interrupt 4
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
}
if (TI)
{
TI = 0; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}
*/
/***********************************************
函数名称:Delay_ms
功 能:STC 1T单片机1ms延时程序
入口参数:ms:延时的毫秒数
************************************************/
void Delay_ms(unsigned int ms) //注:ms_max=65536
{
unsigned int i;
do
{
// i=MAIN_Fosc/96000L; //STC89_12T
// i=MAIN_Fosc/48000L; //STC89_6T
i = MAIN_Fosc / 14000; //STC12
// i=MAIN_Fosc/13000; //STC15
// i=MAIN_Fosc/10000; //STC8
// i=MAIN_Fosc/6030; //STC32
while (--i);
}
while (--ms);
}