窗口评价器案例.docx

上传人:b****6 文档编号:7922508 上传时间:2023-01-27 格式:DOCX 页数:14 大小:284.63KB
下载 相关 举报
窗口评价器案例.docx_第1页
第1页 / 共14页
窗口评价器案例.docx_第2页
第2页 / 共14页
窗口评价器案例.docx_第3页
第3页 / 共14页
窗口评价器案例.docx_第4页
第4页 / 共14页
窗口评价器案例.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

窗口评价器案例.docx

《窗口评价器案例.docx》由会员分享,可在线阅读,更多相关《窗口评价器案例.docx(14页珍藏版)》请在冰豆网上搜索。

窗口评价器案例.docx

窗口评价器案例

项目六简易窗口评价器的设计与制作

一、项目简介

◆项目编号:

AVR005

◆项目名称:

简易窗口评价器的设计与制作

◆试用专业:

电子信息工程

◆制作时间:

2010-12-25

◆制作人:

杨永计璐珍张锦锦

◆关键词:

ATmega16芯片、DB9串行接口插座、MAX232芯片、

◆评价人:

◆指导老师评语:

二、设计目的、功能

现今单片机嵌入式系统接口技术发展的一个重要变化趋势是由并行外围总线接口向串行外围总线接口的转变。

目前采用标准串行通信协议的器件非常多,通信协议也各有不同,主要有USART、SPI、TWI(IIC)、1-Wire等。

采用串行接口与总线方式为主的外围扩展技术具有方便、灵活,电路系统简单,占用I/O口资源少等特点。

但是其串行接口系统的实现增加了软件设计的复杂性,对程序设计提出了更高的要求。

在串行接口和串行通信这类接口的设计和实现中,首先要熟悉、了解和掌握各种串行接口和串行通信的协议,同时还要了解所使用期间对协议的支持和兼容情况,最后还要具有良好的软件设计能力。

通过本项目的学习,需掌握以下知识点:

Ø了解单片机串口的功能

Ø了解单片机的串口通信和RS-232通信的接口

Ø掌握单片机串口电平转换电路的设计方法

Ø掌握单片机串口的简单编程

本项目设计共有3个功能模块,分别描述如下:

Ø单片机系统:

使用ATmega16单片机的异步通信串行接口USART实现一个完整的数据收发例程

Ø外围电路:

RS232电平转换电路,DB9串行接口插座。

Ø软件程序:

熟悉掌握ATmega16单片机的串行通信协议(USART)的编写。

三、硬件电路的设计及描述

✧窗口评价器电路原理框图:

本项目的电路包含RS323的串口电平转换芯片MAX232,电路图如下图1-1所示。

图1-1电平转换原理图

1、电路原理

在本项目中利用MAX232芯片使单片机输出的TTL电平转换为标准的RS232电平,从而使计算机能够识别。

同时将计算机输出的RS232电平转换为单片机可以识别的TTL电平。

2、电路连接

电路中MAX232芯片的9、10引脚分别连接单片机的PD0、PD1端口,MAX232的13、14引脚分别连接计算机串口线的3、2脚。

3、窗口评价器电路原理图图1-2所示

图1-2窗口评价器电路原理图

4、特别说明

本学习板采用的是串口插座是公头的,所以与计算机相连的串口连接线应该是交叉串口线,而不是串口延长线。

单片机的通信方式主要有两种:

并行通信和串行通信。

并行通信是指数据的各位同时发送或接收。

串行通信是指数据一位一位顺序发送或接收。

单片机的串口通信是如何形成和使用的呢?

本实例首先介绍单片机的串口,然后介绍单片机的串口转换电路。

最后介绍如何配置ATmega16单片机的串口寄存器从而实现一个串口发送一个字节的简单程序。

✧单片机的串口介绍

(1)什么是单片机的串口

单片机的串行接口是一个可编程的全双工串行通信接口。

可以用作异步通信方式(UART)与采用串行接口的外围设备相连接。

ATmga16单片机通过串行数据发送引脚TXD(PD1)和串行数据接收引脚RXD(PD0)与外界通信。

UDR是串行口数据寄存器。

UDR寄存器实际上是由两个物理上分离的寄存器RXB和TXB构成,他们使用相同的I/O地址。

写UDR的操作,是将发送的数据写入到寄存器TXB中;读UDR的操作,读取的是接收寄存器RXB中的内容。

所以虽然他们使用相同的地址,但是并不会出现冲突,因为他们两个有一个只能读出数据,而另一个只能写入数据。

(2)如何使用单片机的串口

在前面的项目中,我们已经了解和掌握了单片机定时器和中断的使用方法。

和它们的使用方法一样,单片机的串口也是通过对串行口的控制与状态寄存器的操作完成串行通信的设置。

在稍后我们会对这些寄存器的作用和如何设置进行详细的说明。

