#include "serial_port.h"
void uart_init(void)
{
SCON= 0x50; //开串口1,8位数据,可变波特率
AUXR |= 0x01; //选择定时器2为波特率发生器
AUXR |= 0x04; //定时器选择1T模式
T2L = 0xc7; //
T2H = 0xfe; //
AUXR |= 0x10; // 启动定时器2,定时器2开始计时,防止与定时器0,1冲突写法
ES = 1; //打开串口中断
EA = 1; //打开总中断
}
void uart_sendbyte(unsigned char dat) //字节发送函数
{
SBUF=dat; //把数据传给SBUF
while(TI==0); //等待发送
TI=0; //结束后手动清零
}
void uart_send_string(unsigned char *dat)//字符串发送函数
{
while(*dat != '\0') //当字符不为空时继续发送
uart_sendbyte(*dat++); // 发送一个字符指针加一,指向下一个字符
}
H文件
#include "STC15F2K60S2.h"
void uart_init(void);
void uart_sendbyte(unsigned char byte);
void uart_send_string(unsigned char *dat);
main函数
#include "serial_port.h"
void main()
{
Timer0_Init(); //
uart_init(); //
while(1)
{
urat_proc();
}
}
void Time_0 (void) interrupt 1
{
TL0 = 0x18;
TH0 = 0xFC;
if(++uart_slow_down==500)
{uart_slow_down = 0;}
}
void uart_routine() interrupt 4 //串口中断函数
{
if(RI==1)
{
uart_recv[uart_recv_index] = SBUF;
uart_recv_index++;
RI=0;
}
}
void urat_proc() //串口处理函数(接收)
{
if(uart_slow_down) return;
uart_slow_down = 1;
}