微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C51串口源代码实例

C51串口源代码实例

时间:11-27 来源:互联网 点击:
串口实现函数:

void init_uart(void)

{

PCON=0x80; //倍频,减少误差率

TMOD=0x25; //设置定时器1为方式2(用于设置波特率);设置T0为计数器模式1,用作HV的检查

TH1=0xF1; //装入初值 波特率为9600 晶振27MHz TH1=0XF1

TL1=0xF1;

TR1=1; //启动定时器1

SM0=0;

SM1=1; //串口方式1,8 bit uart

REN=1; //接收使能

EA=1;

ES=1;

return;

}

void serial() interrupt 4

{

//uartflag = 1;

RI=0;

}

//向串口发送一个字符

void send_char(U8 ch)

{

ES=0;

TI=0;

SBUF=ch;

while(!TI);

TI=0;

ES=1;

}

//向串口发送多个字符

void send_chars(U8 *ch)

{

U8 i=0;

ES=0;

TI=0;

for(i=0;ch[i]!=;i++)

{

SBUF=ch[i];

while(!TI);

TI=0;

}

ES=1;

}

//向串口发送一个字符 无需十六进制显示

void send_u8(U8 ch)

{

U8 tt;

send_char(x30); //x30其中30是十六进制 代表“0”

send_char(x58); //x58其中30是十六进制 代表“x”

tt = ch >>4 ;

if(tt<10)

{

send_char(tt+0);

}

else

{

send_char(tt+A-10);

}

tt = ch &0x0F ;

if(tt<10)

{

send_char(tt+0);

}

else

{

send_char(tt+A-10);

}

send_chars("");

}

//向串口发送一个字符 无需十六进制显示

void send_u16(U16 ch)

{

U8 tt;

send_char(x30); //x30其中30是十六进制 代表“0”

send_char(x58); //x58其中30是十六进制 代表“x”

tt = ch >>12 ;

if(tt<10)

{

send_char(tt+0);

}

else

{

send_char(tt+A-10);

}

tt = (ch>>8) &0x0F ;

if(tt<10)

{

send_char(tt+0);

}

else

{

send_char(tt+A-10);

}

tt = (ch>>4) &0x0F ;

if(tt<10)

{

send_char(tt+0);

}

else

{

send_char(tt+A-10);

}

tt = ch &0x0F ;

if(tt<10)

{

send_char(tt+0);

}

else

{

send_char(tt+A-10);

}

send_chars("");

}

void uart_welcome()

{

send_chars("---------------------------------------------------------------");

send_chars(" Welcome to Tvia 5735 Uart Test V1.0");

send_chars("Built time: 2013-09-24");

send_chars("MCU FOSC:27Mhz Baud rate:9600");

send_chars("Note:");

send_chars("Serial debugging assistants do not need to choose a hex display");

send_chars("---------------------------------------------------------------");

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top