毕业设计(论文)-单片机双机通信系统设计

上传人:na****u 文档编号:56741991 上传时间:2022-02-22 格式:DOC 页数:36 大小:475.50KB
返回 下载 相关 举报
毕业设计(论文)-单片机双机通信系统设计_第1页
第1页 / 共36页
毕业设计(论文)-单片机双机通信系统设计_第2页
第2页 / 共36页
毕业设计(论文)-单片机双机通信系统设计_第3页
第3页 / 共36页
点击查看更多>>
资源描述
浙江海洋学院本科生毕业论文单片机双机通信系统设计摘要在控制领域中,单独的单片机系统往往不能满足全部的要求,通常需要两个或者多个单片机串行协同工作。单片机串行通信是单片机的一个重要应用,串行通信用一根传输线按位传送数据,每传送一个数据或字符都要符合一定的格式。根据通信格式,串行通信分为两种基本方式:同步通信和异步通信。同步通信具有至少1根时钟线、12根数据线,利用时钟沿对齐数据,传送数据的速率较快。同步通信无专门的时钟线,收发双方依据事先约定好的位速率确定各个数据位的时间位置,传送速率较低。但是同步通信相对于异步通信而言对硬件的要求高。本设计采用串行异步通信方式,利用两片单片机来设计一个系统,实现双片单片机的串行通信。串行通信采用单片机异步串行通信接口,单片机的接口是单片机和外部设备之间信息交换和控制的桥梁,通过本次设计将对单片机端口扩展有深入的认识。本文主要阐述双机通信的原理,包括串行通信的类型,通信协议的实现,以及双机通信的电路连接方案。同时介绍软硬件的设计,以及系统仿真和代码烧写。整个系统包括作为输入的矩阵键盘,两块单片机之间的电路连接和作为输出的数码管显示电路。本次设计成功完成单片机双机通信系统的设计,即实现发送端单片机将外部键盘输入发送到接收端,同时双机外扩数码管同时显示键值的功能。关键词:串行通信;单片机;硬件全套设计加扣 301225058231AbstractIn the control field, separate single-chip microcomputer system often cannot satisfy all the requirements, usually need two or more microcontroller serial work together. Single-chip microcontroller serial communication is an important application of single-chip microcontroller. Serial communication use a root according to a transmit data transmission line, every sends a data or character must meet certain format. According to communication format, serial communication is divided into two basic ways: synchronous communication and asynchronous communication. Synchronous communication with at least one clock line, 1 2 roots, using clock data along the alignment data, transmits data rate faster. Synchronous communication without special clock line, sending and receiving both sides agree beforehand good bit rate according to determine the time position each data bits, transfer rate is low. But synchronous communication for asynchronous communication of relative to the hardware requirements high. This design USES the serial asynchronous communication mode, use two slices of single-chip microcomputer to design a system to realize double feature MCU serial communication. Serial communication adopts single-chip asynchronous serial communication interface, SCM interface is SCM and external equipment information exchange and control between the Bridges, through this design of single-chip microcomputer port extension will have in-depth understanding. This paper mainly expounds the principle of double machine communication, including the type of serial communication, communication protocol, and the realization of double-machine communications circuit connection scheme. Also introduces the design of hardware and software system, and simulation and code burning. The system includes as input matrix keyboard, the circuit connection between two microcontroller as the output of digital tube and display circuit. This design successfully completed microcontroller dual machine communication system design, namely realize the sender microcontroller will external keyboard input sent to the receiver, and double turned digital tube expanding shows both keys function.key word: serial communication;SCM;hardware目录前言1第1章 总体方案的设计11.1系统功能要求11.2方案设计比较11.2.1双机并行通信方案11.2.2双机串行通信方案21.3系统总体框图3第2章 系统硬件设计42.1常用串行扩展总线42.1.1 I2C总线42.1.2 SPI总线42.2STC89C52RC单片机介绍52.3所用特殊功能寄存器的说明62.3.1串行接口控制寄存器62.3.2串行接口工作方式72.3.3定时器寄存器及其工作方式82.3.4波特率的计算92.4矩阵键盘输入电路的设计92.5数码管显示电路的设计102.6双机串口通信电路的设计11第3章系统软件设计123.1编程软件KEIL的介绍123.2程序流程图133.3矩阵键盘代码143.4数码管显示代码153.5双机串口通信代码153.5.1发送部分代码153.5.2接收部分代码16第4章系统仿真与代码烧写174.1系统仿真174.2代码烧写18小结20致谢21参考文献22附录1电路系统总体图23附录2PCB板示意图24附录3实物图25附录4代码26前言随着计算机技术的快速发展和广泛应用,从智能家用电器到工业上的集散控制系统(DCS)都采用了上位机与下位机基于串行通信的主从工作方式,这样就充分结合利用了微型计算机分析处理能力强、速度快的特点及下位机面向控制、使用灵活方便的优势。51系列的单片机内部包含有数据存储器、程序存储器、两个16位的定时器/计数器、通用异步串行收发器这些资源。在广泛的应用中,单独一片单片机所能完成的任务是有限的,因此而常常需要扩充I/O接口、定时器/计数器、串行通信接口、存储器。一个系统中使用两个或两个以上的单片机时,单片机之间就需要通过互连来进行数据通信。51系列的单片机带有串口,利用串口进行互连通信极为方便,并且可以减少端口数量。但如果系统要求扩充的资源是对外连接的串口,串行口上可以外接串行输入并行输出的移位寄存器74LS164,或外接并行输入串行输出的移位寄存器74LS165。为了增加通信距离,减少通道中电源干扰,可以在通信上路采取光电隔离的方法,进行双机串行通信。双机通信系统设计中,单片机内部的串行接口是全双工的,它在接收数据的过程中同时能够发送数据。两个串行接口数据缓冲器可以通过特殊功能寄存器SBUF访问,写入SBUF的数据用于发送,接收的数据从SBUF中读出。常用的数据传输方式有单工、半双工、全双工,本设计采用单工的传输方式。串行通信有两种形式,(1)异步通信:这种通信方式的特点是接收器和发送器都有各自独立的时钟,然而它们之间的工作不是同步的,异步通信方式用一帧表示一个几位的字符,其内容排布:首先一个起始位,接着几个数据位,最后紧跟的是一个停止位。(2)同步通信:这种通信方式的特点是发送端和接收端由共同的一个时钟源控制,为了解决在异步通信方式中每传输单位字符要加上起始位和停止位从而占用大量传输时间的情况,同步传输通信方式会去掉起始位和停止位,与传输数据块时会首先送出同步字符标志来控制数据的发送。本文将讨论如何采用一个异步串行通信完成设计。单片机对串口的控制是通过对串行口控制寄存器SCON和波特率控制寄存器PCON的设置实现的。SCON是一个可位寻址的特殊功能寄存器,通过设置SCON的SM0位和SM1位,可以使单片机有四种不同的工作方式供选择。在和PC机串行通信时,通常设置为方式1或者是方式3,主要区别在于方式1的数据格式是8位,方式3的数据格式是9位,其中第9位SM2是多机使能位,编辑第9位就能实现单片机的多机通信。波特率控制寄存器PCON的最高位SMOD为串行口波特率控制位,通过设置SMOD为1可以获得更大的通信速率,并且SMOD是不可以位寻址。PC机和单片机通信时,其通信速率由定时器T1或定时器T2产生(52系列单片机),定时器T1工作方式2时,通信波特率的计算公式:波特率(SMODfosc)3212(256TH1)。其中fosc是晶振频率,为获得准确的通信速率,Fosc通常为12MHZ。通过定时器T0,T1方式寄存器TMOD来设置定时器,门控位GATE为是否受外部引脚INT0,INT1电平控制,C/T定时器方式和外部计数方式控制位,工作方式选择位M1、M0。串行口控制寄存器SCON是一个特殊寄存器,具有位寻址功能,SCON包括串行口的工作方式选择位SM0,SM1,多机通信标志SM2,接收允许位REN,发送接收第9位数据TB8,RB8,以及发送和接收中断标志TI,RI。第1章 总体方案的设计1.1系统功能要求以两片51单片机为主要硬件,应用单片机的串口通信功能完成双机通信任务,通过进行通信及计算机编程等系统分析方法得到锻炼。设计单片机双机通信系统,要求通过键盘给一个单片机输入通信内容时,另一个单片机能接收到该内容,而且整个操作过程中两个单片机的外扩数码管都能显示通信内容。同时完成单片机双机通信系统的PCB设计、硬件制作与功能调试。1.2方案设计比较1.2.1双机并行通信方案1.单向方式并行通信的实现 如果只需要一片单片机向另一片单片机发送数据,即单向传输数据,可以采用单向并行通信方式,如图1.1所示。图中单片机A为数据发送部分,单片机B为数据接收部分,两片单片机之间通过端口传输数据,另外通过几根控制线用于控制两者的通信。单片机A将数据放到P1上,同时向单片机B发送一个信号提示数据发送后,单片机B接收数据并发回一个信号应答,提示单片机A准备下一个数据。这样就能进行数据的并行传输,利用单向并行通信方式可以充分利用单片机的资源扩充通信接口,但对于控制线的状态变化要求非常严格。单片机A P1 CLK STB单片机BP1BUSYINT图1.1 单向方式并行通信原理图2.主从方式并行通信的实现 主从方式并行通信传输数据需要确定一片单片机为主机,另一片单片机为从机。两片单片机之间可以护发数据,但相应的控制信号主要是由主机进行控制,其电路连接如图1.2所示。当主机用于表明数据发送方向的控制位DIR为1时,表明双机之间的数据传输是主机发送从机接收状态。主机在端口STB处产生一个脉冲并将数据放到端口P1处,从机准备接收数据。主机在CHK端置高电平,从机查询到ACK端口信号后,就会接收数据,这样就完成数据从主机到从机的输过程。当主机用于表明数据传输方向的控制位DIR为0时,表明双机之间的数据传输时从机发送主机接收的状态。主机在端口STB处产生一个脉冲,提示从机可以发送数据。主机查询ACK处的状态,当从机的CHK端发送有效信号,说明从机已将数据放在数据端口。主机就可以接收数据,并通过CHK端向主机的ACK发信号,表示数据接收成功,这样就完成了数据由从机到主机的传输过程。双机之间的数据传输主机处于控制信号的状态,达到数据的有效传输。主从方式并行通信双机之间互相发送数据,而本次单片机双机通信系统设计只需采用单向的数据发送模式。单片机A P1 DIR STB ACK CHK单片机BP1DIRINTCHKACK图 1.2 主从方式并行通信原理图并行通信接口方式需要采用8位端口来传输数据,同时需要设置几个控制信号来控制。根据单片机端口内部结构的特点,这些端口的端口线可以直接相连,从而使两单片机之间并行通信接口的实现不用另外的硬件电路设备。1.2.2双机串行通信方案异步串行通信以字符为单位进行传送,用一帧来表示一个字符,其内容如下:一个起始位,仅接着是若干个数据位,最后是一位停止位。TXD为串行数据输出端,RXD为串行数据输入端。发送端数据由TXD发送至接收端RXD被接收,接收端数据由TXD发送至接收端RXD被接收,电路连接图如图 1.3 所示。单片机A TXD RXD GND单片机BRXDTXDGND图1.3 通用异步通信方式原理图异步串行双机通信仅需采用端口P3的低两位P3.0,P3.1作为复用功能的TXD和RXD,同时对特殊功能寄存器SCON和PCON进行设置。串行通信相对于并行通信而言连线少,连接可靠,适合近距离通信。在对通信速度要求不高的条件下可以采用串行通信,所以本次设计采用异步串行通信的方式实现双机通信系统的设计。1.3系统总体框图根据设计要求和设计思路指定整个系统的系统框图如图 1.4 所示单片机B(接收端)单片机A(发送端)键盘输入数码管显示数码管显示图 1.4 系统总体框图整个系统有三大部分组成,(1)键盘输入电路:为双机通信提供外部输入通信信号,本设计采用键盘输入数字的形式提供通信信号。(2)数码管显示电路:采用数码管在双机通信的同时显示通信的内容,便于直观。(3)双机通信电路:采用异步串行通信实现双机系统的通信。第2章 系统硬件设计2.1常用串行扩展总线串行通信的基本特征是数据逐位顺序进行传送,串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平等)不同,形成了多种串行通信的协议与接口标准。常用的有:通用异步收发器(UART),I2C总线,CAN总线,SPI总线,RS485、RS232C标准。以下简单的介绍IIC总线和SPI总线的特点和协议。2.1.1 I2C总线I2C总线是PHLIIPS公司推出的一种高性能的同步串行总线,具有多主机系统所需的包括总线裁决和高低速器件同步的特点。I2C总线只有两根信号线,一根为SDA数据线,另一根为SCL时钟线。I2C总线上接有正电源,当总线处在空闲状态,两根线都处于高电平,当其中有一根线上出现低电平,总线的信号将被拉低,这样数据线和时钟线就是逻辑与的关系。以下是I2C总线协议的几点要求:(1)当I2C总线传送数据时,在时钟信号为高电平期间,数据线上的状态必须保持稳定,只有在时钟线上的信号保持为低电平不变期间,数据线上的电平才可以变化。(2)SCL线为高电平状态期间,SDA线由高电平到低电平的变化就表示起始信号;SCL线为高电平状态期间,SDA线由低电平到高电平的变化就表示终止信号。起始信号和终止信号都是由主机产生的,在起始信号产生后,总线就处于被数据线占用的状态;终止信号产生后,总线处在未被占用的状态。(3)当传送数据时,先传送的是最高位(MSB),每传送一个字节都需要跟随应答位。当主机处于接收数据状态,它收到最后一个数据后,必须向从机发出一个结束传送信号的命令。2.1.2 SPI总线SPI是一种四线同步双向传输串行总线,是一种高速的,全双工的同步通信总线。SPI在芯片的管脚上只占用四根线,这将节约芯片的管脚,同时PCB的布局将节省空间,正是出于这种简单易用的特性,现在越来越多的芯片都采用SPI总线。 SPI总线系统是一种同步串行的外设接口,一般用到4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择CS。SPI的通信协议很简单,以主从方式进行工作,这种方式通常有一个主设备和若干个从设备。SCLK是时钟信号,由主设备产生;CS是使能从设备信号,由主设备进行控制。其中CS可以选择相应的芯片,当片选CS信号为先前规定的选择信号时,才会使所选的芯片有效,这就可以在同一根线上连接多个从设备。SPI总线由SCK来提供时钟信号脉冲,SDI,SDO基于此信号完成数据的传输。数据是通过SDO线输出,数据在时钟边沿改变,在紧接的边沿读取,这样就完成一位数据的传输,输入数据也使用相同的原理进行数据的传输。这样,在至少8次时钟信号的改变(上沿和下沿各为一次),就能完成8位数据传输。在主机从机都只有一个的通信系统中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。而在多个从设备的通信中,每个从设备就需要独立的使能信号来选择所需的从机设备,因此在硬件上比I2C总线协议要复杂。2.2STC89C52RC单片机介绍STC89C51RC单片机是由宏晶科技公司推出的一款单片机,指令代码可以兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择,下面介绍该款单片机的信息。(1)特点:1.6时钟/机器周期CPU,12时钟/机器周期CPU。2.工作电压参考:5.4V-3.4V(工作电压5V单片机)/3.7V-2.0V(工作电压3V单片机)。3.工作频率范围参考:0-40MHz,实际工作最高频率可达48MHz。4.用户可应用的ROM空间4K/8K/13K/16K/20K/32K字节。5.片上集成1280KB或512KBRAM。6.通用I/O口(32/36个),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O口)P0口是开漏输出,当作为总线扩展用,无需加上拉电阻,作为I/O口用时,则需加上拉电阻。7.在系统可编程/(在应用可编程),无需专用编程器/仿真器,可通(P3.0/P3.1)直接下载程序。8.EEPROM的功能;9.看门狗电路(WDT);10.内部集复位电路,外部晶体20M以下时,可不用外部复位电路。11.共3有个16位定时器/计数器,其中定时器0还能当作2个8位定时器来使用。12.外部中断有4个,下降沿中断或者低电平触发中断,省电模式可由外部中断低电平触发中断方式唤醒。13.通用异步串行口,可以编程实现多个UART。14.工作温度范围:0-75/-40-+85。15.封装:LQFP-44,PDIP-40,PLCC-44,PQFP-44(2)STC89C52RC单片机的内部结构框图如图 2.1 所示。STC89C52RC单片机中包含中央处理器(CPU)、程序存储器(FLASH)、数据存储器(SRAM)、定时/计数器、UART串口、I/O接口、EEPROM、看门狗等模块。STC89C52RC单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片上系统(SOC)。(3)STC89C51RC单片机所有I/O口均有3种工作类型:准双向口/弱上拉、仅为输入或开漏输出功能。当P0口上电复位后处于开漏模式,P0管脚作I/O时,需加10K-4.7K的上拉电阻。当P0管脚作为地址/数据复用总线使用时,不用外加上拉电阻。图 2.1 STC89C51RC内部结构框图2.3所用特殊功能寄存器的说明2.3.1串行接口控制寄存器控制串口接口的寄存器有两个:特殊功能寄存器PCON和SCON。1) PCON是一个特殊功能寄存器,其中D7位为波特率选择位,可用MOV PCON,#80H指令使该位置1。当SMOD=1时,在串行接口方式1、2或3情况下,波特率将提高一倍。2) 特殊功能寄存器SCON用于定义串行接口的操作方式和控制它的某些功能,其字节地址为98H。寄存器中内容表2.1所示.表 2.1 特殊功能寄存器SCON位地址表位地址 9F 9E 9D9C 9B9A 99 98SM0SM1SM2REN TB8RB8 TI RISM0,SM1:串行接口的操作方式选择位。两个选择位对应于四种状态,所以串行接口能以四种方式工作,如表2.2所示。表 2.2 串行工作方式选择表SM0 SM1方式 功能说明 波特率 0 0 0移位寄存器 fosc/12 0 1 18位UART 可变1 0 2 9位UART fosc/64或fosc/32 1 1 3 9位UART 可变SM2:允许方式2和3的多机通信使能位。在方式2或3中,若SM2置为1,且接收到得第9位数据(RB8)为0,则接收中断标志RI不会被激活。在方式1中,若SM2=1,则只有收到有效的停止位时才会激活RI。在方式1中,SM2必须置为0。REN:接收允许控制位。软件置1允许接收,软件置0禁止接收。TB8:方式2或3时,TB8为要发送第9位数据,根据需要由软件置1或清0。RB8:方式2或3时,RB8为要接收的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的是呼叫地址还是要传送的数据。TI:发送中断标志。在方式0中当发送完第8位数据时由硬件来置位;在其他方式中,在发送停止位的开始状态由硬件置位。当TI=0时申请中断,CPU响应中断后,发送下一帧数据。在任何方式中,该位都由必须由软件来清0。.RI:接收中断标志。在方式0中当串行接收完成第8位数据结束时由硬件置位;在其他方式中,在接收到停止位的中间时由硬件置位。RI=0时申请中断,要求CPU取走数据。但在方式1中,当SM2=1时,若未接收到有效的停止位,则不会对RI置位。在任何工作方式中,该位都必须由软件清0。在系统复位时,SCON中的所有位都必须清0。2.3.2串行接口工作方式当SCON的SM0、SM1设置为“01”时,串行通信以方式1方式工作。串行接口工作于方式1时,被控制为波特率可变的8位异步通信接口。传送一帧信息为10位,即1位起始位(0),8位数据位(低位在前高位在后)和1位停止位(1)。数据由TXD端发送,由RXD端接收。波特率是可以变的,取决于定时器1的溢出率。(1) 方式1发送过程:串行通信方式发送时,数据由串行发送端TXD输出。当主机执行一条写入“SBUF”的指令就开启发送命令,写“SBUF”信号还把“1”装入发送移位寄存器的第9位,并通过TXD控制模块开始发送数据。发送各位的定时功能是和16分频计数器同步。移位寄存器将数据不断右移送TXD端口发送,在数据的左边不断移入“0”作补充。当数据的最高位移到移位寄存器的输出位置,接着是第9位“1”,它的左边为“0”,使控制器作最后一次移位输出,然后允许发送使能信号“SEND”失效,完成一帧信息的发送,并置位中断请求标志位TI,即TI = 1,向主机发送中断处理请求。(2) 方式1的接收过程:当软件使接收允许标志位REN置位,即REN=1时,接收器将以确定波特率的16分频的速率采集接收端口RXD数据,当检测到RXD状态从“1”“0”的变化时就开启接收器准备接收数据,同时立即重新开始16分频计数器,将16进制数1FFH装入移位寄存器中。复位16分频计数器是使它与输入的时间同步。16分频计数器的16个状态是将1波特率(每位接收时间)均分为16等份,检测每位时间的7、8、9状态RXD端口进行采样,所接收的值是这次采样值经过“三中取二”的值,即3次采样至少2次相同的值,以此消除干扰影响,从而提高可靠性。在起始位,如果接收到的值不为低电平,则起始位无效,单片机复位接收电路,并重新检测“1”“0”的变化。如果接收到的起始位有效,则将它输入到移位寄存器,同时接收剩余的数据。接收的数据从接收移位寄存器的右边移入,已装入的16进制数1FFH向左边移,当起始位“0”移到移位寄存器的最左边时,使控制器作最后一次移位,完成一帧数据的接收。若同时满足RI=0,SM2=0或者接收到的停止位为1,则接收到的数据有效,将有效数据装入SBUF缓冲器中,停止位进入RB8中,置位RI,即RI=1,并向主机发出中断申请。若上述两条件不是同时满足,则接收到的数据无效不用并且丢失,接着接收器又重新检测RXD端口上的“1”“0”的变化,继续接收下一帧数据。接收有效时,响应中断后,寄存器必须由软件清0。通常情况下,串行通信工作于方式1时,SM2将设置为低电平,这样就禁用多机通信。2.3.3定时器寄存器及其工作方式STC89C52RC单片机的定时器0和定时器1,与传统8051的定时器完全兼容。在用定时器1做波特率发生器时,定时器0可以当两个8位定时器用。STC89C52RC单片机内部设置的两个16位定时器/计数器T0和T1都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有控制位C/T来选择T0或T1为是定时器还是计数器。定时器/计数器的计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5),则为计数方式,每来一个脉冲加1。当定时器/计数器工作在定时方式时,可在烧录用户程序时在STC-ISP编程器中设置是系统时钟/12还是系统时钟/6后让T0和T1进行计数。当定时器/计数器工作在计数方式时,对外部脉冲计数不进行分频处理。定时器/计数器有4种工作模式:模式0(13位定时器/计数器),模式1(16位定时器/计数器模式),模式2(8位自动重装模式),模式3(两个8位定时器/计数器)。定时器/计数器除模式3外,其他工作模式与定时器/计数器0相同,T1在模式3时无效。(1)定时器/计数器工作模式寄存器TMOD定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,TMOD寄存器的各位信息如下表所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。2 个定时/计数器的模式0、1和2都相同,模式3不同,各模式下的功能表 2.3 所述。表 2.3 寄存器TMOD各位的功能描述表76543210GATE C/T M1 M0 GATE C/T M1 M0 定时器1 定时器0TMOD.7控制定时器1,置1时只有在INT1脚为高及TR1控制位置为1时才可以打开定时器/计数器1。TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(T1/P3.5脚输入)。TMOD.5/TMOD.4为定时器定时器/计数器1模式选择。M1M0=00时为13位定时器/计数器,TL1只把低5位参与分频,TH1整个8位全部采用。M1M0=01时为16位定时器/计数器,TL1、TH1全用。M1M0=10时为8位自动重装定时器,当溢出时将TH1存放的值自动重装如TL1。M1M0=11时定时器/计数器无效(停止计数)。定时器0的状态由TMOD低4位决定,相应的情况与定时器1相同,当M1M0=11时定时器0作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个8位定时器,由定时器1的控制位控制。本次设计采用定时器1的模式2,即把TL1配置成一个可以自动恢复初值的8位计数器。TH1作为常数缓冲器,TH1由软件预置值。当TL1产生溢出时,单片机使溢出标志位TF1置1,同时把TH1中的8位数据重新装入TL1中,进行下一次计数。2.3.4波特率的计算方式1的波特率是定时器的溢出率所决定。当定时器1作波特率发生器用时,波特率的计算公式为: 波特率=(定时器1的溢出率)/n (2-1)式中:定时器1溢出率=定时器1的溢出次数/秒,n为32或16,由特殊功能寄存器PCON中的SMOD位的状态。若SMOD=0,则n=32;若SMOD=1,则n=16。对于定时器的不同工作方式,得到的波特率的范围是不一样的,这主要由定时器1的计数位数不同所决定。对于非常低的波特率,应选择16位定时器方式,并且在定时器1中断程序中实现时间常数重新载入。在这种情况下,应该允许定时器1中断(IE.3=1)。2.4矩阵键盘输入电路的设计图 2.2 矩阵键盘示意图1.矩阵键盘的连接及原理当键盘的个数较多时,可以采用矩阵键盘的连接方式达到增加键盘个数的作用,如图3.2所示。在矩阵键盘中,水平线和垂直线之间通过一个按键连接,而不是直接连接。这样,一个端口(如P2口)就可以构成16个按键,比直接将端口线引出来所有效的按键数增加一倍。而且线数越多,区别越明显,比如再多加一根线就可以构成有20键的键盘,然而直接用端口线则只能多出一键来。由此可见,在需要键数比较多的时侯,采用矩阵方式来做键盘是比较合理的。矩阵方式结构的键盘显然比用直接方式要复杂一些,而且识别方法也要复杂一些。上图中,行线所接的单片机的I/O口作为输出端,而列线所接的单片机I/O口作为输入端。这样,当按键被没有按下时,所有的输入端都是高电平,这样就代表无键被按下来。通过行线输出低电平,如果一旦有键按下,则输入线就相应被拉低,这样,就可以通过读入输入线的状态知道是否有键按下了。编程方法如下所述: 2.矩阵键盘按键的识别方法行扫描法是一种常用的按键识别方法,如图2.2所示的矩阵键盘,其过程如下: (1)判断键盘中按键按下的状态:先将全部的行线置为低电平,然后查看列线的状态。只要有一列为低电平,则表示矩阵键盘中是有键被按下,而且闭合的按键位于状态为低电平线与4根行线相交叉的4个按键之一。如果所有列线都是高电平的话,则键盘中就无键按下。 (2)判断所闭合的按键位置:确认有键按下时,即可确定具体闭合按键的位置。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线都是高电平。在确定某根行线位置为低电平后,再逐行来检测各列线电平状态。如果某列为低,则该列线和状态为低电平的行线相交的按键就是按下的按键。 3.本次设计的具体编程方法: 图仍如图 3.2 所示。用单片机的P2口作为键盘I/O口,键盘的列线接到P2口的低4位,键盘的行线接到P2口的高4位,即把列线P2.0-P2.3设置为输入线,行线P2.4-P2.7设置为输出线。4根行线和4根列线就形成16个相交点。 (1)检测当前是否有键被按下。检测的过程是P2.4-P2.7输出全“0”,并读取P2.0-P2.3端的状态,若P2.0-P2.3为全为“1”,则无键闭合。 (2)去除按键抖动的干扰。当检测到有键按下后,通过延时一段时间再做下一步检测减少干扰。 (3)若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线输入进行扫描判断。P2的高四位状态依次为1110,1101,1011,0111,即依次拉低P2.4到P2.7的电平,一种状态分别对应P2低4位的4种状态,明确P2低4位的状态后给相应的按键赋键值,就可以得到键值。2.5数码管显示电路的设计本设计的显示部分采用七段数码管,数码管显示器时单片机应用产品中常用的输出设备。它是由若干个发光二极管组成的,当二极管导通时,相应的一个点或一个笔画发光,控制不同组合的二极管导通,就能显示出各种字符。单片机系统扩展LED数码管时多用共阳LED,共阳数码管每段笔画时用低电平点亮,要求驱动功率很小;而共阴数码管每段笔画用高电平点亮的,要求驱动功率较大。通常每段笔画要接一个数百欧姆的降压电阻。使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。根据电路连接图显示16进制数的编码如下表所示。字形0123456789ABCDEF共阳0C00F90A40B09992820F8809088830A70A1868ELED数码管显示分类:静态显示方式和动态显示方式。静态显示方式,每个字段码都通过一个端口连接,可以保持长时间。特点:编程较简单,但占用I/O口线多,适合应用于所需位数较少的情况。动态显示方式,在一段时间内显示特定的字段码,通过控制公共端达到轮流显示的功能,由于人眼的停止现象,会看到多位数同时显示的状态。特点:占用I/O端线少,电路的连接较简单,需要复杂的编程,需要不断的刷新扫描。适合应用于所需位数多的情况。由本设计只要将一个按键值显示在数码管上,所以采用静态显示方式,电路图连接如图2.3所示。图 2.3 数码管连接示意图2.6双机串口通信电路的设计UART通信方式的连接示意图如图 2.4 所示,在这种连接方式中,收发双方分别将自己的发送端(TXD)与对方的接收端(RXD)直接相接,同时双方地线相连,构成共同的零电平参考点,从而构成通信的物理链路。图 2.4 双机串口连接示意图第3章系统软件设计系统软件设计是本次毕业设计的另一个重要方面,本次设计采用C语言,应用KEIL软件编程。熟悉STC89C52RC单片机的相关信息后,介绍程序流程图、编写矩阵键盘输入代码、数码管显示代码、双机串行通信代码、代码的编译调试、PROTEUS仿真以及最后的代码烧写。3.1编程软件KEIL的介绍C51的编程语言可以采用汇编语言或者是C语言。汇编语言的产生的机器代码生成效率高但是可读性不高,复杂的代码更加难以理解读懂。但是C语言产生的机器代码生成效率和汇编语言差不多,在可读性和可移植性方面会超过汇编语言,而且C语言可以嵌入到汇编从而解决高时效的代码编程情况。对于开发周期来说,复杂的软件编写采用C语言的开发周期通常会小于汇编语言。综合前面的C语言编程优点,我在设计时选择了C语言。使用C语言要使用C编译器,可以把写好的C代码编译为机器码,这样单片机就能运行编写好的程序。KEIL uVISION3是众多单片机开发软件中很好的软件,它支持不同公司的MCS51架构的芯片,集编写、编辑和仿真于一体,同时支持汇编和C语言的代码设计。它的界面和常见的微软VC+的界面有所相似。调试程序时,在软件仿真方面会有很强大的功能,因此他深受单片机开发者和爱好者的喜欢。 以上简单介绍了软件,要使用KEIL软件,必需先要安装它。接下来按下面的步骤建立一个项目: (1)点击Project 菜单,选择弹出的菜单中的New Project。接着弹出一个文件对话窗口,在“文件名”中输入一个自己定义的项目名,只要符合 Windows文件规则的文件名都行。“保存”后的文件扩展名是.uv2,这是KEIL uVision3项目文件扩展名,以后就可以直接打开已经做过的项目。(2)选择所需要的单片机,这里我们可以选择常用的ATEML公司的AT89C51。在完成上述步骤后,我们就可以进行程序的编写了。(3)首先我们要在项目中创建新的程序文件也可以加入旧程序文件。如果没有编好的程序,那么就要自己新建一个程序文件。在KEIL中有一些程序的Demo,在这里我以一个C程序为例介绍如何新建一个C程序和如何加到一个项目中。点击新建文件的快捷按钮,在窗口中出现一个新的文字编辑窗口,这个操作也可以通过菜单 FileNew 或快捷键CRTL+N 来实现。现在可以编写程序了,光标已出现在文本编辑窗口中,等待输入。 (3)用菜单FileSave或快捷键CTRL+S进行保存。因是新文件所以保存时会弹出文件操作窗口,我们把第一个程序命名为MAIN.C,保存在项目所在的目录中,这时会发现在程序单词出现不同的颜色,表明KEIL的语法检测功能生效了。鼠标在窗口最左的Source Group1 文件夹图标上右击弹出菜单,在这里可以在项目中添加或删除文件操作。我们选“Add File to GroupSource Group 1”弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件就加到项目中。这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。(4)C程序文件已加到了项目中了,下面就剩下编译运行了。使用软件默认的编译设置,它不会生成用于烧写HEX文件。菜单栏第三行中前三个按钮1、2、3都是编译按钮,不同是1是用于编译单独文件。2是编译当前运行项目,如果先前编译的文件没有做任何编辑改动,这时再点击是不会出现再次重新编译的情况。3是重新编译,每点击一次均会再次编译链接一次,不管程序有没有改动。在3右边的是用于停止编译的按钮,只有在点击了前三个中的任何一个,停止按钮生效。在界面的最下面窗口中可以看到编译的错误信息和使用的系统资源的情况。(5)进入调试模式,软件窗口如图 3.1 所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。4可以查看I/O端口的状态,即打开5的窗口,通过单步运行程序并观察5的状态,能够确定程序得正确性。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行的关闭操作。图3.1调试运行示意图到此为止,初步学习了一些KEIL uVision3的项目文件创建、编译和运行的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率。3.2程序流程图程序流程图如图3.2所示:首先进行相关特殊功能寄存器的初始化工作,即定义串行通信采用工作方式1,允许接收数据,波特率倍增位置1,高波特率传输数据。定义定时器工作于方式2为自动装入时间常数的8位定时器。接着调用键盘扫描函数扫描得到按下的键值,将键值作为返回值。同时将键值对应的代码送入发送端得数码管显示数字。得到键值后调用串行发送函数,用异步串行通信方式将键值发送给接收端,接收端将键值对应的代码送入数码管显示,完成整个流程。特殊功能寄存器初始化调用键盘扫描函数返回按下的键值送入发送端数码管显示调用串行发送函数uart接收端接收键值送到接收端数码管显示图3.2程序流程图3.3矩阵键盘代码下面介绍矩阵键盘的代码,以下代码完成对第一行按键的扫描:sbit P2_7 = P27; /定义需要用到的位端口sbit P2_6 = P26;sbit P2_5 = P25;sbit P2_4 = P24;unsigned char key ,temp; unsigned char KeyScan(void)/KeyScan函数用于键盘扫描P2 = 0xFF; /在读取P2端口前先写入1P2_7 = 0; /拉低P2.7的电位temp = P2; /将P2口的数据保存在变量temp中temp &= 0x0F; /位操作取temp低四位的值if(temp != 0x0F) /如果低四位有变化,继续执行下面代码delay(1); /调用延时程序,达到软件消抖的作用temp = P2; temp &= 0xFF;if(temp != 0xFF) temp = P2;temp &= 0xFF;switch(temp) /switch语句,由temp的值,选择执行不同的语句 case 0x07 : key = 0;break; /当temp为0x07,则按下键值为0case 0x0B : key = 1;break; /当temp为0x0B,则按下键值为1case 0x0D : key = 2;break; /当temp为0x0D,则按下键值为2case 0x0E : key = 3;break; /当temp为0x0E,则按下键值为3 return(key); /返回键值 3.4数码管显示代码以下代码完成数码管的显示unsigned char code table = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E ; /0F共阳编码存放在数组table中用于调用void display(unsigned char k) /数码管显示函数,k为键盘扫描函数返回的键值P1 = tablek; /将键值对应的十六进制数从P1口输出 3.5双机串口通信代码3.5.1发送部分代码串行发送采用查询方式,不断查询发送中断标志TI,当TI为1时表明已发送完成一帧数据。#define F_OSC 12000000 /预处理用F_OSC代替晶振频率为12000000#define B_RATE 9600void uart(unsigned char val)SCON = 0x50; /方式1,允许接收 PCON = 0x80; /波特率倍增位 TMOD = 0x20; /定时器1方式2 TL1 = 256 - F_OSC / 16 / 12 / B_RATE;TH1 = 256 - F_OSC / 16 / 12 / B_RATE;/定时器初值计算TR1 = 1; /启动定时器1 if(TI = 1)TI = 0; /等待数据传输完,并将发送中断标志TI清零SBUF = val; /将要发送的数据放入发送缓冲器中,用于发送 while(!TI); /直到TI置位,执行下一帧数据的传输 3.5.2接收部分代码串行接送采用中断方式,当RI中断被响应时,CPU把控制转到中断服务函数对接受的数据进行处理。#define F_OSC 12000000 /预处理用F_OSC代替晶振频率为12000000#define B_RATE 9600void main(void) unsigned char data_val = 0;SCON = 0x50; /方式1,允许接收PCON = 0x80; /波特率倍增位ES = 1; /允许串行接收中断TMOD = 0x20; /定时器1方式2TL1 = 256 - F_OSC / 16 / 12 / B_RATE;TH1 = 256 - F_OSC / 16 / 12 / B_RATE; /定时器计数初值计算TR1 = 1; /启动定时器1EA = 1; /打开CPU中断允许标志,允许所有中断while(1); /等待中断void serial (void) interrupt 4 /串行中断服务函数,中断编号为4 unsigned char data_val = 0;if(RI) /当接收中断标志置位,执行以下程序 RI = 0; /清零接收中断标志,为下一次
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕业论文


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!