完整版微机原理毕业课程设计.docx

上传人:b****7 文档编号:16258933 上传时间:2023-07-12 格式:DOCX 页数:16 大小:171.20KB
下载 相关 举报
完整版微机原理毕业课程设计.docx_第1页
第1页 / 共16页
完整版微机原理毕业课程设计.docx_第2页
第2页 / 共16页
完整版微机原理毕业课程设计.docx_第3页
第3页 / 共16页
完整版微机原理毕业课程设计.docx_第4页
第4页 / 共16页
完整版微机原理毕业课程设计.docx_第5页
第5页 / 共16页
完整版微机原理毕业课程设计.docx_第6页
第6页 / 共16页
完整版微机原理毕业课程设计.docx_第7页
第7页 / 共16页
完整版微机原理毕业课程设计.docx_第8页
第8页 / 共16页
完整版微机原理毕业课程设计.docx_第9页
第9页 / 共16页
完整版微机原理毕业课程设计.docx_第10页
第10页 / 共16页
完整版微机原理毕业课程设计.docx_第11页
第11页 / 共16页
完整版微机原理毕业课程设计.docx_第12页
第12页 / 共16页
完整版微机原理毕业课程设计.docx_第13页
第13页 / 共16页
完整版微机原理毕业课程设计.docx_第14页
第14页 / 共16页
完整版微机原理毕业课程设计.docx_第15页
第15页 / 共16页
完整版微机原理毕业课程设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

完整版微机原理毕业课程设计.docx

《完整版微机原理毕业课程设计.docx》由会员分享,可在线阅读,更多相关《完整版微机原理毕业课程设计.docx(16页珍藏版)》请在冰点文库上搜索。

完整版微机原理毕业课程设计.docx

完整版微机原理毕业课程设计

目录

1设计任务1

2设计方案1

3硬件设计1

3.1AT89C51简介1

3.2MAX232芯片简介4

3.3串行通信电路5

4软件设计6

4.1BIOS串行通信口功能6

4.2单片机串行口控制寄存器及波特率的计算7

4.3程序流程图10

4.3.1PC机部分程序流程图10

4.3.2单片机部分12

5心得体会13

参考文献14

附录一15

附录二17

 

计算机通信系统设计

1设计任务

1.画出简要的硬件原理图,编写通信程序。

2.程序运行后,实现PC机和单片机之间的串行通信。

2设计方案

PC机与单片机之间最简单的连接是零调制3线经济型,所谓三线就是指发送数据线TxD、接收数据线RxD以及信号地线GND。

连接时,双方的地线直接相连,收发数据线交叉相连。

这是进行全双工通信所必需的最少数目的线路。

由于单片机的输入、输出、均为TTL电平,而PC机配置的是RS-232标准串行接口,二者的电气规范不一致,因此要完成PC机与单片机之间的串行通信,必须进行电平转换。

本次课程设计我们选用AT89C51单片机,电平转换芯片选用MAXIM公司生产的MAX232芯片。

3硬件设计

3.1AT89C51简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

以下是AT89C51芯片的引脚图:

图3-1AT89C51引脚图

接下来对单片机个管教进行简要说明:

  VCC:

供电电压。

  GND:

接地。

  P0口:

P0口为一个8位漏级开路双向IO口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

  P1口:

P1口是一个内部提供上拉电阻的8位双向IO口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

  P2口:

P2口为一个内部上拉电阻的8位双向IO口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

  P3口:

P3口管脚是带8个内部上拉电阻的双向IO口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

  P3口也可作为AT89C51的一些特殊功能口,如下表所示:

  管脚备选功能

  P3.0RXD(串行输入口)

  P3.1TXD(串行输出口)

  P3.2INT0(外部中断0)

  P3.3INT1(外部中断1)

  P3.4T0(记时器0外部输入)

  P3.5T1(记时器1外部输入)

  P3.6WR(外部数据存储器写选通)

  P3.7RD(外部数据存储器读选通)

  P3口同时为闪烁编程和编程校验接收一些控制信号。

  RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

  ALEPROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的16。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

  PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次PSEN有效。

但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。

  EAVPP:

当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

  XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

  

3.2MAX232芯片简介

MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,适用于各种EIA—232C和V.28V.24的通信接口。

MAX232芯片内部有一个电源电压变换器,可以把输入的+5V电源电压变换成RS-232C输出所需要的正负10V电压。

所以,采用此芯片的接口串行通信系统只需要单一的+5V电源就可以了。

以下是MAX232芯片的引脚图:

图3-2MAX232引脚

MAX232典型工作电路图:

图3-3MAX232典型工作电路图

在MAX232工作电路中,电容C1、C2、C3、C4、以及V_、V+是电源变换电路部分。

在实际应用中,期间对电源噪声很敏感。

因此,Vcc必须要对地加去耦电容,其他电容同样是用以提高抗干扰能力,在连接时必须尽量靠近器件。

