串口波特率与定时计数器xia_茶花油~鱼丝情_百度空间


4. 程序实例

以下两例分别为T1 T2作为波特率发生器时的设置函数:

//Deion: 12M oscillator,Baud rate = 1200

//Author:

//Date:09-9-17

void uart_init (void)

{

/*

串口方式:8UART,不启用多机通信,波特率不加倍

*/

SCON = 0x50;

PCON = 0;

/*

T1作为波特率发生器 计数源:T(内部晶振)

方式2auto reload //gate=0: tr1

*/

TMOD = 0X22;

TL1 = 0xE6;

TH1 = 0xE6;

TR1 = 1;

/*

允许serial port中断,禁止T1中断

*/

IE = 0X90;

}

//Deion: 12M oscillator,Baud rate = 1200

//Author:

//Date:09-9-17

void uart_init (void)

{

/*

串口方式:8UART,不启用多机通信,波特率不加倍

*/

SCON = 0x50;

PCON = 0;

/*

T2作为波特率发生器 计数源:T(内部晶振)

Baud rate mode

*/

TH2 = 0XFE;

TL2 = 0XC8;

RCAP2H = 0XFE;

RCAP2L = 0XC8;

T2CON = 0X34;

/*

允许serial port中断,禁止T2中断

*/

IE = 0X90;

}

下面两例分别为串口接收和发送多个字节的程序,其中接收采用中断形式,发送采用查询方式。注意:在每发送完一个字节,程序都会进进入中断一次。

//串口接收

Unsigned char array[10],* p = array;

void uart_service() interrupt 4

{

if(RI)

{

*p++ = SBUF;

RI = 0;

}

}

//串口发送单个字节

void sys_byte(unsigned char temp)

{

// select = 0; //485发送时,75LBC184的发送接受选择口

SBUF = temp;

while(TI == 0);

TI = 0;

// select = 1;

}

//串口发送多个字节

void sys_bytes(unsigned char * temp,unsigned char length)

{

// select = 0; //485发送时,75LBC184的发送接受选择口

while(length--)

{

SBUF = *temp++;

while(TI == 0);

TI = 0;

}

// select = 1;

}



郑重声明:资讯 【串口波特率与定时计数器xia_茶花油~鱼丝情_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——