串口通讯实验报告
- 格式:doc
- 大小:111.50 KB
- 文档页数:7
一、课程设计题目 两台PC机之间进行串口通信。 二、课程设计目的与要求
通过本次实训,加强学生们对微机原理与接口技术这门课程的理解和掌握,同时了解并掌握8250串口芯片和中断管理芯片8259的初始化编程和使用。 1.目的: 俩个PC机通过串行口互联,实现文件的无差错传输。 2.基本要求: (1) PC机使用8250串口芯片。中断管理芯片使用8259 (2)要求用C语言或汇编语言完成程序的设计。 (3)程序必须用中断方式来实现。 (4)在U盘上自备TURBO C 2.0编译环境。因为机房的计算机(C和D盘要还原)安装有还原卡。 (5)自购DB9P 公插头二个,2,3脚交叉连线,5脚直接连接,焊接。电缆长度一米。
(6)不准带电拔插串行口插头。 三、实现方法
1. 8250的初始化依据
8250(16550)的寄存器如下表所示:
基地址 读/写 寄存器缩写 注 释 0 Write - 发送保持寄存器(DLAB=0) 0 Read - 接收数据寄存器(DLAB=0) 0 Read/Write - 波特率低八位(DLAB=1) 1 Read/Write IER 中断允许寄存器 1 Read/Write - 波特率高八位(DLAB=1) 2 Read IIR 中断标识寄存器 2 Write FCR FIFO控制寄存器 3 Read/Write LCR 线路控制寄存器 4 Read/Write MCR MODEM控制寄存器 5 Read LSR 线路状态寄存器 6 Read MSR MODEM状态寄存器 7 Read/Write - Scratch Register
PC机支持1-4个串行口,即COM1-COM4,其基地址在BIOS数据区0000:0400-0000:0406中描述,对应地址分别为3F8/2F8/3E8/2E8,COM1及COM3使用PC机中断4,COM2及COM4使用中断3。 在上表中,8250共有12个寄存器,使用了8个地址,其中部分寄存器共用一个地址,由DLAB=0/1来区分,在DLAB=1用于设定通讯所需的波特率。常用的波特率参数见下表:
实验六 BSP串口操作1.实验目的所有的TMS320C54X都提供了串口,大多数都支持缓冲串口。
BSP串行接口能与串行设备,如编/译码器,串行A/D和D/A转换器等直接通信。
BSP支持8,10,12或16-bit数据单元的发送,同时允许程控串口通讯的时钟频率。
从‘VC5402开始,TMS32054xx提供了统一的多通道缓冲串口-McBSP。
McBSP串口是基于TMS320C2X、C20X、C5X、C54X的标准串口上扩展的,McBSP提供:♥全速双工通信♥双缓存发送和三缓存接收数据寄存器,以支持连续传送♥收和发使用独立的帧和时钟♥直接与多媒体数字信号编解码器的工业标准接口,以及有模拟接口和与串行ADC/DAC 的接口♥外部变速时钟发生器,内部可编程时钟发生器此外,McBSP还有下列功能:♥直接与下列格式接口_ T1/E1 framers_ MVIP switching compatible and ST-BUS compliant devices including:_ MVIP framers_ framers_ SCSA framers_ IOM-2 compliant devices_ AC97 compliant devices_ IIS compliant devices_ SPI_ devices♥多通道收发,通道数达128♥字宽可选: 8, 12, 16, 20, 24, and 32 bits♥ U-Law and A-Law 压缩与扩展♥ 8位传输时可选先传: LSB or MSB♥帧信号与时钟信号极性可编程本实验的主要目的是学习C54xx的McBSP串口的控制和使用,并利用‘VC5402的McBSP1串口实现数据的收发。
2.实验要求本实验重点研究McBSP串口的操作,包括串口的初始化和发、送中断服务程序的编写。
在DES5402PP 实验板上提供了McBSP1的接口(J6),其引脚的具体定义为:② ④ ⑥ ⑧ ⑩其中,‘VC5402虽然提供了独立的收发时钟BCLKR 和BLCKX ,独立的帧同步FSR 和FSX 信号,而在DES5402PP 板上,我们将两个时钟和两个帧同步分别接到一起,即J6的1脚BCLK1和J6的3脚FSR1。
1)先设置波特率把分频系数写入除数寄存器(3F8H/3F9H),方法:80H->3FBH(通信线控制寄存器,D7=1访问合用口寄存器)设置波特率=9600bps,分频系数= 1.8432MHz/(16*9600) = 12所以:12->3F8H(除数低8位) ,00->3F9H(除数高8位)2)设置通信格式把格式控制字->3FBH(通信线控制器)8位数据位,1位停止位,无校验,正常通信模式0000 0011->3FBH3)不采用中断0->3F9H(中断允许寄存器)4)设置MODEM控制寄存器0AH = 0000 1010 -> 3FCH ;正常收发模式5)发送字符3F8H(发送缓冲区)(1)先取按键查询键盘缓冲区MOV AH,1,INT 16H出口:ZF=0,有键入,AL=ASCII,AH=键入字符的扩展码ZF=1,无键入键盘输入单字符功能调用MOV AH,1 , INT 21H(或用无回显功能调用,8号)出口:AL=ASCII(2)将键值送3F8H (AL)-> 3F8H6)接收字符3F8H(接收缓冲区)(1)先查询3FDH(通信线状态寄存器),D0=1 表示接收缓冲区有数据未取走(2)读取接收缓冲区3F8H –> AL(3)显示输入字符2号功能调用g tv gtf参考程序:CODE SEGMENTASSUME CS:CODESTART PROC FARMOV DX,3FBHMOV AL,80HOUT DX,ALMOV DX,3F8HMOV AL,12OUT DX,ALMOV DX,3F9HMOV AL,0OUT DX,ALMOV DX,3FBHMOV AL,03OUT DX,ALMOV DX,3F9HMOV AL,0OUT DX,ALMOV DX,3FCHMOV AL,0AHOUT DX,0ALLP1: MOV AH,1INT 16HJZ PPMOV AH,1 ;(或8,无回显)INT 21HMOV DX,3F8HOUT DX,ALPP: MOV DX,3FDHIN AL,DXTEST AL,01HJZ QQMOV DX,3F8HIN AL,DXMOV DL,ALMOV AH,2INT 21HQQ: JMP LP1RETSTART ENDP CODE ENDSEND START。
实验报告课程名称:信息管理综合实验实验名称:WindowsAPI串口通信程序院(系):专业班级:姓名:学号:指导教师:一、实验目的1. 掌握串口通信程序设计流程;2. 理解WindowsAPI串口参数设置的作用;3. 掌握基于WindowsAPI的串口程序的VC基本框架;4. 掌握通过线程处理读、写事件的方法;5. 熟悉WindowsAPI串口处理函数的功能与参数设置。
二、实验软硬件环境1. 微机(两台间互连、一台的一个串口同时收发);2. USB-COM转换器;3. 串口连接数据线、收/发数据线短接线;4. WindowsXP/Win7 + VC++6.0/VC++2010。
三、实验内容1. 熟悉VC++多线程程序设计方法;2. 测试WindowsAPI串口相关函数;3. 设计并编写基于WindowsAPI的串口读写程序。
四、实验步骤(记录串口的连接、usb-com驱动的安装、程序框架的建立过程、MSCOMM控件属性的设置参数、程序源代码等)1.记录串口的连接串口的连接是通过USB转串口的数据线或者通过虚拟串口的软件进行,通过此进行通信。
其中,同一个电脑可以通过两个端口进行通信,但要保证端口都处于空闲。
在资源管理中进行查看端口。
b-com驱动的安装选择符合要求的驱动进行安装,如果驱动不符合要求,可能之间不能进行通信,在驱动的基础上,通过2接3,3接2,从而基本的通信。
3.程序框架的建立过程(1)新建一个工程,串口工程,如图所示:(2)建立工程过程中,选择单文档类型(3)向工程中添加控件4.MSCOMM控件属性的设置参数(1)设置串口类参数1)设置读取串口数据时,从串口缓冲区中读取的字节数void CMSComm::SetInputLen(short nNewValue){static BYTE parms[] =VTS_I2;InvokeHelper(0xe, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);}设置串口的相关参数,顺序为波特率,奇偶校验,数据位数,停止位CString CMSComm::GetSettings(){CString result;InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);return result;}2)设置将打开的串口号码void CMSComm::SetPortOpen(BOOL bNewValue){static BYTE parms[] =VTS_BOOL;InvokeHelper(0x14, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,bNewValue);}3)获取用户指定的串口号是否打开,返回真表示已经打开BOOL CMSComm::GetPortOpen(){BOOL result;InvokeHelper(0x14, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;}4)设置通过串口的接收数据的类型,0表示文本类型,1表示二进制类型。
USBTTL串口RS230通信协议篇一:RS232通讯协议RS232通讯协议基本结构波特率 9600 bit/s,8bit,1位停止,无校验位格式0EBH,地址,命令,长度(n),数据1,---数据n,冗余说明:0EBH为帧起始位长度小于输出端口数冗余=地址+命令+长度+数1+---+数n如果冗余=0EBH,为防止与帧起始位相同,则发送反码,即冗余=14H当接收正确时,1)在命令1,2,5,6时,回送 0EBH,地址,命令,01H,0FAH,冗余,并执行命令。
2)在命令3,4,7时,回送相应信息。
当接收不正确时,1)地址正确,冗余不正确,回送0EBH,地址,命令,01H,0F5H,冗余。
2)地址不正确,不回送任何信息。
串口通讯—通信协议所谓通信协议是指通信双方的一种约定。
约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。
因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI 七层参考模型中的数据链路层。
目前,采用的通信协议有两类:异步协议和同步协议。
同步协议又有面向字符和面向比特以及面向字节计数三种。
其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。
一、物理接口标准1.串行通信接口的基本任务(1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。
在异步通信方式下,接口自动生成起止式的帧数据格式。
在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。
(2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。
所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。
因此串并转换是串行接口电路的重要任务。
(3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。
课程设计报告( 2014 -- 2015年度第二学期)课程名称:DSP课程设计题目:基于DSP实验系统的串口通信院系:电子与通信工程系班级:电子学号:学生姓名:指导教师:设计周数: 2成绩:日期:2015 年7月16日一、课程设计的目的与要求1.设计方案:通过TMS320C5509A的串口与电脑进行通信,利用串口调试助手发送数据,由DSP接收到,DSP读到收到数据进行下一步的让四位LED灯亮,实现数据的通信,并在lcd12864上显示发送的数据,还有显示拨码开关的数值。
2.设计指标:电脑只能发送0~15,因为读出数据的时候比较方便解码,比如发送4就可以直接给LED直接赋值,让第三个灯亮,也就是一般的二进制转换。
二、设计正文1.设计思路(系统组成介绍)串口模块:TL16C550 是一个标准的串口接口芯片,它的控制寄存器基地址为0x400200,寄存器占用TMS320VC5509 的8 个地址单元。
串口中断与TMS320VC5509 的INT0 连接。
用户可以使用TMS320VC5509 的中断0 响应串口中断。
TL16C550 有11 个寄存器,这11 个寄存器是通过TMS320VC5509 的3 个地址线(A3~A1)和线路控制寄存器中的DLAB 位对它们进行寻址的。
板上加上16C550、Max232 和驱动电路。
驱动电路主要完成将输出的0-3.3V 电平转换成异步串口的工作电平,转换电平的工作由MAX232 芯片完成,但由于它是5V 器件,所以它同DSP 间的信号线必须有电平转换,此板采用的是74LVC245。
实验箱上的液晶模块采用的型号是TJDM12864MTJDM12864M 是一款带中文字库的图形点阵模块,由动态驱动方式驱动128×64 点阵显示。
低功耗,供应电电压范围宽。
内含多功能的指令集,操作简易。
采用COB 工艺制作,结构稳固,使用寿命长。
特性:1.提供 8 位,4 位及串行接口可选2.64×16 位字符显示 RAM(DDRAM 最多 16 字符×4 行,LCD 显示范围 16×2 行)3.2M 位中文字型 ROM(CGROM),总共提供 8192 个中文字型(16×16 点阵)4.16K 位半宽字型 ROM(HCGROM),总共提供 126 个西文字型(16×8 点阵)5.64×16 位字符产生 RAM(CGRAM)6.15×16 位总共 240 点的 ICON RAM(ICONRAM)7.自动复位(RESET)功能8.绘图及文字画面混合显示功能9.提供多功能指令:——画面清除(display clear)——游标归位(return home)——显示开/关(display on/off)——游标显示/隐藏(cursor on/off)——字符闪烁(display character blink)——游标移位(cursor shift)——显示移位(display shift)——垂直画面旋转(vertical line scoll)——反白显示(By-line reverse display)——睡眠模式(sleep mode)DSP与LCD的连接:3.软件设计流程:4.在试验箱上模拟实现用随实验箱附带的串口线(两端均为9 孔“D”形插头)连接计算机com1 或com2 插座和ICETEK–VC5509-A 板上标准RS-232 插座,编译、下载、运行。
网络编程与实践实验报告
实验内容:串口通信编程
学号:S201502189
姓名:职荣豪
日期:2015-9-28
一、实验要求
使用VS2010编写基于对话框的MFC应用程序,两个窗口分别使用两个串口,使得这两个窗口可以进行通信,包括数据的发送与接收。
二、实验原理
本实验使用Microsoft Communications Control控件,利用这个ActiveX控件,只需要编写少量代码即可轻松进行通信。
该控件相关的函数如下:
put__CommPort:设置串口号
put_Settings:以字符串的形式设置波特率、奇偶校验位(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数
put_InputMode:设置接收数据的类型(0-文本类型,1-二进制类型)
put_InputLen:设置从接收缓冲区读取的字节数,0表示全部读取
put_InBufferSize:设置接收缓冲区大小
put_OutBufferSize:设置发送缓冲区大小
put_RThreshold:设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件
put_SThreshold:设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件put_PortOpen:打开或关闭串口,传入参数为true时打开串口,传入参数为false时关闭串口
get_CommEvent:获得串口上刚发生的事件,事件值为2表示接收到数据
get_InBufferCount:获得缓冲区中的数据位数
get_Input:获取缓冲区数据,返回类型为VARIANT
put_Output:发送数据
三、设计思路
需要添加一个Microsoft Communications Control控件,用于进行串口通信。
由于要求同一程序可运行两个窗口进行相互通信,需要两个窗口开启两个不同串口,故需要添加一个Edit Control控件用于输入串口号,并添加打开串口按钮,在点击该按钮时对串口控件的参数进行设置并开启串口。
同时添加关闭串口按钮,点击后关闭串口并可以对串口号进行修改。
需要添加两个Edit Control 分别用于显示接收到的数据以及输入要发送的数据。
需要添加一个发送按钮,点击后发送输入的数据。
四、实验步骤
1.建立基于对话框的MFC应用程序
2.添加界面控件并设置ID与Caption
添加Microsoft Communications Control控件,用于进行串口通信
添加一个Edit Control控件,用于输入串口号,ID设置为IDC_PORT
添加一个Static Text控件,用于标注端口号,将Caption设置为“串口号:”
添加两个按钮,分别用于打开串口、关闭串口。
IDC分别设置为IDC_BTN_OPEN、IDC_BTN_CLOSE,Caption分别设置为“打开”、“关闭”
添加两个Edit Control,分别用于显示接收到的数据以及输入要发送的数据,ID分别设置为IDC_RECEIVE、IDC_SEND
添加两个Static Text控件,用于标注接收区与发送区,Caption分别设置为“接收区”、“发送区”
添加一个按钮用于发送数据,ID设置为IDC_BTN_SEND,Caption设置为“发送”
调整控件的大小与位置。
完成后如图:
3.给控件绑定变量
右键单击Microsoft Communications Control控件,选择“添加变量”,变量名为m_com
打开类向导给控件添加变量:
给IDC_PORT绑定变量,用于存放输入的端口号,数据类型为int,变量名为m_port
给IDC_RECEIVE绑定变量,用于存放接收到的数据,数据类型为CString,变量名为m_strReceive
给IDC_SEND绑定变量,用于存放输入的待发送的数据,数据类型为CString,变量名为
m_strSend
4.给控件添加事件响应函数
右键单击Microsoft Communications Control控件,选择“添加事件处理程序”,点击“添加编辑”,生成响应函数,此函数用于接收数据。
在函数中添加以下代码:
UpdateData(TRUE); //更新m_strReceive的值
int nEvent = m_com.get_CommEvent(); //获取事件值
if(nEvent == 2) { //时间值为2,此时为收到数据
int k = m_com.get_InBufferCount(); //获取缓冲区位数
if(k <= 0) //位数小于等于0时则返回
return;
char* str = (char*)m_com.get_Input().parray->pvData; //获取接收到数据的字符数组的首地址
*(str + k) = '\0';//字符数组最后一位的下一位设置为'\0',为字符串的结尾标志
m_strReceive += (const char *) str; //在用于显示的字符串末尾添加刚接收到的字符串
}
UpdateData(FALSE); //将m_strReceive的值显示到控件中
双击IDC_BTN_OPEN控件,即“打开”按钮,生成响应函数,此函数用于设置串口参数并打开串口。
在函数中添加以下代码:
UpdateData(TRUE); //更新m_port的值
if(m_port <= 0) //端口号不小于等于0
{
AfxMessageBox("请输入正确的串口号!");
return;
}
m_com.put__CommPort(m_port); //设定串口为m_port的值
m_com.put_Settings("9600,n,8,1"); //设定波特率9600,无奇偶校验位,8作为数据位,1作为停止位
m_com.put_InputMode(1); //设定数据接收模式,1为二进制方式
m_com.put_InputLen(0); //设置从接收缓冲区读取的字节数,0表示全部读取
m_com.put_InBufferSize(1024); //设置输入缓冲区大小为1024byte
m_com.put_OutBufferSize(1024); //设置输出缓冲区大小为1024byte
m_com.put_RThreshold(1); //每接收到一个字符时,触发OnComm事件
m_com.put_SThreshold(0); //每发送一个字符时,不触发OnComm事件
m_com.put_PortOpen(true); //打开串口
GetDlgItem(IDC_BTN_OPEN)->EnableWindow(FALSE); //打开按钮设为不可用
GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(TRUE); //关闭按钮设为可用
GetDlgItem(IDC_BTN_SEND)->EnableWindow(TRUE); //发送按钮设为可用
双击IDC_BTN_CLOSE控件,即“关闭”按钮,生成响应函数,该函数用于关闭串口。
在函数中添加以下代码:
m_com.put_PortOpen(false); //关闭串口
GetDlgItem(IDC_BTN_OPEN)->EnableWindow(TRUE); //打开按钮设为可用
GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE); //关闭按钮设为不可用
GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE); //发送按钮设为不可用
双击IDC_BTN_SEND控件,即“发送”按钮,生成响应函数,该函数用于发送数据。
在函数中添加以下代码:
UpdateData(TRUE); //更新m_strSend的值,读取编辑框内容
m_com.put_Output(COleVariant(m_strSend));//发送数据
5.在对话框初始化函数中添加额外初始化代码
在对话框刚打开时,此时串口没有开启,故“关闭”按钮与“发送”按钮需设为不可用。
在OnInitDialog函数中添加以下代码:
GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE); //关闭按钮设为不可用
GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE); //发送按钮设为不可用
五、实验结果
对话框1 运行结果如下:
对话框2 运行结果如下:
六、实验心得
通过课上的学习,我学习到了数据通信的基础知识,对网络的分层结构以及相关协议有了进一步的认识。
通过本次实验,我对串口通信的原理有了更深的认识与理解,并对MFC界面制作更加熟练。
总之,在本课程中我收获很多,不仅在通信方面的知识有所提升,同时也锻炼了编程能力,VC++软件的使用更加熟练。