您的位置 首页 5G

单片机学习之十八:串行通讯程序:单片机发送

一、实验现象:每次按下k0按键,由单片机向电脑发送数据62。二、实验目的掌握单片机串行通讯的概念、特点掌握串行通讯波特率的计算方法…

一、试验现象:

每次按下k0按键,由单片机向电脑发送数据62。

二、试验意图

把握单片机串行通讯的概念、特色

把握串行通讯波特率的核算办法

把握max232接口芯片的衔接办法

把握办法1串口通讯的简略程序编写

三、试验任务分析:

在这个试验里边,咱们来学习编写一个单片机和PC机之间的通讯程序。首要咱们来学习一些和串行通讯有关的理论常识。

通讯的根本办法分为并行通讯和串行通讯。因为MCS-51系列单片机有一个异步全双工(全双工:指的是数据能够一起进行双向的传送)的串行口,所以咱们只研讨串行通讯的问题。这儿有个新概念-异步,下面咱们简略的给咱们解释一下。

(一)、异步通讯的概念

因为单片机自带的串行口是异步的,所以咱们现在只研讨异步通讯问题

在异步传送中,一帧信息是一位一位进行传送的。每一个要传送的字符要用“开端位”和“中止位”作为字符开端和完毕的标志,传送的时分每个字符的的组成格局如下:

1帧信号=开端位+数据位(可所以5、6、7、8位数据)+中止位,详细格局由通讯两边约好。

(二)、关于异步通讯需求了解的常识

从异步通讯的特色中咱们能够知道,在异步数据传送中,通讯两边事前有必要约好两项事宜:

(1)、字符格局:两边要约好两者之间以什么样的格局传递信息,比方字符的编码办法、奇偶校验办法、以及开端位和中止位的规则。在单片机中咱们是靠挑选串口的作业办法来约好格局的,怎么挑选稍后介绍。

(2)、波特率:在异步数据传送中,通讯两边传送数据的速率应该相同。咱们用“波特率”作为衡量数据传送速率的目标,它界说为“每秒传送的数据位数”。

例如:数据传送的速率是120字符/秒,每一个字符假如是10位,则传送的波特率为:120×10=1200(比特)

一般的,异步传送速率在50~9600比特之间。

可见,在通讯程序中,咱们首要应该进行初始化作业,约好两边异步通讯的相关协议。

那么怎样进行初始化呢?这就涉及到串行接口的操控问题,下面咱们来谈谈这个问题。

(三)、MCS-51的串行通讯接口

MCS-51单片机内部有一个功用很强的异步全双工串行口,该串行口有四种作业办法,供不同的场合运用(怎么挑选后边介绍)。通讯的波特率能够由咱们编写的软件设置,由片内的定时器/计数器T1或许T0发生。下面咱们就来详细的介绍一下。

1、串行口的作业办法

串行口的四种作业办法中,串行通讯只运用办法1、2、3,办法0首要用于扩展I/O口,这种办法咱们不做详细阐明,咱们可参阅相关教材。

办法1:

这是串口通讯中最常用的办法,为10位异步通讯接口,一帧信息(10位)=开端位(0)+8位数据(低位在前)+中止位(1)。

别的,办法1还有一个特色,波特率可变,咱们能够灵敏进行设置(怎么设置咱们稍后介绍),因而这种办法在串行通讯中运用的十分广泛,咱们在该试验中,就挑选这个作业办法。

办法2和3:

一般用于主-从式多机通讯的状况下,本试验选用的是办法1,所以咱们暂时也不介绍拉!

2、串行口作业办法的挑选

已然决议选用办法1,那么就要对操控寄存器初始化了。串行口的四种通讯办法,运用哪种由特别功用寄存器SCON决议(也在特别功用寄存器区,地址是98H,可位寻址,它的各位在单片机复位的时分被清零)。SCON各位阐明如下:图

SM0、SM1:串行接口的作业办法挑选:

00-办法0;01-办法1;10-办法2;11-办法3。因为在该试验中咱们挑选办法1,所以应该把SM0和SM1置为01。

SM2:答应办法2和办法3进行多机通讯的操控位,所以假如咱们运用办法2、3进行多机通讯时,将该方位1;可是在本试验中咱们选用办法1,所以SM2置0即可。

再来看看TI:串行口发送中止标志。

当一帧信息发送完结时,发送中止标志TI置1,向CPU请求中止。所以在有串口中止程序的时分,咱们初始化的时分应该把这一方位0,以免还没有开端发送就请求中止啦!(咱们先这样简略的解释一下,说多了咱们可能会晕哦,假如想了解的愈加详细,自己参阅相关教材吧!^_^)。

RI:串行口承受中止标志。

当串口承受完一帧信息后,承受中止标志RI置1,向CPU请求中止,假如CPU答应中止,就进入串行中止服务程序。相同,在有串口中止程序的时分,初始化的时分也应该把RI清0,以免还没有开端承受就请求中止啦!

可是这儿需求阐明一点:CPU事前不能分辩是TI仍是RI的中止请求,所以有必要在中止服务程序中加以判别,然后在程序顶用软件清零。

REN:答应串行口承受操控位。当REN=1时为答应串行口承受数据;当REN=0时为制止承受状况。在这个试验里边,因为咱们用单片机发送数据,所以这一方位0置1均可,咱们就把它置0吧。

TB8:在办法1中该位没有用,在办法2、3中,是要发送的第九位数据。所以这一位是1和0均可。

RB8:在办法2、3中,它是承受到的第九位数据位。在办法1中,当SM2=0,RB8是现已承受的中止位。

综上所述,咱们这个试验里边,对串口的初始化程序可所以:mov scon,#40h