✧单片机的串口电平转换电路

(1)为什么需要电平转换电路

我们知道,单片机系统一般使用的是TTL电平,单片机中的串口输出信号当然也是如此。

但是在串行通信中,一般使用的是RS-232通信协议,二者的电平并不相同,所以需要外接电平转换电路。

串行通信接口标准以RS-232C为主,RS-232C通信协议标准对电气特性、逻辑电平和各种信号线功能都做了规定。

其中对逻辑电平的规定是:

高电平(逻辑1)为-3V---15V,低电平(逻辑0)为+3V--+15V,对于RS232信号来讲,当传输电平的绝对值大于3V时,电路可以有效的检查出来,介于-3V--+3V之间以及低于-15V或高于+15V的电平都被认为是无意义的。

所以,RS-232C是用正负电压来表示逻辑电平状态,而TTL则是以高低电平表示逻辑状态。

这两者有着很大的不同。

为了能够同计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。

(2)电平转换电路需要设计吗

作为单片机的标准外围电路,串口的电平转换有专用的芯片,所以我们可以不必花费力气去设计电平转换电路。

当然,如果我们对电路十分熟悉,那么也可以使用四个的、三极管就可以设计出一个电平匹配电路。

在本项目中,我们主要介绍采用专用芯片进行电平转换的方法。

目前较为广泛的是使用集成电路转换器件,有很多器件厂商都生产这类芯片。

其中MAXIM公司更是有多款RS232C电平转换芯片。

选择RS232C电平转换芯片时候应当根据需要选择,例如:

如果我们只需要通过单片机向RS232器件发送数据,那我们可以选择只有TTL电平到RS232电平转换的芯片就可以了。

在本项目中,我们需要向计算机(PC)发送数据,同时还要接受计算机(PC)发送过来的数据,所以我们需要选择可以实现TTL电平和RS232电平之间的双向电平转换的芯片。

这里我们选择MAX3232芯片。

同时以MAX3232芯片为例,介绍串口电平转换芯片的输入/输出工作原理。

MAX3232芯片的引脚排列我们可以在学习板的原理图上查找到。

其引脚主要分为5各部分:

●外接电容:

共需5个外接电容(均为无极性的104电容),功能是进行电压匹配和电源去耦。

●TTL的输入:

两路TTL电平的输入引脚9,12。

●TTL的输出:

两路TTL电平的输出引脚10,11。

●RS-232的输入:

两路RS-232电平的输入引脚8,13。

●RS-232的输出:

两路RS-232电平的输出引脚7,14。

在MAX3232芯片内部,自动实现了TTL电平和RS232电平的双向转换,自动的调节了单片机的TTL电平和计算机的RS232电平之间的匹配问题。

当然,我们还可以选择其他的串口电平转换芯片。

(3)电平转换芯片与单片机和计算机之间的连接

在学习板的原理图中,我们已经看到了,单片机的串口发送(TXD)和接收(RXD)引脚分别与串口转换芯片的11、12管脚相连。

计算机串口的2、3脚分别与串口转换芯片的13、14管脚相连。

(4)单片机与单片机之间进行串行通信时需要电平转换芯片吗?

我们已经从前面了解到,正是由于单片机和RS232的电平信号不同,才需要电平转换芯片,对于两个单片机而言,由于两者都是TTL电平,所以也就不必使用电平转换电路。

两个单片机的串口引脚可以直接用导线相连,不过需要注意的是,二者的TXD和RXD需要相互反接才能正常工作,也就是其中一个单片机的RXD要接到另一个单片机的TXD,而它的TXD要接到另一个单片机的RXD,这样才能使其中一个单片机发送数据,而另一个单片机从接收端接收发送过来的数据。

另外还需要设置两个单片机的波特率和通信格式等的一致。

<知识的链接>

MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。

图片

  

  

  

引脚介绍:

  第一部分是电荷泵电路。

由1、2、3、4、5、6脚和4只电容构成。

功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

  第二部分是数据转换通道。

由7、8、9、10、11、12、13、14脚构成两个数据通道。

  其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。

  8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

  TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

  第三部分是供电。

15脚GND、16脚VCC(+5v)。

主要特点:

  1、符合所有的RS-232C技术标准

  2、只需要单一+5V电源供电

  3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-

  4、功耗低,典型供电电流5mA

  5、内部集成2个RS-232C驱动器

6、内部集成两个RS-232C接收器

四、驱动程序设计及思想

程序设计思想:

程序的功能是使用单片机的串行接口PD0、PD1设计串口通信程序,实现数据的收发。

●单片机串行接收中断的编程

在本例中,我们用到了单片机的串行接收中断,需要编写串行接收中断服务程序,通过查询WINAVR(GCC)的中断库函数手册,可以查找到ATmega16单片机串行接收中断的中断向量为UART_RX_isr。

