STC89C52串口应用实例
扫描二维码
随时随地手机看文章
硬件设计
一般单片机的串口通信都需要通过MAX232 进行电平转换然后进行数据通信的,当然STC89C52RC 单片机也不例外。
图中的连接方式是常用的的一种零Modem 方式的最简单连接即3 线连接方式:只使用RXD、TXD 和GND 这三根连线,如下图
由于RS232 的逻辑“0”电平规定为+5~+15V,逻辑“1”电平规定为-15~-5V,因此不能直接连接
与TTL/CMOS 电路连接,必须进行电平转换。
电平转换可以使用三极管等分离器件实现,也可以采用专用的电平转换芯片,MAX232 就是其中典型
的一种。MAX232 不仅能够实现电平的转换,同时也实现了逻辑的相互转换即正逻辑转为负逻辑。
#include "stc.h" //加载"stc.h"头文件
void Delay(void) //定义Delay 函数,延时500ms
{
unsigned char i,j; //声明变量i,j
for(i=0;i<255;i++) //进行循环操作,以达到延时的效果
for(j=0;j<255;j++);
for(i=0;i<255;i++) //进行循环操作,以达到延时的效果
for(j=0;j<255;j++);
for(i=0;i<255;i++) //进行循环操作,以达到延时的效果
for(j=0;j<140;j++);
}
void UARTInit(void) //定义串口初始化函数
{
SCON =0x40; //8 位数据位
T2CON=0x34; //由T/C2 作为波特率发生器
RCAP2L=0xD9; //波特率为9600 的低8 位
RCAP2H=0xFF; //波特率为9600 的高8 位
}
void UARTSendByte(unsigned char byte)//串口发送单字节函数
{
SBUF=byte; //缓冲区装载要发送的字节
while(TI==0); //等待发送完毕,TI 标志位会置1
TI=0; //清零发送完成标志位
}
void main(void) //进入Main 函数
{
unsigned char i=0; //声明变量i
UARTInit(); //串口初始化
while(1) //进入死循环
{
UARTSendByte(i); //串口发送单字节数据
Delay(); //延时500ms
i++; //i 自加1
if(i>255)i=0; //若i>255,i=0
}
}
重点:
熟悉单片机串口相关寄存器的配置,如 SCON、T2CON、RCAP2L、RCAP2H。
波特率的计算公式要重点注意,同时波特率时钟发生器既可以由T/C1发生,又可以从 T/C2发生。
串口数据发送是否完成,只要查看 TI(发送中断标志位)是否置 1就可以了,最后要记得的是要将 TI
(发送中断标志位)清零。