单片机与PC机串口通讯设计Word文档格式.docx

上传人:b****5 文档编号:19762125 上传时间:2023-01-09 格式:DOCX 页数:24 大小:184.18KB
下载 相关 举报
单片机与PC机串口通讯设计Word文档格式.docx_第1页
第1页 / 共24页
单片机与PC机串口通讯设计Word文档格式.docx_第2页
第2页 / 共24页
单片机与PC机串口通讯设计Word文档格式.docx_第3页
第3页 / 共24页
单片机与PC机串口通讯设计Word文档格式.docx_第4页
第4页 / 共24页
单片机与PC机串口通讯设计Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

单片机与PC机串口通讯设计Word文档格式.docx

《单片机与PC机串口通讯设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机与PC机串口通讯设计Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

单片机与PC机串口通讯设计Word文档格式.docx

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个字节

数据长度:

数据内容:

n个字节

和检验:

2个字节

结束标志位:

数据格式中的地址位表示与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<

MSP430X14X.h>

#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;

//设置标志来通知主程序

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;

//缓冲区里没有数据要发送了

}

对于发送中断,程序一般处于禁止等待状态。

只有当单片机的发送缓冲区历由数据需要发送,并将发送中断置为允许方式后,发送中断才开始工作。

发送时从缓冲区里发送数据,遵守通讯协议:

首先发送地址位,然后发送

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

当前位置:首页 > 经管营销 > 销售营销

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

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