单片机与PC机串口通讯设计_第1页
单片机与PC机串口通讯设计_第2页
单片机与PC机串口通讯设计_第3页
单片机与PC机串口通讯设计_第4页
单片机与PC机串口通讯设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.第一章 串口通讯的系统组成与原理1.1 系统组成及通讯原理 1.1.1 系统构成一、 MSP430F149功能简介: 本设计选用的主要芯片为MSP430F149,该单片机属于德州仪器公司MSP430F14X/16X FLASH 系列。该系列是一组工业级超低功耗的微控制器,运行环境温度为 -40+85 摄氏度工作电压范围1.83.6V, MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。由于具有16位RISC(精简指令集)结构,16位寄存器和常数寄存器,MSP430 达到了最大的代码效率。数字控制的振荡器提供快速从所有低功耗模式苏醒到

2、活动模式的能力时间少于6ms。MSP430F149有较高的处理速度,在 8MHz 晶体驱动下指令周期为 125 ns。 另外它带有两个16 位定时器(带看门狗功能)、速度极快的8 通道12 位A/D 转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、一个内部比较器和两个通用同步/异步发射接收器、48个I/O口(均可独立控制)的微处理器结构。硬件乘法器提高了单片机的性能并使单片机在编码和硬件上可兼容3。这些特点保证了可编制出高效率的源程序。二、系统构成1、系统框图系统构成如图1-1所示,由上位机(即工业控制计算机)、通讯接口和下位机3部分组成。上位机选用的是工控机 ,智能终端由单片机M

3、SP430F149和外围传感器放大电路等构成(本设计部涉及该部分的设计)。单片机与PC机之间通信方式为串行异步方式(UART),下位机采用中断方式进行与上位机的数据交换,上位机采用按时查询方式对各串口进行读写操作。单片机MSP430要想与PC 串口连接或者其它带有串口的终端设备连接,接口电路部分必须要进行EIA-RS-232-C 与MSP430 电平和逻辑关系的转换4。本设计将采用MAX3221芯片, 完成3V5V 电平与串口电平的双向转换。图1-1 系统框图 1.1.2 通信原理及协议一、MSP430的串口通讯模块(USART)由于本设计解决的是串口通讯问题,所以通信的基本原理是利用MSP4

4、30的串口通讯模块(USART)来实现单片机和PC机之间的串口通信。1、USART的硬件构成:SP430F169的串行通讯模块(USART)的作用主要是实现对外通信,它可以实现异步通信(UART)和同步通信(SPI)两中通讯功能5。图1-2是USART的通讯模块。由图1-2可以看出USART模块分别由波特率部分,接收部分,发送部分,端口IO部分组成。USART接收部分包括接收寄存器,接收移位寄存器以及控制模块组成,它在接收信息的时候产生一些状态信息,并设置相应的中断标志位。USART的发送部分包括发送寄存器,发送移位寄存器以及控制模块组成,它在发送的时候产生一些状态信息,并可以设置发送中断标志

5、位。USART的波特率产生部分主要包括时钟的选择,波特率的产生以及波特率的调整部分组成,它通过设置波特率寄存器和波特率调整寄存器来获得需要的波特率。USART包含一个控制模块,通过控制模块可以选择相应的工作模式,同时设置相应的管脚,比如对异步和同步工作方式的选择,对奇偶校验位和停止位个数等所有设置都是通过操作该模块的寄存器来实现的。对于不同系列的MSP单片机其USART模块可能有一个也可能有两个,而MSP430F149有两个,分别是USART0和USART1。图1-2 USART模块组成2、USART的控制寄存器和工作模式USART的控制寄存器是其八个寄存器之中的一个,表1-1是其位的格式,

6、表1-1 控制寄存器PENVPEVSPCHARLISTENSYNCMMSWRSTUSART的控制寄存器有8个有效控制位,通过对这些控制位的设置可以对工作模式,通信协议,校验位等进行选择。用户对USART的所有操作都是通过操作该寄存器的控制位来完成的6。下面是各个位的简单功能描述,知道这些控制位的功能,有助于我们在后面进行硬件连接和软件设计.PENV:校验使能位。该位为0不允许校验;为1时,允许校验,且在发送时产生校验位,在接收时希望接收到校验位。在地址位多机模式中地址位包括在校验计算中。PEV:奇偶校验位。为0时,奇校验,为1时进行偶校验。SP:停止位。接收时停止位只有一个。发送时,该位为0,

