一、Uart串口组成部分
main.c里面 void Uart(void) interrupt 4 + void Uart_Proc(void)
uart.c里面 void Uart_Timer2_Init(void) + void Uart_Send_String(unsigned char *uart_string)
以上为四个函数,接下来为详细函数
1、void Uart(void) interrupt 4
中断-单片机借助定时器2设置好的中断(微小的固定时间间隔)接受电脑发送给单片机的数据(已经存储在SBUF里面),单片机在中断里面固定地有间隔重复死板地取出存储在uart_buf[uart_buf_index] 里面,直至满足uart_buf[uart_buf_index]的上限uart_buf[8](我们已将设置好的)。
unsigned char uart_buf[8];
unsigned char uart_buf_index = 0;
void Uart(void) interrupt 4
{
if(RI)
{
RI = 0;
uart_buf[uart_buf_index] = SBUF;
uart_buf_index++;
}
}
2、void Uart_Proc(void)
单片机接收到数据——通过uart_buf_index是否>=6来进行判断有无电脑发送过来的数据字节,如果满足条件,则单片机认为电脑已经发送了数据,满足if()语句的条件。
后续,单片机将那一部分的数据uart_buf借助sprintf转换成seg_string,然后利用void Uart_Send_String(unsigned char *uart_string)函数将处理好的数据(将那一部分的数据uart_buf借助sprintf转换成seg_string是一个例子) 发送到电脑端。(根据题目要求,我们可以发送单片机实时采集到的温度、距离)。
void Uart_Proc(void)
{
if(uart_slow_down) return;
uart_slow_down = 1;
if(uart_buf_index >= 6)
{
uart_buf_index = 0;
sprintf(seg_string,"%s",uart_buf);
Uart_Send_String(seg_string);
}
}
3、Uart_Timer2_Init(void)
首先,在STP软件的波特率发生器里面进行如下设置
其次,在复制的代码后面添加 ES = 1;
这一部分完整代码如下:
void UartInit(void) //4800bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0x8F; //设定定时初值
TH1 = 0xFD; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1;
}
4、void Uart_Send_String(unsigned char *uart_string)
苦记!苦记!苦记!苦记!苦记!苦记!
多默写!多默写!多默写!
就慢慢地从一无所有到略有小成!
void Uart_Send_String(unsigned char *uart_string)
{
if(*uart_string !=‘\0’)
{
SBUF = *uart_string;
while(TI==0);
TI = 0;
uart_string++;
}
}