一、生成串口初始化代码
打开STC在串口波特率计数器
选择单片机对应的系统频率、串口一、波特率为9600、定时器2、定时器时钟12T
二、编写发生代码
void SendByte(u8 dat)//发送1bit数据
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void Uart_Send_String(u8 *dat)//发生字符串
{
while(*dat != '\0')
SendByte(*dat++);
}
三、程序设计
#include <STC15F2K60S2.H>
#define u8 unsigned char
u8 Uart_Recv[50],Uart_Recv_Index = 0;//Uart_Recv串口接收字符串数组 Uart_Recv_Index接收数组控制位
void Uart1_Init(void); //9600bps@12.000MHz
void SendByte(u8 dat); //发生1bit数据
void Uart_Send_String(u8 *dat); //发生字符串
void main()
{
Uart1_Init();
ES = 1;//串口使能
EA = 1;//中断使能
while(1)
{
if(Uart_Recv_Index!=0)//处理接收数据
{
}
}
}
void Uart1_Isr(void) interrupt 4 //接收字符后触发外部中断
{
if(RI == 1)
{
Uart_Recv[Uart_Recv_Index] = SBUF;
Uart_Recv_Index++;
RI = 0;
}
}
void Uart1_Init(void) //9600bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xE6; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
}
void SendByte(u8 dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void Uart_Send_String(u8 *dat)
{
while(*dat != '\0')
SendByte(*dat++);
}