据此我们可以编写串行接收中断服务程序,如下:

#pragmainterrupt_handlerUART_RX_isr:

12

voidUART_RX_isr(void)

{

unsignedcharuart_data[3];

uart_data[0]=UDR;//从USARTI/O数据寄存器-UDR中读出数据

//将接收到的数据发送

if(uart_data[0]==0x01)

{

UCSRB&=~(1<

uart_data[1]=UART_Receive_Char();

uart_data[2]=UART_Receive_Char();

if(uart_data[2]==0x04)

{

switch(uart_data[1])

{

case0x80:

{

System_Work_Mode=System_Mode_1;

LCM_Show_Work(System_Work_Mode,0xff);

}

break;

}

}

UCSRB|=(1<

}

}

在中断服务程序中,我们首先把单片机串口接收到的数据放入变量uart_data[0]中,然后调用编写的串行接口字节发送函数将变量uart_data[0]中的数据发送到计算机。

●串口调试精灵

程序调试的时候需要在计算机上安装串口助手如图1-3所示,以观察接收的串口数据。

图1-3串口调试精灵

●数据通信格式的设定

要实现单片机和计算机的串行通信,首先要使双方的通信波特率和数据格式一致,这样才能观察到正确的结果。

在本项目设计中,单片机发送串口数据采用的波特率是9600bps,数据格式是8位数据位,1位停止位,无奇偶校验。

在串口助手里面,我们也要将波特率和数据格式设置成一样的。

●程序的简单模块化

本项目设计中用到了8个函数,分别是:

延时函数、端口初始化函数,LCD初始化函数,串口初始化函数,按键扫描函数,字节发送函数、字符串发送函数以及串行接收的中断服务函数。

●USART寄存器设置

(1)

USART发送数据缓冲寄存器和USART接收数据缓冲寄存器共享相同的I/O地址,称为

USART数据寄存器或UDR。

将数据写入UDR时实际操作的是发送数据缓冲器存器(TXB),读UDR时实际返回的是接收数据缓冲寄存器(RXB)的内容。

在5、6、7位字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为0。

只有当UCSRA寄存器的UDRE标志置位后才可以对发送缓冲器进行写操作。

如果UDRE没有置位,那么写入UDR的数据会被USART发送器忽略。

当数据写入发送缓冲器后若移位寄存器为空,发送器将把数据加载到发送移位寄存器。

然后数据串行地从TxD引脚输出。

接收缓冲器包括一个两级FIFO,一旦接收缓冲器被寻址FIFO就会改变它的状态。

因此不要对这一存储单元使用读-修改-写指令(SBI和CBI)。

使用位查询指令(SBIC和SBIS)时也要小心,因为这也有可能改变FIFO的状态。

在编写程序的时候,我们可以不必理会过多,只要知道接收串口数据的时候,把UDR中的数据送到我们定义的接收变量中,发送数据的时候,把要发送的数据送入UDR中就可以了。

(2)

该寄存器主要是发送、接收结束的结束标志,以及各种数据错误检查方式。

在一般的串口通信中,我们可以不必关心。

一般我们只关心第五位的设置。

●Bit5–UDRE:

USART数据寄存器空

UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。

UDRE为1说明缓冲器为空,已准备。

在非中断方式发送数据的时候,每发送一个字节都要检测缓冲期是否为空,即检测UDRE是否为1,只有在UDRE为1的情况下,才能向缓冲器UDR中写入数据。

在本例中我们就用查询的方式发送数据,所以要检测这一位是否为1.

 

(3)

●Bit7–RXCIE:

接收结束中断使能

置位后使能RXC中断。

当RXCIE为1,全局中断标志位SREG置位,UCSRA寄存器

的RXC亦为1时可以产生USART接收结束中断。

●Bit4–RXEN:

接收使能

置位后将启动USART接收器。

RxD引脚的通用端口功能被USART功能所取代。

禁止

接收器将刷新接收缓冲器,并使FE、DOR及PE标志无效。

●Bit3–TXEN:

发送使能

置位后将启动将启动USART发送器。

TxD引脚的通用端口功能被USART功能所取代。

TXEN清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存

器与发送缓冲寄存器中没有要传送的数据。

发送器禁止后,TxD引脚恢复其通用I/O功能。

●Bit2–UCSZ2:

字符长度

UCSZ2与UCSRC寄存器的UCSZ1:

0结合在一起可以设置数据帧所包含的数据位数(字符

长度)。

该寄存器主要设置接受和发送寄存器的使能以及接收和发送中断标志,在本例中我们只是既用到了串口数据的发送功能,也用到了数据的接收功能,所以要将TXEN和RXEN这两位使能,同时我们还用到了数据接收中断,所以还要设置接收中断允许。

(4)

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。

如果对UCSRC执行写操作,则URSEL应设置为1。

•Bit7–URSEL:

寄存器选择

通过该位选择访问UCSRC寄存器或UBRRH寄存器。

当读UCSRC时,该位为1;当

写UCSRC时,URSEL为1。

•Bit6–UMSEL:

USART模式选择

通过这一位来选择同步或异步工作模式。

•Bit5:

4–UPM1:

0:

奇偶校验模式

这两位设置奇偶校验的模式并使能奇偶校验。

如果使能了奇偶校验,那么在发送数据,发

送器都会自动产生并发送奇偶校验位。

对每一个接收到的数据,接收器都会产生一奇偶

值,并与UPM0所设置的值进行比较。

如果不匹配,那么就将UCSRA中的PE置位。

•Bit3–USBS:

停止位选择

通过这一位可以设置停止位的位数。

接收器忽略这一位的设置。

•Bit2:

1–UCSZ1:

0:

字符长度

UCSZ1:

0与UCSRB寄存器的UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。

•Bit0–UCPOL:

时钟极性

这一位仅用于同步工作模式。

使用异步模式时,将这一位清零。

UCPOL设置了输出数据

的改变和输入数据采样,以及同步时钟XCK之间的关系。

本项目中,我们使用异步通信模式,数据格式为:

一位停止位,无校验,8位数据位。

需要注意的是:

在写这个寄存器的时候,需要将bit7位置1.

(5)

•Bit15–URSEL:

寄存器选择

通过该位选择访问UCSRC寄存器或UBRRH寄存器。

当读UBRRH时,该位为0;当写UBRRH时,URSEL为0。

•Bit14:

12–保留位

这些位是为以后的使用而保留的。

为了与以后的器件兼容,写UBRRH时将这些位清零。

•Bit11:

0–UBRR11:

0:

USART波特率寄存器

这个12位的寄存器包含了USART的波特率信息。

其中UBRRH包含了USART波特率高4位,UBRRL包含了低8位。

波特率的改变将造成正在进行的数据传输受到破坏。

写UBRRL将立即更新波特率分频器。

本例中采用的波特率为9600.

◆软件准备

●ICCAVR开发编译环境

●Proteus仿真

●Protel99SE电路原理图与PCB设计

附录:

异步通信

异步通信就是采用异步传输方式实现数据交换的一种通信方式。

那么什么是异步传输呢?

异步传输是一种面向字符的传输技术,它利用字符的再同步方式实现数据的发送和接收。

主要特点是:

1、异步通信的发送端和接收端通常是由双方各自的时钟来控制数据的发送以及数据的检测和接收,发送、接收双方的时钟彼此独立、互不同步(这就是所谓的异步,而同步是指发送接收双方需要在同一个时钟控制下实现数据的收发)。

2、发送端发送数据时,必须严格按照所规定的异步传输数据帧的格式,一帧一帧地发送,通过传输通道由接收设备逐帧的接收。

那么在异步通信中,怎样实现数据同步呢?

也就是说,在发送端和接收端是依靠什么来协调数据的发送和接收呢?

关键在于,接收方如何才能正确的检测到发送端所发送的数据帧,并能够正确的接收数据。

这除了要靠通信双方都要使用协议好的数据帧格式外,还需要另外一个重要的指标-波特率。

在异步通信中,发送和接收双方要实现正常的通信,必须采用相同的约定。

首先必须约定最低层的、也是最基本的两个重要指标:

采用相同的传输波特率和相同格式的数据帧。

首先,发送和接受方都必须采用相同的,约定好的串行通信波特率。

确定波特率,其实就是确定数据帧中一个数据位的宽度。

通信双方必须在约定好的相同波特率下工作。

波特率的作用相当于是一个检测数据帧的“标尺”。

波特率的定义:

每秒钟传送的二进制数据的位数,单位是b/s。

通常情况下,异步通信所采用的波特率为1200的倍数,如4800,9600等,经常使用的波特率是9600.

当异步通信的波特率和数据帧格式确定后,发送方就按照规定的数据帧格式、规定的波特率发送数据帧。

接收方则以传输线的空闲状态(逻辑“1”)作为起点,不停的检测和扫描传输线,当检测到第一个逻辑“0”出现时(起始位到达),知道一个数据帧开始了(此时就实现了数据同步)。

接下来就一约定好的,以相同的数据格式对数据帧进行测试,获得数据帧中的各个位的逻辑值。

测试到最后的停止位时,如果为规定的逻辑“1”,则说明数据帧已结束。

因此,在设计和应用异步通信系统时,首先必须正确的设定通信双方所使用的波特率和数据帧格式。

如果双方所使用的波特率和数据帧格式不一样,基本的通信就不能够实现。

直接的表现就是接收到的数据和发送的数据不一致。

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

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1