7、只有一个停止位;该位为1时,有两个停止位。CHAR:字符长度位。该位为0表示发送的数据为7位,该位为1时表示发送的数据为8位。LISTEN:监听使能位。该位为0没有反馈;该位为1,有反馈,发送的数据送到接收器,可以进行自环测试。SYNC:该位为0时,USART为异步通信(UART)模式;该位为1,USART为同步通信(SPI)模式。MM:多机模式选择。当该位为0时,多机模式选择线路空闲多机协议;该位为1时,多机模式选择地址位多机协议。SWRST:软件复位使能位。也叫控制位。该位影响着其他控制位和状态位的状态,在串行口的使用过程中,这一位比较重要。一次正确的USART模块初始化应该是这样的顺序:

8、先在SWRST=1的情况下设置串口;然后设置SWRST=0;最后如果使用中断,则设置相应的中断使能。该位为0时:USART模块被允许。该位为1时:如果该位置位,则USART状态机和操作运行标志位都被初使化成复位状态(URXIFG=URXIE=UTXIE=0,UTXIFG=1);同时所受影响的逻辑位保持在复位状态,直到SWRST位复位。这意味着,当系统复位后,只有对SWRST位复位,USART的功能才能被重新允许;但是接收和发送标志URXE和UTXE不受SWRST控制位的影响。二、通讯方式1、异步模式(UART)的选择MSP430F149单片机支持两种不同的串行协议,异步通信(UART)协议和同

9、步通信(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,实现两个

10、串口通信相当容易,只需要设置适当的寄存器就可以使串口工作起来,两个串口都采用中断方式,当接收有数据时,设置一个标志通知主程序有数据到来,当主程序有数局要发送时,设置一个中断标志进入中断发送数据。本设计选用串口1与上位机进行通信。在异步模式下,接收部分自身实现帧的同步,通信双方只要使用相同的波特率即可。异步模式的帧格式有1位起始位、7位或8位数据位,校验位,1位地址位,1或2位停止位构成。在异步模式下,MSP430支持两种多机模式:线路空闲多机模式和地址位多机模式。线路空闲模式下,数据块被一段空闲的时间分割。在字符的第一个停止位之后收到10个以上的1,表示检测到线路空闲;如果采用两个停止位,则第

11、二个停止位被认为是空闲周期的第一个信号。在使用地址位多机模式时,字符包含一个附加的位作为地址标识,数据快的第一个字符带有一个置位的地址位,用以表明该字符是一个地址。由于已经设置了控制寄存器中的MM=1,故在本设计中选择了地址位多机模式。下面是UART通信的一些特点:(1)、异步通讯模式,包括线路空闲/地址位通信协议。(2)、有两个单独的移位寄存器,输入/输出移位寄存器。(3)、传输7位或8位数据,可采用奇偶或无校验。(4)、可编程实现波特率调整。(5)、分别发,收单独中断。(6)、有效地检测到起始位实现从低功耗唤醒。(7)、状态标志检测错误或者地址位。三、基本通信协议:在PC机和多台单片机的通

12、讯中,确定一个明确而合理的通讯协议是关键,包括对数据格式、通讯方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定6。由于已经选择了UART的多机通信模式.为了区别不同的分机,必须为每个分机分配一个唯一的地址,此地址唯一区别各单片机。数据格式采用数据包的形式,一次传输一组数据。数据包格式如表1-2所示:表 1-2 数据包格式起使标志位下位机地址操作命令数据长度数据内容和校验结束标志起始标志位:1 个字节 分机地址: 1 个字节命令/ 数据: 1 个字节 数据长度: 1 个字节 数据内容: n 个字节 和检验: 2 个字节 结束标志位: 1 个字节 数据格式中的地址位表示与PC

13、 机通讯的单片机地址。操作命令则表示此次通讯要完成的操作。在单片机发送上位机接收的时候,协议规定命令FFH 为上报数据, 此时数据包中的数据长度、数据内容、和检验三个域便填充实际发送数据的个数、数据及和校验;命令F0H - F3H 则表示单片机给PC机的反馈信息,此时数据包中的数据长度、数据内容和检验三个域为空,其中当命令为F0H 表示接收成功,F1H 表示接收失败并要求重发,F2H 表示单片机有数据上报要求,F3H 表示单片机无数据上报要求。操作命令域在PC 机发送单片机接收的时候也有相似的协议规定。第二章 硬件电路设计2.1 接口电平电路设计2.1.1 RS-232接口电路设计一、 RS-

14、232电气标准1、RS-232基本电气要求由于MSP430最大工作电压为3.6V,所以在与PC机进行串口通信的时候需要进行EIA-RS-232逻辑电平转换。EIA-RS-232 是美国电子工业协会(EIA)制定的串口通信协议,“C”表示标准修第几次修改,其信号电平采用负逻辑,逻辑“1”的电平是-5V15V,逻辑“0”的电平为+5V+15V,因为其有2V的噪声容限,故最终限制接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号 作为逻辑“1”8。因此,实际工作时,应保证电平在(315)V之间。S-232-C最高传输速率为20kb/s,最大直接连接长度为15m。2、RS-232常用接口RS

15、-232-C标准接口有25条线:4条数据线、11条控制线、3条定时线、7条备用和未定义线。其中常用的只有9根,它们是:(1)6条联络控制信号线: 数据装置准备好(Data set ready-DSR)有效时(ON)状态,表明MODEM处于可以使用的状态。 数据终端准备好(Data set ready-DTR)有效时(ON)状态,表明数据终端可以使用。 请求发送(Request to send-RTS)用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态)。允许发送(Clear to send-CTS)用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响

