**说明:**本案例实现了51系列单片机(以IAR15F2K60S2实验)UART1数据传输,通过PC端串口助手实现串口一实时发送接收(发送什么内容接收到什么内容)。分为串口初始化和中断函数两部分。
一、串口初始化
#define SYS_FOSC 11059200 //系统时钟频率
#define UART1_BAUD 9600
#define TIMER1_VALUE (65536-(SYS_FOSC/4/12/UART1_BAUD))
void OpenUART1(void)
{
SCON = 0x50;
TL1 = TIMER1_VALUE;
TH1 = TIMER1_VALUE>>8;
IE |=0x90;
EA = 1;
AUXR |= 0x14;
}
1、串口一相关寄存器
二、串口中断函数
void UART1_Routine(void) interrupt 4 using 1
{
if(RI)
{
RI = 0;
SBUF = SBUF;
}
}
备注:本文重点在于此处的SBUF,如图。
小结:
此处意在理解串口传输的几个要点:
①串口数据由TX和RX(发送和接收)两根数据线组成。
②串口数据在51单片机内,是由SBUF寄存器来存储的,且每次只能存储一字节。
③串口数据发送过程:读SBUF,将一个字节数据从TX传送出去,同时发送完毕TI置1。
④串口数据接收过程:写SBUF,将一个字节数据从RX接收进来,同时接收完毕RI置1。
⑤虽然从程序上看都是SBUF,但实际上内部读操作和写操作是针对不同的寄存器操作的。
⑥无论是单片机内部串口间传输、与外部串口传输,数据均可先存入存储区(如数组,flash等),然后逐位传输。