stc15定时器2模式0作为波特率发生器示例程序

perseverance52      2022-02-17     504

关键词:

【STC15】定时器2模式0作为波特率发生器示例程序


  • 在此期间使用自制的STC开发板STC15W408ASSTC15F2K60S2分别测试了定时器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对外输... 查看详情