只要是C51的MCU都有标准的串口---UART.什么是串口,这是针对并口来说的。如果大家需要了解可以查看一下74L164等串转并芯片了解一下。或者同时了解一下I2C、SPI等接口。凡事大概了解一下,有一个感性的认识即可。
以上是STC89C52系列单片机串口的一种工作方式。好像很复杂。其实我们不必过细的考虑这张图。知道常规的使用方法即可。使用串口必须使用定时器1,,TI、RI是发送和接收数据标志。也就是说定时器1不能用作别的用途。其他的在工程中慢慢理解。
我们看看在项目中使用的代码
#include
#define FOSC 11059200L
#define BAUD 9600
/***********************************/
// 串口初始化程序
/***********************************/
void uartInit( )
{
SCON = 0x50;
TMOD |= 0x20;
TH1=TL1 = -(FOSC/12/32/BAUD);
TR1 =1;
ES = 1;
EA =1;
}
/***********************************/
// 串口1发送一个字节到上位机
/***********************************/
void uartSendData(unsigned char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
/***********************************/
// 串口发送一个数组到上位机
/***********************************/
void uartSendArray(unsigned char *dat, unsigned char len )
{
unsigned char i;
for(i=0; i<len; i++)<="" p="">
{
uartSendData(*dat);
dat++;
}
}
//-----------------------------------
// 串口1中断程序
//------------------------------------
void uart_Isr( )interrupt 4
{
unsigned char dat =SBUF;
if(RI)
{
RI=0;
uartRecive(dat); //接收数据函数
}
if(TI)
{
/ / TI=0;
}
}
void main( )
{
unsigned char m, n;
char buf[ ]="hello world!\r\n";
uartInit( );
while(1)
{
for(m=0;m<200;m++)
for(n=0;n<200;n++);
uartSendArray(buf, strlen(buf));
}
}
如果使用串口助手,可以发现,该段代码以9600波特率向上位机发送了“"hello world!\r\n”。以上代码简单的演示了串口发送数据的方法。