下半部分是发送和接收部分,实际应用中,和可直接接TTLCMOS点评的89C51单片机的串行发送端TXD;和可直接接TTLCMOS电平的89C51单片机的串行接收端RXD;和可直接接PC机的RS-232串口接收端RXD;和可直接接PC机的RS-232串口发送端TXD.

3.3串行通信电路

通过以上对AT89C51和MAX232两个芯片的介绍,接下来设计串行通信电路。

现从MAX232芯片中两路发送接收中任选一路作为接口。

应注意其发送、接受的引脚要对应。

以下为接口电路图:

图3-4PC机与单片机通信电路

4软件设计

编写程序,实现单片机与PC机之间的串行通信。

程序实现以下功能:

单片机向PC机发送数据,PC机接收后将接收到的数据反馈给单片机,由单片机检测发送的数据是否正确,正确则继续发送并由数码管显示该数字,否则重新发送,直至数据发送完毕。

4.1BIOS串行通信口功能

PC机提供比较灵活的关于串行口的BIOS中断调用方法,即通过”INT14”调用ROMBIOS串行通信口例行程序。

该例行程序包括将串口初始化为指定的字节结构和传输速率,检查控制器的状态、读写字符等功能。

下面介绍”INT14”中断调用功能。

1初始化串行通信口(AH=0)

调用参数:

AL=初始化参数

DX=通信口号,0:

COM1,2:

COM2

返回参数:

AH=通信口状态

AL=调制解调器状态

2向串行通信口写字符(AH=1)

输入参数:

AL=所写字符

DX=通信口号,0:

COM1,2:

COM2

输出参数:

写字符成功:

AH.7=0,AL=已写入字符

写字符失败:

AH.7=1,AH.0—6=通信口状态

3从串行通信口读字符(AH=2)

输入参数:

DX=通信口号,0:

COM1,2:

COM2

输出参数:

读字符成功:

AH.7=0,AL=读入字符

读字符失败:

AH.7=1,AH.0—6=通信口状态

4取通信口状态(AH=3)

输入参数:

DX=通信口号,0:

COM1,2:

COM2

输出参数:

AH=通信口状态

AL=调制解调器状态

4.2单片机串行口控制寄存器及波特率的计算

89C51串行通信的方式选择、接收和发送控制以及串行口的状态标志等均由特殊功能寄存器SCON控制和指示。

  SCON串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。

SCON就是51芯片的串行口控制寄存器。

它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。

51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。

它的各个位的具体定义如下:

  SM0SM1SM2RENTB8RB8TIRI

  SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。

串行口工作模式设置。

  SM0SM1模式功能波特率

  000同步移位寄存器fosc12

  0118位UART由定时器设置

  1029位UARTfosc32或fosc64

  1139位UART由定时器设置

  在这里只说明最常用的模式1,其它的模式也就一一略过。

表中的fosc代表振荡器的频率,也就是晶振的频率。

UART为(UniversalAsynchronousReceiver)的英文缩写。

  SM2:

在模式2、模式3中为多处理机通信使能位。

在模式0中要求该位为0。

  REN:

为允许接收位,REN置1时串口允许接收,置0时禁止接收。

REN是由软件置位或清零。

如果在一个电路中接收和发送引脚P3.0,P3.1都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入REN=0来禁止接收,在子程序结束处加入REN=1再次打开串口接收。

  TB8:

发送数据位8,在模式2和3是要发送的第9位。

该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。

  RB8:

接收数据位8,在模式2和3是已接收数据的第9位。

该位可能是奇偶位,地址数据标识位。

在模式0中,RB8为保留位没有被使用。

在模式1中,当SM2=0,RB8是已接收数据的停止位。

  TI:

发送中断标识位。

在模式0,发送完第8位数据时,由硬件置位。

其它模式中则是在发送停止位之初,由硬件置位。

TI置位后,申请中断,CPU响应中断后,发送下一帧数据。

在任何模式下,TI都必须由软件来清除,也就是说在数据写入到SBUF后,硬件发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI不会由硬件清除,所以这时必须用软件对其清零。

  RI:

接收中断标识位。

在模式0,接收第8位结束时,由硬件置位。

其它模式中则是在接收停止位的半中间,由硬件置位。

RI=1,申请中断,要求CPU取走数据。

但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。

同样RI也必须要靠软件清除。

常用的串口模式1是传输10个位的,1位起始位为0,8位数据位,低位在先,1位停止位为1。

它的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。

AT89C51和AT89C2051等51系列芯片只有两个定时器,定时器0和定时器1,而定时器2是89C52系列芯片才有的。

  波特率:

在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。

波特率是指串行端口每秒内可以传输的波特位数。

如果波特率为9600,它是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。

51芯片的串口工作模式0的波特率是固定的,为fosc12,以一个12M的晶振来计算,那么它的波特率可以达到1M。

模式2的波特率是固定在fosc64或fosc32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs64,SMOD为1,波特率为focs32。

模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率。

那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?

可以用以下的公式去计算。

  波特率=(÷32)×定时器1溢出速率

  上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。

通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。

在这个定时模式2下定时器1溢出速率的计算公式如下:

  溢出速率=(计数速率)(256-TH1)

  上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的112,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。

