51单片机定时器2做串口波特率发生器

利用定时器计数器2作为串口波特率发生器(reg52.h文件缺少对T2CON的定义,需自己定义,在reg52.h头文件加sfr T2CON = 0xC8;)。
程序如下:

#include "reg52.h"
#include "intrins.h"
#include "stdio.h"
#define u8 unsigned char
#define u32 unsigned int
	
#define FOSC 12000000L      //System frequency
#define BAUD 9600       //UART baudrate

char *buf="Roger that";
void delayms(u32 ms)
{
	u32 i,j;
	for(i=ms;i>0;i--)
	for(j=115;j>0;j--);
}
void Timer2Init(void)		//100微秒@12.000MHz
{
	T2MOD = 0;		//初始化模式寄存器
	T2CON = 0x34;           //Timer2 start run
	TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule
  TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
	TR2 = 1;		//定时器2开始计时
}
void main()
{
	
	Timer2Init();
	SCON = 0x50;            //8-bit variable UART
	ES = 1;                 //Enable UART interrupt
  EA = 1;                 //Open master interrupt switch
	//printf("STC89-90xx\r\nUart Test !\r\n");
	while(1)
	{
	}

}
/*----------------------------
UART interrupt service routine
----------------------------*/
void Uart_Isr() interrupt 4 using 1
{
	static u8 i;
  if (RI)
  {
    RI = 0;             //Clear receive interrupt flag
    P1 = SBUF;          //P0 show UART data
		for(i=0;*(buf+i)!='\0';i++)
		{
			SBUF=*(buf+i);
			while(!TI);
			TI=0;
		}
  }  
}
  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值