您当前的位置:五五电子网电子知识单片机-工控设备源码-程序8031单片微机串行口的应用 正文
8031单片微机串行口的应用

8031单片微机串行口的应用

点击数:7462 次   录入时间:03-04 11:43:15   整理:http://www.55dianzi.com   源码-程序

  8031单片微机因具有体积小,资源丰富,性能价格比优等特点,近十年来在我国获得了极其广泛的应用。它内部的可编程全双工串行通讯口具有软件编程方便,使用可靠的特点。

  在数据传送和数据通讯中受到用户的亲睐。本文就8031串行口的应用作一介绍。

  一、利用8031串行口控制键盘和显示器

  8031串行口的方式0(移位寄存器输入/输出方式)可用于键盘和显示器控制,其硬件结构如图1所示。

  图中外接8片8位串入/并出移位寄存器74LS164作为8位LED显示器的静态控制端口。由于显示器工作是静态的,因而主程序可不必扫描显示器,从而使CPU有更多的时间处理其它事务。这类应用常见于小型测量仪表的显示中。

  下面给出更新显示器显示的子程序和键盘扫描子程序的清单及其简单说明。

  显示子程序:

  DIR:  SETB P3.3    l开放显示器传送控制

  MOV R7,# 08H

  MOV RO.#5FH  ;5FH~58H为显示缓冲器

  DLO: MOVA,@RO    ;取出要显示的数据

  ADD A,#ODH    ;加上偏移量

  MOVC A,@A+PC  ;取出字形

  MOV SBUF,A    ;送出显示

  DLI:    JNB TI,DL1    ;输出完否?

  CLR TI    ;完,清中断标志

  DEC RO    ;再取下一个数

  DJNZ R7,DLO    ;8位显示数据输出完否?

  CLR P3.3    ;输出完,关闭显示器传送

  RET    ;返回

  SEGTAB;co“O”    ;字形代码表

  F9 “1"

  A4“2”

  BD “3”

  99“4”

  92“5”

  82 “6”

  F8 “7”

  80 “8”

  90 “9”

  88 “A”

  83 “B”

  C6“C”

  Al“D”

  86 “E”

  8F “F”

  BF“一”

  8C “P”

  9l “Y”

  键盘扫描子程序

  KEY:    MOV A.#OOH  ;向164输出OOH,对键盘扫描

  MOV SBUF,A

  KLO:JNB T1,KLO    ;输出完否?

  CLRTI    ;清0中断标志

  KL1:  JNB P3.4,PK1    ;第一捧键中有键闭合否?

  JB P3.5,KLI    ;第二排键中有键闭合否?

  PKl:  ACALLDI0    ;有键按下

  JNB P3.4,PK2    ;是否抖动引起

  JB P3.5.KL1    ;不是抖动引起

  PK2:  MOV R7,#08H  ;判断那一个健被按下

  MOV R6,# OFEH

  MOV R3,# ODH

  KL5:  MOV A,R6

  MOV SBUF,A    ;对列线逐个扫描

  KL2:    JNB TI,KL2

  CLR TI

  LNB P3.4.PKONE  ;是第一捧某键杏?

  JB P3.5,NEXT    ;是第二排某键否?

  MOV R4,#08H    ;是第二排中有键被接下

  AJMP PK3

  PKONE:  MOV R4,#OOH    ;是第一排中有键被按下

  PK3:  MOV A,#OOH  ;等待键释放

  MOV SUBF,A

  KL3:    JNB TI,KL3

  CLR TI

  KL4:  JNBP3.4,KL4JNBP3.5,KL4

  MOV A,R4    ;键释放,取出键码

  ADD A,R3

  RET    ;返回

  NEXT:  MOV A,R6    ;判下一列是否按下

  RLA

  MOV R6,A

  INC R3

  DJNZ R7,KL5    ;八列键都检查完否?

  AJMP KEY    ;完了,开始下一个扫描周期

  Dl0:  MOV R7,#OAH  ;延时10ms子程序

  DL:  MOV R6,# OFFH

  DL6: DJNZ R6,DL6

  DJNZ R7,DL

  RET

  二、利用8031串行口实现主从机通讯

  8031串行口工作方式3(或方式2)可用于实现单片机之

  间的主从机通讯,具体电路结构如图2。方式2和方式3都是

  被定义为9位异步通讯接口,只是波特率选取有所不同。

  利用串行口方式3实现多机通讯的软件“协议”如下:

  1.主机

  设置为串行口工作方式3,允许接收,第一次发送时设置

  TB8=1,以后发送时设置TB8=0。TB8=1(圭机发送的第九

  位数据)表示这组数是地址,TB8-o表示这组数是数据。

  2.从机

  设置为串行口工作方式3,允许接收。第一次接收设置

  SM2-1,只有当接收到的第九位数据RB8=1时才产生接收

  中断,这时接收到的这组数是地址。在程序中置位PSW. 1=1

  表示接收的是地址,PSW. 1=0表示接收的是数据。

  下面给出主从机之间通信的程序和说明。主机要发送的

  数据或控制命令放在片内RAM中,数据块首址为31H, 30H

  中的内容为数据块长度。

  ORG OOOOH

  LJMP MAIN

  ORG 0023H    ;串行口中断程序入口

  SJMP SERVE

  ORG 0040H    ;发送子程序人口

  TRANSFER:  MOV TMOD,#20H    ;设置T1为定时方式2

  MOV TH1,#0F3H    ;Tl置初值,产生1200波特率

  MOV TLl,# 0F3H

  MOV SCON,#OD8H    ;设置串行日工作方式3允许接收,TB8=1

  SETB TR1    ;启动Tl

  'SET EA    ;开中断

  CLR ES    ;禁止串行口中断

  START:    MOV SBUF,#OOH    .发0#从机地址

  WAIT1:  JNB TI,WAITI    ;等待发送完毕

  CIR TI    ;完毕清发送中断标志T1

  WAIT2':    JNB R1,WAlTZ    ;等待0#从机应答

  CLRRl

  MOV A,SBUF    ;判断是否为O#从机的应答信号

  JNZ START

  CIR TB8    ;是应答信号,清TB8表示以后是效据

  SETB ES    ;允许串行口中断

  MOV 2FH,# 31H

  MOV SBUF,30H    .发送数据块长度

  RET    ;子程序返回

  SERVE:  CLR TI    ;清发迭中断标志T1

  PUSH A    ;现场保护

  MOV A,RO

  PUSH A

  DJNZ 30H.TRAN;    ;数据发送完否?

  CLR ES    ;完毕,关串行口中断

  CLR TR1    ;关T1

  SJMP RETUNE

  TRAN:  MOV RO,2FH    ;取数据地址

  MOV SBUF.@RO    ;发送数据

  INC 2FH    ;数据地址加1

  RETUNE:POP A    ;恢复现场

  MOV RO,A

  POP A

  RETI    ;中断返回

  MAIN,  NOP    注程序(未给出)

  0#从机首先接收主机发来的数据块长度,并将它存入片

  内RAM30H单元中,然后接收数据或控制命令,并将它们存

  放到片内RAM中,起始地址为30H。0#从机接收程序清单如

  下;

  ORG 0023H    ;串行口中断程序入口

  SJMP SERVE.

  ORG 0040H    ;初始化程序入日

  RECEIVE:MOV TMOD.#20H    ;设置T1为定时方式2

  MOV TH1,# OF3H    ;T1置初值,产生1200波特率

  MOV SCON,#OFOH    ;设置串行口工作方式3,允许接收且SM2=1

  SETB TR1    ;启动T1

  SETB EA    ;开中断

  SETB ES    ;允许串行口中断

  SETB PSW.1    ;PSW.1=1是地址

  LJMP MAIN    ;转主程序(未给出)等待串行口中断

  SERVE:  CLR RI    ;清串行口发送标志Rl

  PUSH A    ;现场保护

  MOV A,RO

  PUSH A

  HOV A,R0

  PUSHA

  JBPSW.1,HELLO    ;是地址否?

  DATA:  MOV R0,2FH    ;是数据,建立数据地址指针

  MOV A,SBUF    ;取接收到的数据

  MOV @RO,A    ;转存到存贮器中

  INC 2FH    ;数据地址加1

  DJNZ 30H,RETUNE  ;躺数据接收完否?

  SETB PSW.1    ;置位PSW.1,表示接收

  SJMP RETUNE    ;数据完毕

  HELLO:  MOV A,SBUF    ;是地址,判断与本机地址是否相等

  JNZ RETUNE    ;不相等返回

  MOV SBUF,# OOH    .相符,发本机地址作为应答

  CLR PSW.1    ;清PSW.1表示以后为数据  ’

  CLR SM2    ;清SM2准备接收数据.

  MOV 2FH,#30H

[1] [2]  下一页


本文关键字:单片  源码-程序单片机-工控设备 - 源码-程序