3、串口波特率的核算

当串口作业于办法1,波特率是可变的,咱们能够灵敏的进行设置,经过给计数器置入不同的初值,发生不同的波特率。

计数初值N和波特率之间的联系能够用下面的公式描绘:

N=28-(2SMOD×fosc)/(32×12×波特率)

其间的SMOD是特别功用寄存器PCON的最高位,叫做波特率挑选位,格局如下,其间和串口有关的只要D7位,其他的咱们就不研讨了。

它的设置能够经过如下的程序完结:

mov pcon,#00h ;使smod=0

mov pcon,#80h ;使smod=1

下面经过比如阐明N的核算办法,例如:

(1)、体系晶振12MHZ,当SMOD=1,欲发生的波特率为2400,时间常数N的核算如下:

N=256-(2×12×106)/(32×12×2400)=256-26.04=230=E6H

(2)、体系晶振12MHZ,当SMOD=0,欲发生的波特率为2400,时间常数N的核算如下:

N=256-(1×12×106)/(32×12×2400)=256-13.02=243=F3H

关于N的核算咱们就简略的说这么多吧,后边的阐明里边有一个常用的波特率设置的表格,在设置波特率的时分能够进行查阅。

从上面咱们能够看到,SMOD取0或许1都能够发生2400的波特率,那么究竟应该怎么挑选呢?其实,SMOD的挑选影响着波特率的准确度。关于这部分内容的详细评论咱们能够参阅相关教材,咱们就不多说了。

4、数据的发送进程

设置好了串口的作业办法和波特率,咱们就能够进行数据的发送拉。发送的进程如下:CPU履行一条将数据写入发送缓冲区SBUF的指令即可发动发送(如mov sbuf,a),串行数据从TXD引脚输出,发送完一帧数据后,由硬件把TI置位。

(五)、单片机的串口电平转化电路

以上咱们介绍的是单片机串口的界说和设定,在实际运用的时分,单片机串口输出的是TTL电平,传输的间隔十分有限,不超越1.5m。而电脑的串口输出的是RS232电平,两者的电平并不相同,需求外接接口进行电平匹配,这个电平转化芯片选用专用芯片max232来完结。

在学习板的电路上,是选用3线制衔接串口,也便是说和电脑的9针串口衔接3条线即可,RXD(串行输入通道)、TXD(串行输出通道)、GND,对咱们来说现已够用了。详细的电路如下图所示,这是一个典型电路,能够直接运用:

对这个电路咱们简略解释一下:

T1IN、T2IN: 两路TTL电平输入引脚,衔接单片机的串行输出TXD脚。

T1OUT、T2OUT: 两路RS232电平输出引脚,衔接电脑9针串口的串行输入RXD。

R1IN、R2IN: 两路RS232电平输入,衔接电脑9针串口的串行输出TXD端。

R1OUT、R2OUT:两路TTL电平输出,衔接电脑9针串口的串行输入RXD端。

4个外接%&&&&&%进行电压匹配和电源去耦。

经过MAX232的TTL和RS232输入输出端口,主动调理了单片机串口的TTL电平信号和RS232串行通讯信号的电平匹配。

趁便说一句:本试验是单片机和电脑之间的串行通讯,两者电平不同,所以需求电平转化芯片,假如是单片机和单片机之间的通讯,两者都是TTL电平,就不需求进行电平转化,两个串口能够直接经过导线衔接。

(六)、串口调试帮手

为了能够在电脑上看到单片机发送过来的数据,咱们有必要用一个软件来调查通讯状况。这儿选用“串口调试帮手”软件,这是一个绿色软件,无需装置,能够直接运转。它的设置办法可见下面的图解:

四、试验程序

org 0000h

clr p1.5

;以下是串口初始化程序

mov scon,#40h ;挑选串口作业于办法1

mov tmod,#20h ;定时器T1设置为作业办法2,用作波特率发生器

mov tl1,#0f3h ;依照波特率为2400核算初值

mov th1,#0f3h ;把计数初值送入常数缓冲器

mov pcon,#80h ;smod=1,波特率变成4800

setb tr1 ;发动定时器T1

;以下判别是否按键k0按下

wait1: jb p1.1,wait1 ;k0没有按下,等候

acall del10ms ;延时10ms去颤动

jb p1.1,wait1 ;再次查询k0,是颤动回来

wait2: jnb p1.1,wait2 ;等候按键弹起

mov a,#62h ; 01100010送到a

mov sbuf,a ;发送信息,传送的一帧信息为:0+01100010+1

ajmp wait1 ;回来持续查询k0是否按下

del10ms: mov r7,#20 ;延时10ms子程序

del1: mov r6,#0ffh

del2: djnz r6,del2

djnz r7,del1

ret

end

五、几点阐明

1、该比如中,单片机向电脑发送的是一个数据,所以咱们咱们在串口帮手上挑选16进制显现,就会显现数据62,假如咱们不挑选16进制显现,那么发送的便是ASCII码,咱们能够试一下,这时显现的是字符b。

2、下表是串口常用的波特率设置,便于咱们运用的时分查阅:

作业

办法

波特率

Fosc=6M

Fosc=12M

Fosc=11.0592M

办法1

或许

办法3

SMOD

TMOD

TH1

SMOD

TMOD

TH1

SMOD

TMOD

TH1

62500

1

20

FFH

19200

1

20

FDH

9600

0

20

FDH

4800

1

20

F3H

0

20

FAH

2400

1

20

F3H

0

20

F3H

0

20

F4H

1200

1

20

E6H

0

20

E6H

0

20

E8H

600

1

20

CCH

0

20

CCH

0

20

D0H

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/266885.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部