单片机与PC机串口通讯设计.docx
- 文档编号:28182289
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:29
- 大小:186.09KB
单片机与PC机串口通讯设计.docx
《单片机与PC机串口通讯设计.docx》由会员分享,可在线阅读,更多相关《单片机与PC机串口通讯设计.docx(29页珍藏版)》请在冰豆网上搜索。
单片机与PC机串口通讯设计
第一章串口通讯的系统组成与原理
1.1系统组成及通讯原理
1.1.1系统构成
一、MSP430F149功能简介:
本设计选用的主要芯片为MSP430F149,该单片机属于德州仪器公司MSP430F14X/16XFLASH系列。
该系列是一组工业级超低功耗的微控制器,运行环境温度为-40~+85摄氏度工作电压范围1.8~3.6V,MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。
由于具有16位RISC(精简指令集)结构,16位寄存器和常数寄存器,MSP430达到了最大的代码效率。
数字控制的振荡器提供快速从所有低功耗模式苏醒到活动模式的能力时间少于6ms。
MSP430F149有较高的处理速度,在8MHz晶体驱动下指令周期为125ns。
另外它带有两个16位定时器(带看门狗功能)、速度极快的8通道12位A/D转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、一个内部比较器和两个通用同步/异步发射接收器、48个I/O口(均可独立控制)的微处理器结构。
硬件乘法器提高了单片机的性能并使单片机在编码和硬件上可兼容[3]。
这些特点保证了可编制出高效率的源程序。
二、系统构成
1、系统框图
系统构成如图1-1所示,由上位机(即工业控制计算机)、通讯接口和下位机3部分组成。
上位机选用的是工控机,智能终端由单片机MSP430F149和外围传感器放大电路等构成(本设计部涉及该部分的设计)。
单片机与PC机之间通信方式为串行异步方式(UART),下位机采用中断方式进行与上位机的数据交换,上位机采用按时查询方式对各串口进行读写操作。
单片机MSP430要想与PC串口连接或者其它带有串口的终端设备连接,接口电路部分必须要进行EIA-RS-232-C与MSP430电平和逻辑关系的转换[4]。
本设计将采用MAX3221芯片,完成3V~5V电平与串口电平的双向转换。
图1-1系统框图
1.1.2通信原理及协议
一、MSP430的串口通讯模块(USART)
由于本设计解决的是串口通讯问题,所以通信的基本原理是利用MSP430的串口通讯模块(USART)来实现单片机和PC机之间的串口通信。
1、USART的硬件构成:
SP430F169的串行通讯模块(USART)的作用主要是实现对外通信,它可以实现异步通信(UART)和同步通信(SPI)两中通讯功能[5]。
图1-2是USART的通讯模块。
由图1-2可以看出USART模块分别由波特率部分,接收部分,发送部分,端口IO部分组成。
USART接收部分包括接收寄存器,接收移位寄存器以及控制模块组成,它在接收信息的时候产生一些状态信息,并设置相应的中断标志位。
USART的发送部分包括发送寄存器,发送移位寄存器以及控制模块组成,它在发送的时候产生一些状态信息,并可以设置发送中断标志位。
USART的波特率产生部分主要包括时钟的选择,波特率的产生以及波特率的调整部分组成,它通过设置波特率寄存器和波特率调整寄存器来获得需要的波特率。
USART包含一个控制模块,通过控制模块可以选择相应的工作模式,同时设置相应的管脚,比如对异步和同步工作方式的选择,对奇偶校验位和停止位个数等所有设置都是通过操作该模块的寄存器来实现的。
对于不同系列的MSP单片机其USART模块可能有一个也可能有两个,而MSP430F149有两个,分别是USART0和USART1。
图1-2USART模块组成
2、USART的控制寄存器和工作模式
USART的控制寄存器是其八个寄存器之中的一个,表1-1是其位的格式,
表1-1控制寄存器
PENV
PEV
SP
CHAR
LISTEN
SYNC
MM
SWRST
USART的控制寄存器有8个有效控制位,通过对这些控制位的设置可以对工作模式,通信协议,校验位等进行选择。
用户对USART的所有操作都是通过操作该寄存器的控制位来完成的[6]。
下面是各个位的简单功能描述,知道这些控制位的功能,有助于我们在后面进行硬件连接和软件设计.
PENV:
校验使能位。
该位为0不允许校验;为1时,允许校验,且在发送时产生校验位,在接收时希望接收到校验位。
在地址位多机模式中地址位包括在校验计算中。
PEV:
奇偶校验位。
为0时,奇校验,为1时进行偶校验。
SP:
停止位。
接收时停止位只有一个。
发送时,该位为0,只有一个停止位;该位为1时,有两个停止位。
CHAR:
字符长度位。
该位为0表示发送的数据为7位,该位为1时表示
发送的数据为8位。
LISTEN:
监听使能位。
该位为0没有反馈;该位为1,有反馈,发送的数据送到接收器,可以进行自环测试。
SYNC:
该位为0时,USART为异步通信(UART)模式;该位为1,USART为同步通信(SPI)模式。
MM:
多机模式选择。
当该位为0时,多机模式选择线路空闲多机协议;该位为1时,多机模式选择地址位多机协议。
SWRST:
软件复位使能位。
也叫控制位。
该位影响着其他控制位和状态位的状态,在串行口的使用过程中,这一位比较重要。
一次正确的USART模块初始化应该是这样的顺序:
先在SWRST=1的情况下设置串口;然后设置SWRST=0;最后如果使用中断,则设置相应的中断使能。
该位为0时:
USART模块被允许。
该位为1时:
如果该位置位,则USART状态机和操作运行标志位都被初使化成复位状态(URXIFG=URXIE=UTXIE=0,UTXIFG=1);同时所受影响的逻辑位保持在复位状态,直到SWRST位复位。
这意味着,当系统复位后,只有对SWRST位复位,USART的功能才能被重新允许;但是接收和发送标志URXE和UTXE不受SWRST控制位的影响。
二、通讯方式
1、异步模式(UART)的选择
MSP430F149单片机支持两种不同的串行协议,异步通信(UART)协议和同步通信(SPI)协议。
这两种协议的选择是通过控制寄存器中的SYNC位来决定的[7]。
本设计中主要是利用MSP430的异步通信(UART)模式原理实现单片机与PC机之间的串口通信的。
MSP430控制寄存器内的信息决定了USART的基本操作,选择异步模式(UART)需要通过设置SYNC=0来实现;本设计中对于其他控制位的设置还有:
设置CHAR=1,选择字符长度为8位;设置SP=0,选择停止位1位;设置PEV=0,选择奇校验;设置MM=1,选择地址位多机模式协议。
控制位的选择基本上决定了系统的通信方式和通信格式。
2、UART模块的特点
由于MSP430单片机具有两个片内的UART:
串口0和串口1,实现两个串口通信相当容易,只需要设置适当的寄存器就可以使串口工作起来,两个串口都采用中断方式,当接收有数据时,设置一个标志通知主程序有数据到来,当主程序有数局要发送时,设置一个中断标志进入中断发送数据。
本设计选用串口1与上位机进行通信。
在异步模式下,接收部分自身实现帧的同步,通信双方只要使用相同的波特率即可。
异步模式的帧格式有1位起始位、7位或8位数据位,校验位,1位地址位,1或2位停止位构成。
在异步模式下,MSP430支持两种多机模式:
线路空闲多机模式和地址位多机模式。
线路空闲模式下,数据块被一段空闲的时间分割。
在字符的第一个停止位之后收到10个以上的1,表示检测到线路空闲;如果采用两个停止位,则第二个停止位被认为是空闲周期的第一个信号。
在使用地址位多机模式时,字符包含一个附加的位作为地址标识,数据快的第一个字符带有一个置位的地址位,用以表明该字符是一个地址。
由于已经设置了控制寄存器中的MM=1,故在本设计中选择了地址位多机模式。
下面是UART通信的一些特点:
(1)、异步通讯模式,包括线路空闲/地址位通信协议。
(2)、有两个单独的移位寄存器,输入/输出移位寄存器。
(3)、传输7位或8位数据,可采用奇偶或无校验。
(4)、可编程实现波特率调整。
(5)、分别发,收单独中断。
(6)、有效地检测到起始位实现从低功耗唤醒。
(7)、状态标志检测错误或者地址位。
三、基本通信协议:
在PC机和多台单片机的通讯中,确定一个明确而合理的通讯协议是关键,包括对数据格式、通讯方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定[6]。
由于已经选择了UART的多机通信模式.为了区别不同的分机,必须为每个分机分配一个唯一的地址,此地址唯一区别各单片机。
数据格式采用数据包的形式,一次传输一组数据。
数据包格式如表1-2所示:
表1-2数据包格式
起使标志位
下位机地址
操作命令
数据长度
数据内容
和校验
结束标志
起始标志位:
1个字节
分机地址:
1个字节
命令/数据:
1个字节
数据长度:
1个字节
数据内容:
n个字节
和检验:
2个字节
结束标志位:
1个字节
数据格式中的地址位表示与PC机通讯的单片机地址。
操作命令则表示此次通讯要完成的操作。
在单片机发送上位机接收的时候,协议规定命令FFH为上报数据,此时数据包中的数据长度、数据内容、和检验三个域便填充实际发送数据的个数、数据及和校验;命令F0H-F3H则表示单片机给PC机的反馈信息,此时数据包中的数据长度、数据内容和检验三个域为空,其中当命令为F0H表示接收成功,F1H表示接收失败并要求重发,F2H表示单片机有数据上报要求,F3H表示单片机无数据上报要求。
操作命令域在PC机发送单片机接收的时候也有相似的协议规定。
第二章硬件电路设计
2.1接口电平电路设计
2.1.1RS-232接口电路设计
一、RS-232电气标准
1、RS-232基本电气要求
由于MSP430最大工作电压为3.6V,所以在与PC机进行串口通信的时候需要进行EIA-RS-232逻辑电平转换。
EIA-RS-232是美国电子工业协会(EIA)制定的串口通信协议,“C”表示标准修第几次修改,其信号电平采用负逻辑,逻辑“1”的电平是-5V~-15V,逻辑“0”的电平为+5V~+15V,因为其有2V的噪声容限,故最终限制接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1”[8]。
因此,实际工作时,应保证电平在±(3~15)V之间。
S-232-C最高传输速率为20kb/s,最大直接连接长度为15m。
2、RS-232常用接口
RS-232-C标准接口有25条线:
4条数据线、11条控制线、3条定时线、7条备用和未定义线。
其中常用的只有9根,它们是:
(1)6条联络控制信号线:
数据装置准备好(Datasetready-DSR)——有效时(ON)状态,表明MODEM处于可以使用的状态。
数据终端准备好(Datasetready-DTR)——有效时(ON)状态,表明数据终端可以使用。
请求发送(Requesttosend-RTS)——用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态)。
允许发送(Cleartosend-CTS)——用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。
该信号有效时,则通知终端开始沿发送数据线TxD发送数据。
接收线信号检出(ReceivedLinedetection-RLSD)——用来表示DCE已接通通信链路,告知DTE准备接收数据。
此线也叫做数据载波检出(DataCarrierdectection-DCD)线。
振铃指示(Ringing-RI)——该信号有效(ON状态)表示通知终端,已被呼叫。
上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。
例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。
若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TxD线上发送串行数据。
这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送
(2)2条数据发送与接收线:
发送数据(Transmitteddata-TxD)——通过TxD终端将串行数据发送已经发送。
接收数据(Receiveddata-RxD)——通过RxD线终端接收从PC发来的串行数据,(DCE→DTE)。
(3)一条地线
信号地——SG,无方向。
二、接口电路设计
RS-232接口电路连接方式根据需要有三线、六线、八线、两线多种。
当通讯速率较低时可以采用三线对接法,按图2-2所示。
图2-1RS-232电缆连接图
在本设计中采用一块MAX3221芯片把从MSP430中USART过来的信号进行电平转换后输出到PC,把从PC发过来的信号发送给USART,设计中的RS-232接口电路如图2-2所示:
图2-2RS-232接口电路图
图2-2中DB9为即为我们选用的RS-232连接器——9针串行口,其插针分别对应RS-232-C标准接口9根常用线。
其对应关系如表2-1所示[9]。
表2-19针串行口插针对应关系表
DB9管脚号
插针功能说明
标记
1
接收线信号检出
DCD
2
接收数据
RD
3
发送数据
TD
4
数据终端就绪
DTR
5
信号地
SG
6
数据传输设备就绪
DSR
7
请求发送
RTS
8
允许发送
CTS
9
振铃指示
RI
由图2-2以及表2-1可以知道,接收使能EN接地,时钟有效;掉电模式控制脚FORCEOFF始终拉高,即MAX3221始终处在工作状态。
USART(本设计中选择UART1)的TXD脚与MAX3221的11脚(DIN)相连,USART的RXD脚与MAX3221的9脚(ROUT)相连;输入DIN的信号转换为RS-232电平后,经MAX3221的13脚(DOUT)输出到J5(DB9)的2脚(DB9的2脚为串口的RXD脚),接口J5(DB9)的3脚(串口的TXD脚)与MAX3221的8脚(RIN)相连,这样的连接方式已将USART的输出脚TXD(本设计中UART1的P3.6管脚)和输入脚RXD(本设计中UART1的P3.7管脚)连接对调,可以直接通过延长线与PC机相连。
2.2单片机电路设计
2.2.1单片机电路设计图
单片机电路比较简单,在与接口电路连接的的基础上,分别采用单片机的一般I/O接口实现与其他电路的连接。
由于是多路通信,所以每一路的硬件设计基本相同,下面为单片机部分电路图。
图2-3单片机部分电路图
由图2-3可以看出,在单片机的时钟设计上与其他的单片机有一定区别,MSP430F149单片机采用两个时钟输入,一个32KHZ的时钟信号,一个8MHZ的时钟信号,该系统的时钟信号都是采用晶体振荡器实现的.考虑到电源的输入波纹对单片机的影响,在电源的管脚增加一个0.1µF的电容来实现滤波,以减小输入端受到的干扰。
另外单片机还有模拟电源的输入端,所以这里需要考虑干扰问题,在该系统中的干扰比较小,因此模拟地和数字地共地,模拟电源输入端增加一个滤波电容以减小干扰[10]。
第三章软件设计
3.1功能描述
3.1.1上位机和下位机实现的功能
一、功能描述:
1、上位机功能
(1)向下位机进行呼叫,接着发送字符串,最后发送结束标志
(2)按照一定的时间间隔对串口进行读操作,如果有数据需要接收,则进行数据接收.
2、下位机功能
(1)接收功能:
识别上位机发送的地址,如果地址匹配则接收数据,直到结束标志到来,则停止接收。
(2)发送功能:
下位机有数据需要发送时,首先向上位机发送本机地址,然后发送数据,最后发送结束标志。
3.2程序设计
3.2.1下位机程序设计
一、下位机通讯协议
分布式控制系统中的下位机的每台单片机均有唯一的地址。
通信开始时,先由PC机呼叫被叫单片机的地址,单片机在接收到PC机的呼叫后,首先判断是不是自己的地址,如果不是就不予理睬。
如果是,则发送呼叫应答信号,并根据上位机的命令进行相应的接收或发送。
根据以上要求以及UART通信协议基本内容,可以将下位机通信协议设置如下表:
表3-1下位机通讯协议格式
地址
数据
结束
地址:
取值1—8,即上位机可以呼叫的8个下位机之一,发送时地址位有效。
数据:
取值9—127,为ASCⅡ可显示字符。
结束:
0。
二、下位机程序流程图
下位机(单片机)程序设计包括初始化设计、串口中断服务设计和主处理程序设计。
本例虽然有多个下位机,但他们除了本机地址的设置不同外,其他硬件电路都是相同的,所以各下位机的软件设计也是相同的。
按照通信协议的要求可以设计出如图3-1的下位机程序流程。
图3-1下位机(单片机)主程序流程图
三、初始化设置
初始化设置包括时钟初始化,端口初始化和串口初始化。
1、时钟初始化程序及说明:
#include
#include"UART.h"
voidInit_CLK(void)
{
unsignedinti;
BCSCTL1=0X00;//将寄存器的内容清零
//XT2震荡器开启
//LFTX1工作在低频模式
//ACLK的分频因子为1
do
{
IFG1&=~OFIFG;//清除OSCFault标志
for(i=0x20;i>0;i--);
}
while((IFG1&OFIFG)==OFIFG);//如果OSCFault=1BCSCTL2=0x00;//将寄存器的内容清零
BCSCTL2+=SELM1;//MCLK的时钟源为TX2CLK,分频因子为1
BCSCTL2+=SELS;//SMCLK的时钟源为TX2CLK,分频因子为1
}
由上面的程序可以知道,只要设置BCSCTL1和BCSCTL2寄存器的相应位就可以获得需要的MCLK、SMCLK、和ACLK的时钟信号。
2、端口初始化
voidInit_Port(void)
{
//将所有的管脚在初始化的时候设置为输入方式
P3DIR=0;
//将所有的管脚设置为一般I/O口
P3SEL=0;
return;
}
上面的初始化程序将P3口初始化为一般的I/O接口。
3、串口初始化
由于串口1(UART1)的管脚号为P3.6和P3.7,端口初始化只是将端口设置为一般的I/O接口。
而本设计里需要将P3.6和P3.7作为UART的输出和输入管脚,所以这里需要对其另外初始化。
UART1的初始化程序代码为:
、
voidInit_UART1(void)
{
U1CTL=0X00;//将寄存器的内容清零
UCTL1&=~SWRST;//SWRDT复位,UART允许
UCTL1=CHAR+MM;//8位数据位,1位停止位,地址位模式
URCTL1|=URXWIE;//只有地址字符使URXIFG置位
UBR0_1=0X03;
UBR1_1=0X00;
UMCTL_1=0X4A;//使用32KHz晶振时,波特率为9600bps
U1TCTL=0x10;//选定ACLK(32KHz晶振)为时钟源
ME2|=UTXE1+URXE1;//使能UART1的TXD和RXD
IE2|=URXIE1;//使能UART1的RX中断
IE2|=UTXIE1;//使能UART1的TX中断
P3SEL|=BIT6;//设置P3.6为UART1的TXD
P3SEL|=BIT7;//设置P3.7为UART1的RXD
P3DIR|=BIT6;//P3.6为输出管脚
return;
}
根据硬件设置的要求,上面的程序设置了串口1的参数,比如8位数据位,1位停止位,地址位多机模式波特率发生器选择ACLK,波特率为9600波特/秒等,将P3.6和P3.7设置为串口1的I/O管脚。
四、串口中断服务程序
串口接收和发送都采用中断方式,设计单片机通信程序时,必须充分发挥单片机的效率,由于单片机多应用于实时性较强的控制场合,因此,应将及时响应和控制对象的动作放在优先考虑的位置,以尽量减少通信等辅助性操作所占用的CPU时间[11]。
基于上述考虑,在设计单片机通信程序时,将中断程序分为接收中断服务程序和发送中断服务程序2部分。
下面为串口通信程序流程图:
图3-2串口通信模块程序流程图
1、接收中断服务程序
当有数据收到时,设置一个标志通知主程序有数据到来,当地址位验证无误后,则开始接收数据。
下面为接收中断处理程序代码:
interrupt[UART1RX_VECTOR]voidUART1_RX_ISR(void)
{
if(URCTL1&URXWIE)//接收为地址方式时等待正确的地址出现
{
if(URBUF_1==ADDRESS)//地址正确,改变接收为数据方式,准备接收
{
URCTL1&=~URXWIE;
nRX1_Len_temp=0;
}
}
else//接收为数据时
{
UART1_RX_BUF[nRX1_Len_temp]=RXBUF1;//数据存入UART1_RX_BUF里
nRX1_Len_temp+=1;
if(UART1_RX_BUF[nRX1_Len_temp++]==0)//是否到达停止位
{
nRX1_Len=nRX1_Len_temp;
nRev_UART1=1;//设置标志来通知主程序
nRX1_Len_temp=0;
URCTL1|=URXWIE;//数据收完改变为地址方式
}
}
对于接收中断,程序处于等待状态,当外面有数据到来时则触发接收,进入接收中断服务程序,当地址验证正确开始后面的数据,中断从“RxBUF1”寄存器里读取数据,将读到的数据放到“UART1_RX_BUF[]”全局缓冲区里,在接收数据之后设置一个标志“nRev_UART1”来通知主程序,完成后等待下一中断的到来。
接收中断服务程序包含了对地址位是否匹配的验证。
2、发送中断服务程序
当主程序有数据要发送时,设置一个中断标志进入中断并发送数据。
下面为程序代码:
interrupt[UART1TX_VECTOR]voidUART1_TX_ISR(void)
{
if(nTX1_Len!
=0)
{
nTX1_Flag=0;//表示缓冲区里的数据没有发送完
TXBUF1==0x01;//先写入地址字符
TXBUF1=UART1_TX_BUF[nSend_TX1];//开始传输数据
nSend_TX1+=1;
if(nSend_TX1>=nTX1_Len)//数据是否发送完
{
nSend_TX1=0;
nTX1_Len=0;
nTX1_Flag=1;//缓冲区里没有数据要发送了
}
}
}
对于发送中断,程序一般处于禁止等待状态。
只有当单片机的发送缓冲区历由数据需要发送,并将发送中断置为允许方式后,发送中断才开始工作。
发送时从缓冲区里发送数据,遵守通讯协议:
首先发送地址位,然后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 PC 串口 通讯 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)