16、应信号。该信号有效时,则通知终端开始沿发送数据线TxD发送数据。 接收线信号检出(Received Line detection-RLSD)用来表示DCE已接通通信链路,告知DTE准备接收数据。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。 振铃指示(Ringing-RI)该信号有效(ON状态)表示通知终端,已被呼叫。 上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)

17、状态的回答后,才能在TxD线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送(2)2条数据发送与接收线: 发送数据(Transmitted data-TxD)通过TxD终端将串行数据发送已经发送。接收数据(Received data-RxD)通过RxD线终端接收从PC发来的串行数据,(DCEDTE)。 (3)一条地线 信号地SG,无方向。 二、接口电路设计RS-232接口电路连接方式根据需要有三线、六线、八线、两线多种。当通讯速率较低时可以采用三线对接法,按图2-2所示。 图2-1 RS-232电缆连接图在本

18、设计中采用一块MAX3221芯片把从MSP430中USART过来的信号进行电平转换后输出到PC,把从PC发过来的信号发送给USART,设计中的RS-232接口电路如图2-2所示:图2-2 RS-232接口电路图图2-2中DB9为即为我们选用的RS-232连接器9针串行口,其插针分别对应RS-232-C标准接口9根常用线。其对应关系如表2-1所示9。表2-1 9针串行口插针对应关系表DB9管脚号插针功能说明标记1接收线信号检出DCD2接收数据RD3发送数据TD4数据终端就绪DTR5信号地SG6数据传输设备就绪DSR7请求发送RTS8允许发送CTS9振铃指示RI由图2-2以及表2-1可以知道,接收

19、使能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管脚)连接对调

20、,可以直接通过延长线与PC机相连。2.2 单片机电路设计2.2.1 单片机电路设计图单片机电路比较简单,在与接口电路连接的的基础上,分别采用单片机的一般I/O接口实现与其他电路的连接。由于是多路通信,所以每一路的硬件设计基本相同,下面为单片机部分电路图。图2-3 单片机部分电路图由图2-3可以看出,在单片机的时钟设计上与其他的单片机有一定区别,MSP430F149单片机采用两个时钟输入,一个32KHZ的时钟信号,一个8MHZ的时钟信号,该系统的时钟信号都是采用晶体振荡器实现的.考虑到电源的输入波纹对单片机的影响,在电源的管脚增加一个0.1F的电容来实现滤波,以减小输入端受到的干扰。另外单片机还

