目录
前言
在前期文章中写了我当时写串口时的想法,今天又换了一种方法写,大同小异
以下全是把串口部分单拎出来的代码,有不理解的可以评论哦
1、以前的旧写法
1.1、串口和定时器初始化函数
void Timer0Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x20; //设置定时初值
TH0 = 0xD1; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=ET0=1;
}
void UartInit(void) //4800bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0x8F; //设定定时初值
T2H = 0xFD; //设定定时初值
AUXR |= 0x10; //启动定时器2
ES=1;
}
1.2串口发送部分
void send_byte(unsigned char Data)//串口发单字节
{
SBUF=Data;
while(TI==0);
TI=0;
}
void send_str(unsigned char *str)//串口发字符串
{
while(*str!='\0')
{
send_byte(*str);
str++;
}
}
1.3、串口接收部分(即中断部分)
这里肯定有很多小伙伴不理解为什么以‘n’做结束标记位,而不是‘\n’,我当时也不理解,苦恼了很久,然后我发现STC6.88版本以下都识别不了\n,大家可以去串口里面试一下,你发\n看一共发了几个字符,其实是两个,但是在6.88版本以上又是可以识别\n的,因为我版本低所以接收的时候要用n结尾哦。