(玩电子) 电子技术学习与研究
当前位置:单片机教程网 >> 基础教程 >> 浏览文章

22课:单片机串行口通信程序设计

作者:佚名   来源:本站原创   点击数:x  更新时间:2007年08月14日   【字体:

1.串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。


<单片机串行口通信程序设计硬件连接图>

   例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON就能了。

-----------------单片机串行口通信程序设计列子--------------------------

ORG 2000H

START: MOV SCON,#00H ;置串行口工作方式0

MOV A,#80H ;最高位灯先亮

CLR P1.0 ;关闭并行输出(避象传输过程中,各LED的"暗红"现象)

OUT0: MOV SBUF,A ;开始串行输出

OUT1: JNB TI,OUT1 ;输出完否

CLR TI ;完了,清TI标志,以备下次发送

SETB P1.0 ;打开并行口输出

ACALL DELAY ;延时一段时间

RR A ;循环右移

CLR P1.0 ;关闭并行输出

JMP OUT0 ;循环

说明:DELAY延时子程序能用前面我们讲P1口流水灯时用的延时子程序,这里就不给出了。

二、串行口异步通信

org 0000H

AJMP START

ORG 30H

START:

mov SP,#5fh ;

mov TMOD,#20h ;T1: 工作模式2

mov PCON,#80h ;SMOD=1

mov TH1,#0FDH ;初始化波特率(参见表)

mov SCON,#50h ;Standard UART settings

MOV R0,#0AAH ;准备送出的数

SETB REN ;允许接收

SETB TR1 ;T1开始工作

WAIT:

MOV A,R0

CPL A

MOV R0,A

MOV SBUF,A

LCALL DELAY

JBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1

AJMP WAIT

WAIT1: JBC RI,READ ;如果RI等于1,则清RI并转READ

AJMP WAIT1

READ:

MOV A,SBUF ;将取得的数送P1口

MOV P1,A

LJMP WAIT

DELAY: ;延时子程序

MOV R7,#0ffH

DJNZ R7,$

RET

END

    将程序编译通过,写入芯片,插入实验板,用通读电缆将实验板与主机的串行口相连就能实验了。上面的程序功能很简单,就是每隔一段时间向主机轮流送数55H和AAH,并把主机送去的数送到P1口。能在PC端用串行口精灵来做实验。串行口精灵在我主页上有下载。运行串行口精灵后,按主界面上的“设置参数”按钮进入“设置参数”对话框,按下面的参数进行设置。注意,我的机器上用的是串行口2,如果你不是串行口2,请自行更改串行口的设置。

   设置完后,按确定返回主界面,注意右边有一个下拉列表,应当选中“按16进制”。然后按“开始发送”、“开始接收”就能了。按此设置,实验板上应当有两只灯亮,6只灯灭。大家能自行更改设置参数中的发送字符如55,00,FF等等,观察灯的亮灭,并分析原因,也能在主界面上更改下拉列表中的“按16进制”为“按10进制”或“按ASCII字符”来观察现象,并仔细分析。这对于大家理解16进制、10进制、ASCII字符也是很有好处的。程序本身很简单,又有注释,这里就不详加说明了。

三、上述程序的中断版本

org 0000H

AJMP START

org 0023h

AJMP SERIAL ;

ORG 30H

START:

mov SP,#5fh ;

mov TMOD,#20h ;T1: 工作模式2

mov PCON,#80h ;SMOD=1

mov TH1,#0FDH ;初始化波特率(参见表)

mov SCON,#50h ;Standard UART settings

MOV R0,#0AAH ;准备送出的数

SETB REN ;允许接收

SETB TR1 ;T1开始工作

SETB EA ;开总中断

SETB ES ;开串行口中断

SJMP $

SERIAL:

MOV A,SBUF

MOV P1,A

CLR RI

RETI

END

本程序没有写入发送程序,大家能自行添加。

发表评论】【告诉好友】【收藏此文】【关闭窗口

文章评论

188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help