21、有模拟电源的输入端,所以这里需要考虑干扰问题,在该系统中的干扰比较小,因此模拟地和数字地共地,模拟电源输入端增加一个滤波电容以减小干扰10。第三章 软件设计 3.1 功能描述3.1.1 上位机和下位机实现的功能一、功能描述:1、上位机功能(1)向下位机进行呼叫,接着发送字符串,最后发送结束标志(2)按照一定的时间间隔对串口进行读操作,如果有数据需要接收,则进行数据接收.2、下位机功能(1)接收功能:识别上位机发送的地址,如果地址匹配则接收数据,直到结束标志到来,则停止接收。(2)发送功能:下位机有数据需要发送时,首先向上位机发送本机地址,然后发送数据,最后发送结束标志。3.2 程序设计 3.2

22、.1 下位机程序设计一、下位机通讯协议分布式控制系统中的下位机的每台单片机均有唯一的地址。通信开始时,先由PC机呼叫被叫单片机的地址,单片机在接收到PC机的呼叫后,首先判断是不是自己的地址,如果不是就不予理睬。如果是,则发送呼叫应答信号,并根据上位机的命令进行相应的接收或发送。根据以上要求以及 UART通信协议基本内容,可以将下位机通信协议设置如下表:表3-1 下位机通讯协议格式地 址数 据 结束地址:取值18,即上位机可以呼叫的8个下位机之一,发送时地址位有效。数据:取值9127,为ASC 可显示字符。结束:0。二、下位机程序流程图下位机(单片机)程序设计包括初始化设计、串口中断服务设计和主

23、处理程序设计。本例虽然有多个下位机,但他们除了本机地址的设置不同外,其他硬件电路都是相同的,所以各下位机的软件设计也是相同的。按照通信协议的要求可以设计出如图3-1的下位机程序流程。图3-1 下位机(单片机)主程序流程图三、初始化设置初始化设置包括时钟初始化,端口初始化和串口初始化。1、时钟初始化程序及说明:#include #include UART.h void Init_CLK(void) unsigned int i; BCSCTL1 = 0X00;/将寄存器的内容清零 /XT2震荡器开启 /LFTX1工作在低频模式 /ACLK的分频因子为1 do IFG1&=OFIFG; / 清除O

24、SCFault标志for(i=0x20;i0;i-); while (IFG1 & OFIFG) = OFIFG); / 如果OSCFault =1 BCSCTL2=0x00; /将寄存器的内容清零 BCSCTL2 += SELM1;/MCLK的时钟源为TX2CLK,分频因子为1 BCSCTL2 += SELS;/SMCLK的时钟源为TX2CLK,分频因子为1 由上面的程序可以知道,只要设置BCSCTL1和BCSCTL2寄存器的相应位就可以获得需要的MCLK、SMCLK、和ACLK的时钟信号。2、端口初始化 void Init_Port(void) /将所有的管脚在初始化的时候设置为输入方式

25、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的初始化程序代码为:、void Init_UART1(void) U1CTL = 0X00; /将寄存器的内容清零UCTL1&=SWRST; /SWRDT复位,UART允许UCTL1=CHAR+MM; /8位数据位,1位停止位,地址位模式 U

26、RCTL1 |=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 P3D

27、IR |= BIT6;/P3.6为输出管脚 return; 根据硬件设置的要求,上面的程序设置了串口1的参数,比如8位数据位,1位停止位,地址位多机模式波特率发生器选择ACLK,波特率为9600波特/秒等,将P3.6和P3.7设置为串口1的I/O管脚。四、串口中断服务程序串口接收和发送都采用中断方式,设计单片机通信程序时,必须充分发挥单片机的效率,由于单片机多应用于实时性较强的控制场合,因此, 应将及时响应和控制对象的动作放在优先考虑的位置,以尽量减少通信等辅助性操作所占用的CPU时间11。基于上述考虑,在设计单片机通信程序时,将中断程序分为接收中断服务程序和发送中断服务程序2部分。下面为串口

