51单片机串口通讯实验设计.docx
- 文档编号:7279357
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:20
- 大小:231.79KB
51单片机串口通讯实验设计.docx
《51单片机串口通讯实验设计.docx》由会员分享,可在线阅读,更多相关《51单片机串口通讯实验设计.docx(20页珍藏版)》请在冰点文库上搜索。
51单片机串口通讯实验设计
单片机通讯软硬设计实验
课题名称:
单片机通讯软硬件的设计
专业班级:
姓名:
指导老师:
2011年1月13日
摘要
计算机与计算机或计算机与终端之间的数据传送可以用串行通信和并行通信两种方式。
忧郁串行同时方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性不一致而被广泛采用。
在串行通信时,要求通讯双方都采用一个标准接口,使不同的设备可以方便的连接起来进行通讯。
RS-232-C接口(又称EIARS-232-C)是目前最常用的一种串行接口。
它是在1970年由美国电子工业协会(EIA)联合贝尔系统,调制解调器厂家及计算机终端生产厂家公共制定的用于串行通讯的标准.它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个引脚的DB25连接器,对连接器的每个引脚的内容加以规定,还对各种信号的电瓶加以规定。
随着计算机技术尤其是单片机技术的发展,人们已越来越多的采用单片机对一些工业控制系统中温度、流量和压力等参数进行检测和控制。
PC机具有强大的监控的管理功能,而单片机具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通信,是许多测控系统常用的一种通讯解决方案。
因此如何实现PC机与单片机之间的通讯具有非常重要的现实意义。
关键字:
串行通信,RS-232,51单片机,波特率
第一章设计要求及功能
单片机通讯软硬设计
设计要求:
(1)编程语言为C语言;
(2)基于单片机的硬件电路设计与调试;
(3)设计一个具有RS232串行通信接口的单片机系统,系统可通过RS232接口与计算机的RS232接口进行通信。
(4)用C语言编写一个通信程序,实现从电脑键盘上键入一个字符(使用串口调试软件或自己编写上位机程序),发送字符,单片机根据接收到的字符做出相应的操作。
(5)单片机接收到字符‘1’:
单片机最小系统板上的LED灯从D1到D8依次循环闪烁;
单片机接收到字符‘2’:
单片机最小系统板上的LED灯从D8到D1依次循环闪烁;
单片机接收到字符‘3’:
单片机最小系统板上的LED灯从D1>D3>D5>D7>D2>D4>D6>D8依次循环闪烁;
(6)设计出电路原理图,说明工作原理,编写程序及程序流程图,并进行程序调试。
第二章硬件设计
一.AT89C52单片机简介
1.AT89C52简介
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式。
其管脚:
2.主要功能特性
·兼容MCS51指令系统
·8k可反复擦写(>1000次)FlashROM
·32个双向I/O口
·256x8bit内部RAM
·3个16位可编程定时/计数器中断
·时钟频率0-24MHz
·2个串行中断
·可编程UART串行通道
·2个外部中断源
·共8个中断源
·2个读写中断口线
·3级加密位
·低功耗空闲和掉电模式
·软件设置睡眠和唤醒功能
3.AT89C52各引脚功能及管脚电压
概述:
AT89C52P为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)Flash编程和程序校验期间,P1接收低8位地址。
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
Flash编程或校验时,P2亦接收高位地址和一些控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
二.MAX232简介
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电压
4.功耗低,典型供电电流5mA
5.内部集成2个RS-232C驱动器
6.内部集成两个RS-232C接收器
三.RS23串口通信标准
RS232串口通信协议
串行通信接口标准经过使用和发展,目前已经有几种。
但都是在RS-232标准的基础上经过改进而形成的。
所以,以RS-232C为主来讨论。
RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。
它适合于数据传输速率在0~20000b/s范围内的通信。
这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。
由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。
在讨论RS-232C接口标准的内容之前,先说明两点:
首先,RS-232-C标准最初是远程通信连接数据终端设备DTE与数据通信设备DCE(DataCommunicationEquipment)而制定的。
因此这个标准的制定,并未考虑计算机系统的应用要求。
但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。
显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。
有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。
其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。
由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。
PC机的RS232端口与一般单片机的UART接口从数据收发的时序上看,是一样的协议,不同的是两者用以表达逻辑“1”和“0”的规定是不一样的,即电平是不兼容的。
RS232端口用正负电压来表示逻辑状态,与TTL(单片机的UART接口电平)以高低电平表示逻辑状态的规定是不同的。
因此,为了能够同计算机接口和终端的TTL器件连接,必须进行电平和逻辑关系的变换。
实现这种变换的方法可用分立元件,也可用集成电路芯片。
MAX232芯片就是目前应用较为广泛的电平转换器件,它可以实现TTL到EIA双向电平变换;该芯片支持两路串行异步通信,RIN1为第一路输入,ROUT1为第一路输出;RIN2为第二路输入管脚,ROUT2为第二路输出。
四.串口通信原理
串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。
由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
串口通信的工作原理请同学们参看教科书。
以下对串口通信中一些需要同学们注意的地方作一点说明:
1、波特率选择
波特率(BoudRate)就是在串口通信中每秒能够发送的位数(bits/second)。
MSC-51串行端口在四种工作模式下有不同的波特率计算方法。
其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。
在此模式下波特率计算公式为:
波特率=(1+SMOD)*晶振频率/(384*(256-TH1))
其中,SMOD——寄存器PCON的第7位,称为波特率倍增位;TH1——定时器的重载值。
在选择波特率的时候需要考虑两点:
首先,系统需要的通信速率。
这要根据系统的运作特点,确定通信的频率范围。
然后考虑通信时钟误差。
使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。
为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。
下面举例说明波特率选择过程:
假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。
则
TH1=256-62500/波特率
根据波特率取值表,我们知道可以选取的波特率有:
1200,2400,4800,9600,19200。
列计数器重载值,通信误差如下表:
因此,在通信中,最好选用波特率为1200,2400,4800中的一个。
2、通信协议的使用
通信协议是通信设备在通信前的约定。
单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。
假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:
0xA1:
单片机读取P0端口数据,并将读取数据返回PC机;
0xA2:
单片机从PC机接收一段控制数据;
0xA3:
单片机操作成功信息。
在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。
当单片机接收到0xA1时,读取P0端口数据,并将读取数据返回PC机;当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;当PC机接收到0xA3时,就表明单片机操作已经成功。
3、硬件连接
51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:
第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
使用MAX232串口通信电路图(9孔串口接头)
第三章软件设计
一.80C51串行口的控制寄存器
SCON是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:
SM0和SM1为工作方式选择位,可选择四种工作方式:
SM2:
多机通信控制位,主要用于方式2和方式3。
当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。
当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。
通过控制SM2,可以实现多机通信。
在方式0时,SM2必须是0。
在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。
REN:
允许串行接收位。
由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8:
在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。
可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式0和方式1中,该位未用。
RB8:
在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。
在方式1时,若SM2=0,则RB8是接收到的停止位。
TI:
发送中断标志位。
在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。
在中断服务程序中,必须用软件将其清0,取消此中断申请。
RI:
接收中断标志位。
在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。
也必须在中断服务程序中,用软件将其清0,取消此中断申请。
PCON中只有一位SMOD与串行口工作有关:
SMOD(PCON.7)波特率倍增位。
在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。
复位时,SMOD=0。
方式1
用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。
接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。
当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。
具体步骤如下:
▪确定T1的工作方式(编程TMOD寄存器);
▪计算T1的初值,装载TH1、TL1;
▪启动T1(编程TCON中的TR1位);
▪确定串行口控制(编程SCON寄存器);
串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
二.串行驱动数码管显示
1.MAX7219简介
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。
只有一个外部寄存器用来设置各个LED的段电流。
MAX7221与SPI™、QSPI™以及MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。
每个数据可以寻址在更新时不需要改写所有的显示。
MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
2.其功能特点:
(1)10MHz连续串行口
(2)独立的LED段控制
(3)数字的译码与非译码选择
(4)150μA的低功耗关闭模式
(5)亮度的数字和模拟控制
(6)高电压中断显示
(7)共阴极LED显示驱动
(8)限制回转电流的段驱动来减少EMI(MAX7219)
(9)SPI,QSPI,MICROWIRE串行接口(MAX7219)
(10)24脚的DIP和SO封装
3.管脚描述
1:
DIN串行数据输入端口。
在时钟上升沿时数据被载入内部的16位寄存器。
2,3,5-8,10,11:
DIG0–DIG7八个数据驱动线路置显示器共阴极为低电平。
关闭时7219此管脚输出高电平,7221呈现高阻抗。
4,9:
GND地线(4脚和9脚必须同时接地)
12:
LOAD(MAX7219)载入数据。
连续数据的后16位在LOAD端的上升沿时被锁定。
CS:
(MAX7221)片选端。
该端为低电平时串行数据被载入移位寄存器。
连续数据的后16位在cs端的上升沿时被锁定。
13:
CLK时钟序列输入端。
最大速率为10MHz.在时钟的上升沿,数据移入内部移位寄存器。
下降沿时,数据从DOUT端输出。
对MAX7221来说,只有当cs端为低电平时时钟输入才有效。
14-17,20-23:
SEG7段和小数点驱动,为显示器提供电流。
当一个段驱A–SEGG,动关闭时,7219的此端呈低电平,7221呈现高阻抗。
18:
SET通过一个电阻连接到VDD来提高段电流。
19:
V+正极电压输入,+5V
24:
DOUT串行数据输出端口,从DIN输入的数据在16.5个时钟周期后在此端有效。
当使用多个MAX7219/MAX7221时用此端方便扩展。
4.MAX7219管脚图
5.软件编程
此芯片驱动七段数码管采用的是串行驱动,要掌握好芯片的时序,做好MAX7219的初始化工作。
然后驱动数码管,其时序图为:
二.调试流程图
N
N
Y
第四章串口通信调试
串口通信调试工具:
要设置好波特率,在发送后,字符再由单片机发回显示在接收区。
第五章程序源代码
#include
#include
#defineucharunsignedchar
#defineDECODE_MODE0x09
#defineINTENSITY0x0A
#defineSCAN_LIMIT0x0B
#defineSHUT_DOWN0x0C
#defineDISPLAY_TEST0x0F
#definetime50
voidinit_SCI();
voidSCI_Send();
voiddelay(intz);
voidleft();
voidright();
voidinterval();
voidhello();
voidInit_Max7219(void);
voidwrite_7219(ucharadd,uchardat);
voidsend_byte(uchari);
voidshort_delay(void);
sbitCLK=P0^0;
sbitDIN=P0^1;
sbitLOAD=P0^2;
intsecond=0,minute=0,clock=0,t_sec=0,t_min=0;
unsignedchardd[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
charreceive;
intflag;
chartemp=0xFE;
chark=0,i=1;
voidmain()
{
init_SCI();
Init_Max7219();
for(i=1;i<9;i++)
{
write_7219(i,0x00);
}
while
(1)
{
switch(receive)
{
case'1':
left();break;
case'2':
right();break;
case'3':
temp=0xFE;interval();break;
case'4':
hello();break;
}
}
}
voidinit_SCI()
{
TMOD=0x20;//设置定时器1工作方式为2
SCON=0x50;//设置串口工作方式为1,且启动串口接收数据
TH1=0xFD;//设置波特率为9600
TL1=0XFD;//设置波特率为9600
TR1=1;//定时器1启动
PCON=0x00;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 串口 通讯 实验设计