通常用11.0592M晶体是为了得到标准的无误差的波特率,那么为何呢?

计算一下就知道了。

如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD设为1,分别看看那所要求的TH1为何值。

代入公式:

  11.0592M

  9600=(2÷32)×((11.0592M12)(256-TH1))

  TH1=250

  12M

  9600=(2÷32)×((12M12)(256-TH1))

  TH1≈249.49

  上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。

当然一定的误差是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

4.3程序流程图

4.3.1PC机部分程序流程图

图3-5PC机通信程序流程图

4.3.2单片机部分

图3-6单片机通信程序流程图

5心得体会

这学期学习了《微机原理与接口技术》,接触汇编语言,开始对其有一定的了解,以前编写程序用的都是C语言,基本上不涉及硬件方面的东西,而汇编语言则不同,它需要对硬件电路有一定的了解,这样在学习汇编语言的时候,就需注意硬件方面的知识的掌握。

本次课程设计我所做的题目是实现单片机与PC机之间的串行通信,对于这个题目,在《微机原理与接口技术》这门课程里曾学过关于PC机的串行通信的知识,而对于单片机,在以前也曾经自学过,所以最初看到这个题目的时候,并没有感到无从下手,接下来需要做的事情就是通过查找资料确定硬件电路,然后再通过硬件电路编写实现功能的程序。

通过查找资料,最终确定下来硬件电路图,进而根据要求编写程序。

由于对此类题目以前没有做过,所以本次课程设计,无论是硬件电路方面,还是软件方面,难免会有些不足之处,比如硬件电路可以尝试其他的实现方法,而软件方面,则可以修改程序使其实现更加复杂的功能等。

虽然如此,通过此次课程设计还是感觉获益匪浅,首先是对汇编语言和微机的串行通信知识有了进一步的了解和巩固,为以后更加系统的学习和应用奠定了一定的基础;其次是对单片机知识有了很好的认识,以前只是很粗浅的学习了单片机,经过这几天的学习和应用,有了很大程度的提高;最后一点就是提高了自己分析和解决问题的能力,面对我们未知的问题,我们应该知道如何下手,如何解决。

总之,通过此次课程设计,让我收获了很多。

参考文献

[1]周佩玲.微机原理与接口技术.电子工业出版社,2005

[2]周坚.单片机C语言轻松入门.北京航空航天大学出版社,2006

[3]李朝青.单片机原理及接口技术(第三版).北京航空航天大学出版社,2005

[4]潘超群.单片机控制技术在通信中的应用-MCS-51系列.电子工业出版社,2008

[5]程学先.汇编语言程序设计.武汉理工大学出版社,2002

附录一

PC机通信程序:

DATASEGMENT

RBUFDB10DUP(0)

COUNTDB10

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,

STARTPROCFAR

PUSHDS

PUSHAX

MOVAX,DATA

MOVDS,AX

LEADI,RBUF;置接收数据块首地址

MOVCL,COUNT;置接收数据块长度

MOVAH,00H;0号功能

MOVAL,0E3H;串口初始化:

波特率9600,无校验,1位停止位,8位数据位

MOVDX,00H;指定COM1端口

INT14H

REPT1:

MOVAH,02H;2号功能:

接收字符

MOVDX,00H;指定COM1端口

INT14H;出口参数:

AL中为接收到的参数,AH中为线路状态

MOVBX,AX;AX中的内容暂存于BX中

MOVAL,AH;取线路状态至AL

TESTAL,80H;接收是否成功(D7=0?

JNZREPT1;不成功,重接

TESTAL,01H;数据是否准备就绪

JNZREPT1;未就绪,重接

MOVAL,BL;就绪,取回字符

MOV[DI],AL;保存

INCDI;指向下一个地址单元

REPT2:

MOVAH,03H;3号功能检查串口状态

MOVDX,00H;指定COM1端口

INT14H

MOVAL,AH;取线路状态至AL

TESTAL,20H;发送保持器是否空(D5=1?

JZREPT2

REPT3:

MOVAL,BL;将接收到的字符存至AL

MOVAH,01H;1号功能:

发送字符

MOVDX,00H;指定COM1端口

INT14H

MOVAL,AH;取线路状态至AL

TESTAL,80H;发送是否成功(D7=0?

JNZREPT3;不成功,重发

LOOPREPT1;数据是否接收完毕?

未完,继续

POPDS

POPAX

CODEENDS

ENDSTART

附录二

单片机通信程序:

#include

{uchari=0;

TMOD=0x20;确定定时器工作模式

TH1=0xfb;

TL1=0xfb;定时初值

PCON&=0x80;SMOD=1

TR1=1;开启定时器1

SCON=0x50;串口工作方式1,允许接收

for(i=0;i<10;i++)发送10个数据

{senddata(i);

while

(1)等待接收数据

{

if(RI)检测接收中断标志

{

if(SBUF=i)判断是否发送正确

{

dis(SBUF);显示发送的数据

receive();

break;

}

else不正确,发送出错报告,重新发送

i--;

receive();

break;

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2