28、通信程序流程图:图3-2串口通信模块程序流程图1、接收中断服务程序 当有数据收到时,设置一个标志通知主程序有数据到来,当地址位验证无误后,则开始接收数据。下面为接收中断处理程序代码:interrupt UART1RX_VECTOR void UART1_RX_ISR(void)if(URCTL1&URXWIE) /接收为地址方式时等待正确的地址出现if(URBUF_1=ADDRESS) /地址正确,改变接收为数据方式,准备接收 URCTL1&=URXWIE;nRX1_Len_temp = 0; else /接收为数据时UART1_RX_BUFnRX1_Len_temp = RXBUF1;/数据

29、存入UART1_RX_BUF里 nRX1_Len_temp += 1; if(UART1_RX_BUFnRX1_Len_temp += 0) /是否到达停止位 nRX1_Len = nRX1_Len_temp; nRev_UART1 = 1; /设置标志来通知主程序nRX1_Len_temp = 0;URCTL1 |=URXWIE; /数据收完改变为地址方式 对于接收中断,程序处于等待状态,当外面有数据到来时则触发接收,进入接收中断服务程序,当地址验证正确开始后面的数据,中断从“RxBUF1”寄存器里读取数据,将读到的数据放到“UART1_RX_BUF ”全局缓冲区里,在接收数据之后设置一个标

30、志“nRev_UART1”来通知主程序,完成后等待下一中断的到来。接收中断服务程序包含了对地址位是否匹配的验证。2、发送中断服务程序 当主程序有数据要发送时,设置一个中断标志进入中断并发送数据。下面为程序代码:interrupt UART1TX_VECTOR void UART1_TX_ISR(void) if(nTX1_Len != 0) nTX1_Flag = 0;/ 表示缓冲区里的数据没有发送完 TXBUF1=0x01; /先写入地址字符 TXBUF1 = UART1_TX_BUFnSend_TX1; /开始传输数据 nSend_TX1 += 1; if(nSend_TX1 = nTX1

31、_Len) /数据是否发送完 nSend_TX1 = 0; nTX1_Len = 0; nTX1_Flag = 1; /缓冲区里没有数据要发送了 对于发送中断,程序一般处于禁止等待状态。只有当单片机的发送缓冲区历由数据需要发送,并将发送中断置为允许方式后,发送中断才开始工作。发送时从缓冲区里发送数据,遵守通讯协议:首先发送地址位,然后发送需要传输的数据,最后发送校验以及结束标志。在发送中断服务程序里从“UART1_TX_BUF ”全局缓冲区里取出数据给“TXBUF1”寄存器进行发送,发送完后发送中断服务程序等待下一中断的到来。以上两程序可以看出采用中断有很好的结构,只要在中断服务程序里理接收和

32、发送数据,然后与主程序进行数据交换,易实现多任务操作,很好利用单片机资源。五、主处理程序主处理程序包含初始化、设置串口工作方式、对接收到的数据进行处理以及封装需要发送的数据。下面是它的程序代码。#include #include sp3220.h/定义串口操作变量char nRev_UART1;/ 串口 1 的接收标志char UART1_TX_BUF60;/ 串口 1 的发送缓冲区char UART1_RX_BUF60;/ 串口 1 的接收缓冲区int nTX1_Len;char nRX1_Len;char nRX1_Len_temp;char nTX1_Flag;int nSend_TX1

33、;void main(void)int nRes_UART1; int nRes = 0; char UART1_RX_Temp60; int i; int n;WDTCTL = WDTPW + WDTHOLD; / 关闭看门狗 _DINT(); / 关闭中断 Init_CLK(); / 初始化时钟 Init_Port(); / 初始化端口 Init_UART1(); / 初始化串口1_EINT(); / 打开中断for(;) / 进入处理循环 if(nRev_UART1 = 1) /如果有接收中断 nRev_UART1 = 0; for(i = 0;i nRX1_Len;i+) UART1_

