一般51的单片机都是用定时器1做波特率发生器,今天想了想就用定时器2看看效果,呵呵,其实都是这么回事,配置寄存器,初始化,写自己想好的东西,自己玩玩简单的资源。就这样吧,不过要注意的是要把RX这个脚设置为开漏输出.
懒了,就把这个文件写一起吧。。。╮(╯▽╰)╭。。。
#include <c8051f020.h>
#include <stdio.h>
#define UART0_SYSCLK 22118400
//baudrate = sysclk/((65536-[RCAP2H:RCAP2L)*32)
void delay_myself(void)
{
unsigned int i,j;
for(i=0;i<500;i++)
for(j=0;j<3000;j++);
}
void sysclk_init(void)
{
unsigned int i;
OSCXCN = 0xef;
for(i=0;i<300;i++);
while(!(OSCXCN & 0x80));
OSCICN = 0x68;
}
void Port_init(void)
{
XBR0 = 0x04;
XBR1 = 0x00;
XBR2 = 0x40;
P0MDOUT = 0x0d;
}
void Timer_2_init(void) //baudrate
{
CKCON = 0x20;
PCON = 0x80;
SCON0 = 0x50;
T2CON = 0x30;
RCAP2H = ((65536-(UART0_SYSCLK/(115200*32)))/256);
RCAP2L = ((65536-(UART0_SYSCLK/(115200*32)))%256);
T2CON |= 0x34;
TI0 = 1;
RI0 = 0;
}
void main(void)
{
EA = 0;
WDTCN = 0xde;
WDTCN = 0xad;
EA = 1;
sysclk_init();
Port_init();
Timer_2_init();
while(1)
{
printf("hello \n\r");
delay_myself();
}
}