地址:https://www.eefocus.com/luo_xinli/blog/14-04/302646_33049.html 只要是C51的MCU都有标准的串口---UART.什么是串口,这是针对并口来说的。如果大家需要了解可以查看一下74L164等串转并芯片了解一下。或者同时了解一下I2C、SPI等接口。凡事大概了解一下,有一个感性的认识即可。  以上是STC89C52系列单片机串口的一种工作方式。好像很复杂。其实我们不必过细的考虑这张图。知道常规的使用方法即可。使用串口必须使用定时器1,,TI、RI是发送和接收数据标志。也就是说定时器1不能用作别的用途。其他的在工程中慢慢理解。 我们看看在项目中使用的代码 #include <string.h> #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++) { 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”。以上代码简单的演示了串口发送数据的方法。
|