34、RX_Tempi = UART1_RX_BUFi; / 将接收到的数据拷贝到临时缓冲区。 nRes = ProcessCMD(UART1_RX_Temp,nRX1_Len);switch(nRes) case 1:UART1_TX_BUF0 = O; UART1_TX_BUF1 = K; UART1_TX_BUF2 = 13; nTX1_Len = 3;/ 设置中断标志,进入发送中断程序IFG2 |= UTXIFG1; nRX1_Len = 0;break;case 2:for(n = 0;n nRX1_Len;n+) UART1_TX_BUFn = UART1_RX_Tempn; UART1

35、_TX_BUFnRX1_Len = O; UART1_TX_BUFnRX1_Len+1 = K; UART1_TX_BUFnRX1_Len+2 = 13; nTX1_Len = nRX1_Len + 3;/ 设置中断标志,进入发送中断程序IFG2 |= UTXIFG1; nRX1_Len = 0;break;case -1:UART1_TX_BUF0 = E; UART1_TX_BUF1 = R;UART1_TX_BUF2 = R; UART1_TX_BUF3 = O;UART1_TX_BUF4 = R; UART1_TX_BUF5 = 13; nTX1_Len = 6;/ 设置中断标志,进入

36、发送中断程序IFG2 |= UTXIFG1; nRX1_Len = 0; break;在上面的程序中主要根据“ProcessCMD(UART1_RX_Temp,nRX1_Len)”对得到的结果进行处理,向PC发送响应数据,如果接收到的数据有错误,则发送“ERROR”。数据封装完成后,设置“nTx1_Len”的长度,并通过“IFG2 |= UTXIFG1;”发送中断,从而使中断处理程序进行数据发送.上面程序中“ProcessCMD(UART1_RX_Temp,nRX1_Len)”主要处理接收到的数据并返回相应的代码以使主程序处理。该函数的具体代码为:int ProcessCMD(char pBu

37、f,int nLen) int nTemp = -1; int i; if(nLen = 2) return -1; if (nLen = 5)if(pBuf0 = A) & (pBuf1 = T) & (pBuf2 = E) & (pBuf3 = 0) nTemp = 1;if(pBuf0 = A) & (pBuf1 = T) & (pBuf2 = E) & (pBuf3 = 1) nTemp = 2; return nTemp;3.2.2 上位机(PC机)程序设计一、上位机串口通讯编程方法的选择随着Windows在国内的普及,越来越多的微机用户转向了Windows操作系统,所以在DOS环境

38、下利用汇编语言和C语言对串口通信的编程方式已经不再被看好。在Windows操作系统下利用VC6.0开发平台对串口通信上位机编程,其软件界面非常方便友好,编程工作量相对较小,只需进行主要应用功能的编程和少量界面控制的编程12。在Windows环境下,利用PC机串口进行通信的常用方法有以下几种:一是利用Windows API通信函数;二是利用VC的标准通信函数_inp、_inpw、_inpd、_outp、_outpw、_outpd等直接对串口进行操作;三是使用Microsoft Visual C+的通信控件(MSComm);四是利用第三方编写的通信类13。本设计将介绍用PComm开发机与单片机的通

39、信程序的解决方案。二、Pcomm主要命令码PComm( Professional Comm Tool for PC) 串口通信软件包专门运用Windows NT/2000/XP。如今WindowsNT/2000/XP 已被广泛应用, 而它提供的Win32Comm API 却复杂难用, 而且没有提供如Zmodem 等高阶应用函数, 这增加了通信软件工程师的负担。针对这种状况, MOXA开发了一套简单易用的程式函数库及功能强大的辅助工具PComm。PComm Pro支持多种编程语言,如Visual Basic、VC+、Delphi 等,并且适用于任何在Windows NT/2000/XP下以Win

