关键词:
【STC15】定时器2模式0作为波特率发生器示例程序
-
在此期间使用自制的STC开发板
STC15W408AS
和STC15F2K60S2
分别测试了定时器2和定时器1作为波特率发生器,STC15F2K60S2
单片机使用的是外部11.0592MHz
的晶振都两个定时器都测试没有问题,STC15W408AS
使用的是外部晶振16MHz
的,使用定时器2作为波特率发生器没有问题,在使用定时器1死活程序运行不起来。代码是按照官方文档上的示例代码写的。 -
最后查明原因是
STC15W408AS
没有定时器1
。 -
STC15系统单片机定时器数量以及外设参考资料,请看《STC15系列单片机外设参考资料》
-
定时器2模式0(16位自动重装载)作为波特率发生器示例程序
采用的是STC15W408AS,使用的是外部16MHz的晶振。
/*---------------------------------------------------------------------*/
/* --- STC MCU International Limited ----------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*/
/************* 功能说明 **************
双串口全双工中断方式收发通讯程序。
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
******************************************/
#include "config.h"
#include "stdio.h"
#include "USART.h"
void delay_ms(unsigned int ms)
unsigned int i;
do
i = MAIN_Fosc / 13000;
while(--i) ; //14T per loop
while(--ms);
//========================================================================
// 函数: void main(void)
// 描述: 主函数。
//========================================================================
void main(void)
unsigned int n;
// P0M1 = 0; P0M0 = 0; //设置为准双向口
// P1M1 = 0; P1M0 = 0; //设置为准双向口
// P2M1 = 0; P2M0 = 0; //设置为准双向口
P3M1 = 0; P3M0 = 0; //设置为准双向口
// P4M1 = 0; P4M0 = 0; //设置为准双向口
// P5M1 = 0; P5M0 = 0; //设置为准双向口
// P6M1 = 0; P6M0 = 0; //设置为准双向口
// P7M1 = 0; P7M0 = 0; //设置为准双向口
S1_USE_P30P31();
InitSerialPort(); //初始化串口,波特率9600,8bit数据位,1停止位,无校验
EA = 1; //允许总中断
// PrintString1("STC15F2K60S2 UART1 Test Prgramme!\r\n"); //SUART1发送一个字符串
while (1)
delay_ms(500);
n = ~0;
printf("uint = ~0:%u \r\n",n); //SUART1发送一个字符串
n = !0;
printf("uint = !0:%u \r\n",n); //SUART1发送一个字符串
P10 = !P10;
- usart.c
/*----------------------------------------------------------
* 项目名称:
串口通信驱动程序
* 功能描述:
1、串口初始化
2、查询法接收一个字节
3、串口发送一个字节
4、串口发送一个字符串
5、串口中断方式接收一个字符
* 配置说明:
MCU: STC15W408AS
开发板: STC15W408AS开发板
晶振: 内部时钟:11.0592MHz
扩展模块: -
软件: Keil.C51.V9.01
* 备注:
- 将开发板的串口与电脑串口连接
----------------------------------------------------------*/
#include "USART.h"
//#define BaudRate1 9600L
//#define Timer1_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate1)) //Timer 1 重装值, 对应300KHZ
unsigned char *pchar; //定义一个全局指针
bit busy;
//----------------------------------------------------------
// 函数名称:void IniSerialPort(void)
// 函数功能:串口初始化
//----------------------------------------------------------
void InitSerialPort(void)
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01;
AUXR |= 0x04; //定时器时钟为Fosc,1T模式
// T2L = 0x5F; //设置定时2初始值9600bps@外部晶振16MHz
// T2H = 0xFE; //设置定时初始值
AUXR |= 0x10; //启动定时器
T2L= (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
ES = 1; //使能串口中断
ET0 = 0; //禁止定时器1中断
REN=1; //串口为工作方式1,允许接收数据
SM0=0; //SM0 SM1串口工作方式选择,01:8位异步收发,波特率由定时器决定
SM1=1;
//----------------------------------------------------------
// 函数名称:unsigned char ReceiveByte(void)
// 函数功能:查询法接收一个字节
//----------------------------------------------------------
unsigned char ReceiveByte(void)
unsigned char rbyte;
while(!RI); //查询接收标志位,是否有数据到达缓冲区
RI=0; //清零接收标志位
rbyte=SBUF; //从缓冲区读取数据
return rbyte;
//----------------------------------------------------------
// 函数名称:putchar(unsigned char c)
// 函数功能:串口发送一个字节
//----------------------------------------------------------
char putchar(unsigned char c)
SBUF = c; //发送数据
while(!TI); //等待发送完成
TI=0; //清零发送标志位;
return c;
//----------------------------------------------------------
// 函数名称:void SendString(unsigned char *pstr)
// 函数功能:串口发送一个字符串
//----------------------------------------------------------
//void SendString(unsigned char *pstr)
//
// while(*pstr!='\0') //字符串是否发完
//
// SendByte(*pstr); //发送字符串数据
// pstr++; //指向下一个字符
//
//
//----------------------------------------------------------
// 函数名称:void SerialPortInte(void)
// 函数功能:串口中断方式接收一个字符
//----------------------------------------------------------
void SerialPortInte(void) interrupt 4 using 1
if(RI)
RI=0; //清零接收标志位
*pchar=SBUF; //读取缓冲区的数据
if(TI)
TI=0;//清除TI位
busy = 0;//清忙标志
/**********************************THE END**********************************/
程序源码
链接:https://pan.baidu.com/s/1MM6Y1H_B0AztS97IeU9tFg
提取码:ex6a
8.stc15w408as单片机定时器/计数器(代码片段)
一、定时器计数器简介 STC15W408AS只有定时器0和定时器2,工作工作位定时器或者计数器模式。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲... 查看详情
stc15不同配置模式下的串口输出方式总结(代码片段)
...C15W401AS系列单片机(含IRC15W415AS)有:2个普通定时器/计数器(T0和T2)🔰晶振频率:11.0592MHz;波特率:115200🌴串口配置模式1在不开启串口中断情况下,仅作为一般调 查看详情
stc89c52高级定时器简介(代码片段)
文章目录STC89C52高级定时器简介一、序言二、定时器2的工作模式1、16位自动重装载模式2、独立波特率发生器模式<>测试代码<>STC89C52高级定时器简介一、序言这里我就不对定时器做基本介绍了,这次主要讲一讲51的高... 查看详情
stc15不同配置模式下的串口输出方式总结(代码片段)
...C15W401AS系列单片机(含IRC15W415AS)有:2个普通定时器/计数器(T0和T2)🔰晶振频率:11.0592MHz;波特率:115200🌴串口配置模式1在不开启串口中断情况下,仅作为一般调试信息输出,不能接收串口数据... 查看详情
8051单片机串口波特率计算方式
... STC12C5A60S2单片机兼容80C51单片机,其串口波特率可以由定时器产生,也可以由独立波特率发生器产生。其波特率模式可以是固定的,也可以是可变的。 固定波特率:当模式0的通信速度设置位UART_M0x6/AUXR.5=0时,其波特率=SYScl... 查看详情
51高级定时器简介(代码片段)
文章目录51高级定时器简介一、序言二、定时器2的工作模式1、16位自动重装载模式2、独立波特率发生器模式<>测试代码<>51高级定时器简介一、序言这里我就不对定时器做基本介绍了,这次主要讲一讲51的高级定时器... 查看详情
stc15定时器0做9-16位pwm示例解读(代码片段)
【STC15】定时器0做9-16位PWM示例解读STC15资料包STC15系列库函数V1.0,2014:http://www.stcmcudata.com/STC-LIB/STC15-SOFTWARE-LIB-V1.0.rarTimer0-做9-16位PWM为例:功能说明以及PWM不同频率测试数据说明烧录验证单片机型号:IAP15F2K61S2PWM数据采样... 查看详情
stc15比较器介绍以及比较器中断方式作为掉电检测示例程序(代码片段)
【STC15】比较器介绍以及比较器中断方式作为掉电检测示例程序比较器介绍STC15W201S系列、STC15W404S系列及STC15W1K16S系列的比较器内部规划如下图所示:有ADC的单片机STC15W401AS系列及STC15W4K32S4系列的比较器内部规划如下图所示:比... 查看详情
stc15w408as单片机简单串口通信示例(代码片段)
STC15W408AS单片机串口通信示例本示例展示将收到的数据内容,返回发送出去。实例代码#include"stc15.h"typedefunsignedcharuint8_t;typedefunsignedintWORD;#defineFOSC11059200L//系统频率#defineBAUD9600//串口波特率voidSendData(uint8_tdat); 查看详情
stc单片机stc15串口收发示例程序模板(代码片段)
...享】自制STC15W408AS开发板》按照使用用途:串口收发模式和串口发送模式串口收发模式:即可以发送也可以接收。这种模式下,串口需要占用单片机运行内存,接收内容的代码需要放在主程序while循环中进行。/**以... 查看详情
51单片机的定时器
...试使用串口通信来控制舵机旋转的时候,由于同时用到了定时器T0和T1(用来设定波特率)。程序有点问题,运行不畅,所以现在想通过写篇文章重新来梳理对51单片机这两个定时器的理解。 STC89C51系列单片机有两个定时器:... 查看详情
stc15系列pwm中断控制寄存器介绍以及pwm相关示例(代码片段)
...介绍》✨以下数据来源于stc15手册。📓增强型PWM波形发生器的中断控制1.PWM中断优先级控制寄存器:IP2PPWMFD:PWM异常检测中断优先级控制位。当PPWMFD=0时,PWM异常检测中断为最低优先级中断(优先级0)当PPWMFD-1时,PWM异常... 查看详情
11.stc15w408as单片机ccp/pca/pwm应用(代码片段)
...片机集成了3路可编程计数器阵列(CCP/PCA)模块可用于软件定时器、外部脉冲的捕捉、高速脉冲输出以及脉宽调制(PWM)输出。一、与CCP/PWM/PCA应用有关的特殊功能寄存器STC15系列1T8051单片机CCP/PCA/PWM特殊功能寄存器表CCP/PCA/PWMSFRs1.1PCA工... 查看详情
stc15单片机软串口的使用(代码片段)
STC15软串口的使用📖在没有使用定时器资源的情况下,根据波特率位传输时间,利用STC-ISP工具自动计算出位延时函数。✨在官方所提供的库函数中位传输时间函数,仅适用于使用波特率为:9600的串口数据传输:... 查看详情
stc15比较器做adc程序示例(代码片段)
【STC15】比较器做ADC程序示例STC15系列单片机A/D转换的结构图SOP28引脚功能定义图类似运放电路的电压跟随器。主程序代码这是一个官方给出的示例程序,可以在STC官网下载,STC15系列库函数与例程测试版。/*-------------------... 查看详情
8.stc15w408as单片机定时器/计数器(代码片段)
一、定时器计数器简介 STC15W408AS只有定时器0和定时器2,工作工作位定时器或者计数器模式。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲... 查看详情
8.stc15w408as单片机定时器/计数器(代码片段)
一、定时器计数器简介 STC15W408AS只有定时器0和定时器2,工作工作位定时器或者计数器模式。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲... 查看详情
stc单片机stc15主时钟对外输出示例程序及演示(代码片段)
【STC单片机】STC15主时钟对外输出示例程序及演示采用的是自制STC15W408AS开发板,采用的是外部16MHz晶振。《【开源分享】自制STC15W408AS开发板》对外输出不同时钟频率对外输出8MHz,引脚P54对外输出4MHz,引脚P54对外输... 查看详情