单片机通过串口向电脑端发送数据&&电脑端发送数据控制led

本文介绍了如何配置单片机的串口通信,包括SCON和PCON寄存器的设置,以及如何使用定时器1来约定波特率。在发送数据时,通过UART发送SBUF中的数据,等待TI标志置1以确认发送完成。在接收端,利用中断处理RI标志,从SBUF读取数据并控制LED。中断用于接收端以响应电脑发送的数据。
摘要由CSDN通过智能技术生成

上节课我们学习了串口的理论部分,这节课我们要来学习实操部分。

要想实现单片机通过串口向电脑端发送数据,我们首先要来配置寄存器。

1.配置SCON

SCON寄存器中的SM0配置为0,SM1配置为1决定了串口工作在模式一,也就是8位UART, 波特率可变的工作模式。REN置1表示能接收到电脑端的数据(本节实验可置1也可以置0,因为暂时不用接收电脑端发送过来的数据),所以SCON=0x50或者0x40。这样SCON寄存器就配置完成了。

2.配置PCON

PCON中只需要把最高位SMOD0配置为1,使波特率加倍即可。所以PCON=0x80;。这样PCON就配置好了。

SBUF不需要配置,只需要赋值或者被赋值即可。

本实验串口需要配置的内容就这么多。

3.配置TH1定时器

本实验需要用到定时器1,通过定时器1的溢出来约定波特率,通过分频来控制收发器的采样时间,由于本实验不需要中断,所以定时器1中断无需打开

TMOD &= 0x0F;        //设置定时器模式,定时器1
    TMOD |= 0x20;        //设置定时器模式,定时器1
    TL1 = 0xF3;            //设置定时初始值,系统生成
    TH1 = 0xF3;            //设置定时重载值,系统生成
    ET1 = 0;            //禁止定时器中断,本程序只需要定时器溢出即可,不需要产生中断
    TR1 = 1;            //定时器1开始计时 

本实验的定时器采用8为重装,不需要在中断内部重新赋初值。

目前为止,本节课所需配置的所有东西都已配置完成。

接下来我们看原理图:

 第一个SBUF是写入数据,当8位数据全部写好后,通过TI发送出去,发送完成后TI置1,需要软件复位。

第二个SBUF是接收数据,当接受控制器接收好数据后,移入SBUF,接收完成后RI置1,需要软件复位。

定时器T1通过溢出率来约定波特率,控制收发器采样时间。

接下来我们看写完的代码:

 

首先,我们要写一个UART_SendByte(unsigned char Byte)函数来发送SBUF里面的数据,这时SBUF在左边,是被赋值的对象,当主函数调用这个函数时,参数为sec,每次调用后sec++,在函数内部,通过while循环判断TI是否为1,如果不为1则死循环,直到TI为1为止,数据才算发出去。数据发送完成后,软件复位TI=0;通过单片机的快速扫描,这个函数就实现了每隔一段时间,单片机串口向电脑端发送递增的数据。 主函数内部的 Delay(1)是为了消除晶振带来的误差。

所以本实验的第一个代码就完成了。

接下来我们看本实验的第二个代码:电脑端发送数据控制led

这个代码相比于上一个代码,我们需要用到UART的中断,所以我们在配置寄存器的时候,还需要将UART的中断打开,即ES=1,EA=1,当TI和RI其中一个中断信号经过时,都会产生中断。

我们来看代码实现:

 在中断内部,我们首先要判断产生的中断信号是TI还是RI,只有RI中断信号可进入中断要操作的程序,此时的SBUF在等号右边,是赋值给P2口,由电脑端直接写入,此时电脑就可以直接通过写入的数据控制led亮灭,写入成功后,在利用上个代码中的发送SBUF,将数据原封不动的返回电脑,最后再将RI置0,为下一次带电脑控制led做准备。

QS:为什么SBUF作为发送数据的时候,不需要用到中断,而作为接收端的时候则需要呢?

答:当SBUF作为发送端时,只需要发送数据到电脑端上,并不需要单片机产生任何操作,所以不需要打断单片机的主程序,进入中断执行另一个程序。

当SBUF作为接收端时,电脑通过发送数据控制led,单片机需要做出相应操作,所以需要中断。

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值