2.Uart串口入门-四大基本部分

一、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++;
      }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值