单片机程序疑惑 。下面程序的定时器1有没有工作?为什么要加上定时器呢?求解,谢谢!

#include "c8051f020.h"

unsigned char data1;
void SYSCLK_Init();
void PORT_Init();
void UART0_Init();

void SYSCLK_Init()
{
unsigned int i;
OSCXCN=0X67; //0X67=0110,0111
for(i=0;i<256;i++); //等待>1ms
while(!(OSCXCN&0X80)); //等待XTLVLD变为1
OSCICN=0X88; //时钟失效监测器,选择外部时钟源作为系统时钟
}

void PORT_Init()
{
XBR0 = 0x27;/*交叉开关配置,URAT总线TX0置到P0.0口,RX0置到P0.1口, SPI总线SCK配置到P0.2口,
MOSI为P0.4口, NSS为P0.5,MISO配置到P0.3口,IIC总线SDA置到P0.6口�SCK置到P0.7 TX1,RX1配置到P1.0,P1.1, CEX0,CEX1,配置到P1.2,P1.3,外部中断int0配置到P1.4 */
XBR1 = 0x04;
XBR2 = 0x44; /*允许功能选择开关有效*/
P0MDOUT = 0x1A;/*SCK、MOSI和NSS为推拉式输出,MISO为开漏式.*/
P74OUT =0xff;

}

void UART0_Init()
{
SCON0=0x50; //串口方式1
TMOD=0X20; //选用定时器1作为波特率发生器
TH1=0xF4; //波特率为4800
TL1=0xF4;
ES0=1; //开启串口中断0
TF1=0;
TR1=1; //定时器启动
PCON=0X80; //波特率加倍 波特率为9600
TI0=1;

}

void UART0_ISR() interrupt 4 using 1
{

if(RI0)
{
RI0=0;//中断接收标志清零
data1=SBUF0;//接收数据

SBUF0=data1;//发送数据

while(TI0==0);
TI0=0;//发送标志清零
}

}

TMOD=0X20; //选用定时器1作为波特率发生器
TH1=0xF4; //波特率为4800
TL1=0xF4;

选用定时器1作为波特率发生器,串口通信必须要确定波特率,这里用定时器1产生波特率。有的单片机有专用的波特率定时器,就不需要“借用”定时器1了。

这里定时器1已经使用了,而且是8位自动重装模式。你不能再把定时器1用作其他用途。
温馨提示:答案为网友推荐,仅供参考
相似回答