40、 32 COMMAPI 为基础的驱动程式的其他品牌的多串口卡14。PComm的主要命令码有以下几种15:(1) sioopen(port);用于设置并打开串口,其中port的1、2、3、4分别代表COM、COM2、COM3、COM4。当返回值为时,表示串口已经打开,否则为串口打开出错。(2) sio close(port);关闭串口,当返回值为时,表示串口已经关闭,否则为串口关闭出错。(3) sio ioctl (port baud mode );用于设置串口波特率、校验位、数据位、停止位等参数。(4) sio getch();从串口输入缓冲区读出一个字符,返回值为表示已收到数据。(5) si

41、o-read(port buf len);用于从串口输入缓冲区读出一串字符,buf代表字符串数组len代表数组长度,返回值为表示未收到字符,大于代表收到字符的个数。(6) sio-SetReadTimeouts port TotalTimeouts(Inter-valTimeouts); 在设定的等待时间内连续读串口输入缓冲区,TotalTimeouts代表设定的等待时间,Inter-valTimeouts代表每次读出的间隔时间。(7) sio-flush(port func);用于清空缓冲区。当func为时清空输入缓冲区,为时清空输出缓冲区,为时清空输入输出缓冲区。(8) sio-putch

42、 (port term);用于向串口缓冲区发送一个字符,返回值为时表示发送正确,否则表示发送错误。(9) sio -write(port buf len);用于从串口缓冲区发送一串字符,buf代表字符串数组,len代表数组长度。三、上位机(PC机)通信协议分布式控制系统中的每台下位机均有唯一的地址。机发送数据时先发送被叫单片机地址,被叫单片机对地址进行判断,地址错误就不予理睬,地址正确则向上位机发送呼叫应答信号16。PC机在接收到呼叫应答信号之后,将向单片机发出通信命令字符串。以下是上位机(PC机)的通讯协议格式。表3-2 上位机通讯协议格式单片机号单片机号命令码命令码停止标志其中,单片机号代

43、表现场第几台单片机,占用个字节,发送两次的目的是为了防止干扰;命令码则代表上位机向下位机发布的工作命令,它也占用个字节,发送两次的目的也是为了防止干扰。而停止标志则表明上位机一次命令发送完毕,使用时可依据该标志判断上位机的命令是否发送完毕。四、上位机串口通讯实现过程在用PComm处理PC机的串口通信时,其实现过程如下:1、启动VC+6.0,新建一个基于对话框的应用程序TxRx。同时增加静态文本、编辑框和按钮等控件17。如图3-3所示。图3-3 基于对话框的接收发送数据程序根据实际需要还可以添加更多控件,诸如串口的打开和关闭按钮,波特率选择框以及一些实现更加高级功能的控件等,在这里仅添加基本的发

44、送接收等按钮控件。2、按照表3-3为每个控件添加相应的变量。表3-3 TxRx应用程序各控件的属性控 件ID变量名类 型按 钮IDC_TRSMITT发送按钮Edit1IDC_TXDATAM_TxDataCstringEdit2IDC_RXDATAM_RxDataCstring发送编辑控件的属性添加过程如图3-4所示。其他属性以及其他控件的添加方法类似。图3-4 发送编辑控件ID属性设置方法3、PComm和PCommlib加入到工程中,并在TxRxDlg.cpp文件中加入include “PCommh”头文件,此后便可调用其提供的通信命令集18。4、TxRxDlg.cpp文件中添加初始化程序代码

45、,也就是在On InitiDialog函数中的TODO语句后加入以下代码:/TODOAdd extra initialization hereInt ret port=1 ret=sio open port /打开串口sio DTR port 0 /置DTR为低电平sio ioctl port B9600 P NONEBIT 8 STOP 1 /设置波特率/为9600,位数据位,位停止位,无校验位。 添加结果入图3-5所示。图3-5 在TxRxDlg.cpp里添加初始化程序四、上位机通信程序对上位机通信程序的设计除了初始化串口外,剩下的就是对接收和发送程序的设计了,下面是一个简单的接收发送子程序,其功能是按照一定时间间隔对串口进行读操作,并能够每次向串口缓冲区发送5个字符19。void CTXRXDlg Send Recv /收发数据子函数while 1Int ret1Sio flush port 2; /清空串口输入输出缓冲区sio-write(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论