单片机C语言数码管设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4 系统软件设计

4.1 固件程序设计

根据图3.12所示系统结构,编写AT89C51的软件程序。设计软件流程图如4.1所示。

图4.1 单片机程序流程图

4.1.1 AT89C51软件结构与组成

AT89C51单片机内部有一个功能很强的全双工串行异步通信接口,能方便地

构成双机或多机通信系统。本文介绍的是PC 机与AT89C51单片机构成的点对点双机通信系统。

串行通信程序设计主要有微机发送接收程序和单片机发送接收程序,微机上的发送和接收程序主要采用计算机高级语言编写如:C/C++ , VB 等,在单片机上主要用汇编或C 编写,在使用串口之前,必须先对串口进行初始化,主要是设置产生波特率的定时器、串口控制和中断控制。具体步骤如下:

a) 确定定时器1的工作方式--编程TMOD 寄存器;

b) 确定串口的控制--编程SCON ;

c) 串口的中断方式,必须开CPU 和源中断--编程IE 寄存器;

d) 计算定时器1的初值--装载TH1,TL1;

e) 启动定时器1--编程TCON 中的TR1位。

在方式1和方式3下计算波特率时,如果把定时器T1作为波特率发生器,其公

式如下:

波特率=2SMOD /32×定时器T1溢出率

T1溢出率=T1计数率/产生溢出所需的周期数

式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值〔X 〕有关。

定时器T1工作于方式0:溢出所需周期数=8192-X

定时器T1工作于方式1:溢出所需周期数=65536-X

定时器T1工作于方式2:溢出所需周期数=256-X

因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。这种方式下,T1的溢出率(次/秒)计算式可以表示为:

T1溢出率=f OSC /12(256-X)

于是波特率(位/秒)表达式为: BR=()X f OSC

SMOD

-⨯25612322

单片机的晶振的频率为11.0592MHz 。程序中设置串口波特率为9600位/秒,

串行工作方式1,把16进制数55H 发送出去。

串口工作方式1的波特率为:BR=()X f OSC

SMOD

-⨯25612322fosc

因此定时器的计数初值为:X=256-BR f OSC

SMOD ⨯⨯3842

将各个数据代入公式中,可以计算出X=(252)10 =(FD)16

AT89C51串行口主要由2个串行数据缓冲器 (SBUF)、发送控制器、接收控制器、发送端口、接收端口等组成。串行口的工作方式和波特率由专用寄存器SCON 和PCON 控制。编程时,首先将串行口设置为工作方式1,以便实现点对点的异步通信。

发送时,只要执行一条“MOV SBUF, A ”指令,就启动了发送功能,累加器A 中的数据就会按事先设置的方式和波特率从TXD 端(P3. 1)串行输出。一组数据发送完毕,发送中断标志位TI= 1,串行口向CPU 请求中断。此时,令TI=0,就可发送下一组数据。

程序清单如下:

ORG 0000H

LJMP MAIN

ORG 0100H

Main :

MOV SP,#60H

MOV TMOD,#20H ;定时器1工作于方式2

MOV TH1,#0FDH ;设置波特率为9600bps

MOV TH1,#0FDH

MOV SCON,#50H ;串口控制初始化

MOV PCON,#00H ;设置SMOD=0,波特率系数倍增位为0

SETB TR1

Mainloop :

MOV SBUF,#55H ;发送“R ”

SENDWT :JNB TI,$

CLR TI

JNB RI,$

MOV A,SBUF

CLR RI

CJNE A,#77,MAINLOOP

LOOP: MOV A,P1

JNB ACC.0, UP ;当P1.0口为低电平时,执行“UP”子循环

JNB ACC.1,DOWN ;当P1.1口为低电平时,执行“DOWN”子程序 AJMP LOOP

UP: MOV A,#20H

MOV SBUF,A ;向PC机发送“U”

JNB TI,$

CLR TI

MOV DPTR,#7FFFH ;将P2.6口与片选74LS373相连

MOV A,#3EH ;七段数码管显示“U”

MOVX @DPTR,A

AJMP LOOP

DOWN: MOV A,#21H

MOV SBUF,A ;向PC机发送“D”

JNB TI,$

CLR TI

MOV DPTR,#BFFFH ;将P2.7口与片选74LS373相连

MOV DPTR,#5EH ;七段数码管显示“D”

MOVX @DPTR,A

AJMP LOOP

JBC TI, Mainloop

AJMP SENDWT

END

4.2 PC机串口端应用程序

现代的世界是一个高度自动化的世界,各种设备都可以和计算机作连线,而最简单的自动化连线方式就是使用串行通信。VB提供了串行通信控件,让开发者可以方便快捷地开发串行通信程序。利用计算机进行串口通讯是自动化将来发展的一种方向。

4.2.1 串口实现方式

利用VB进行串口通信的开发,主要是使用一个控件:Mscomm控件。它的目的是为了让用户设计一个系统可以和串行端口进行沟通及传送数据,提供了下列两种方式来处理信息的流动:

事件驱动:是处理连接端口通信的一种有效方法。当有事件发生时,程序会被告知。例如,在有一个字符到达或者一个变化发生时,程序都可以利用Mscomm 控件来侦测并处理这些通信事件及通信错误。预先将程序写入控件的事件程序区块中,一旦事件发生即可自动执行该段程序。

程序通过检查CommEvent属性的值来循环查询事件和错误。例如,对于某些程序,并没有必要每接收一个字符时都产生事件,有时需要接收多个字符或数据包后再回应。固定地向设备查询状态的方式较好。

这两种方式都可达到数据读写的目的,使用时要看实际系统环境而定。

4.2.2 串口通信的相关控件

在利用Mscomm控件进行编程以前,首先要了解一下这个控件的主要属性:CommPort:设置或返回通信连接端口代号。程序必须指定所要进行通信的端口号,系统才会使用它与外界进行通信。端口号的范围是1-16,一般的计算机只有一个或两个端口号,因此一般我们使用的端口号的范围就是1-2。

Settings:设置初始化参数。以字符串的形式设置或返回连线速度、校验码、数据位、停止位四个参数。连线速度又叫波特率,即每秒通信的以Bit为单位的数据量,一般使用9600、4800等波特率。

PortOpen:设置或返回通信连接端口的状态,即端口的“打开”和“关闭”两种状态。使用串口进行通信前要打开串口,使用完毕后要关闭串口。在VB中用逻辑值True代表打开,False代表关闭。

Input:从输入寄存器返回并删除字符。即从串口读取数据并清除寄存器中

相关文档
最新文档