实验二 串口异步通信实验
实验2(串行端口程序设计实验)
![实验2(串行端口程序设计实验)](https://img.taocdn.com/s3/m/10d65df1ba0d4a7302763a3a.png)
实验2:串行端口程序设计一、实验目的了解在linux环境下串行程序设计的基本方法。
掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。
学习使用多线程来完成串口的收发处理。
二、实验内容读懂程序源代码,学习终端I /O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。
三、预备知识有C语言基础。
掌握在Linux下常用编辑器的使用。
掌握Makefile 的编写和使用。
掌握Linux下的程序编译与交叉编译过程四、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验平台、PC机Pentium 500以上, 硬盘10G以上。
软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境五、实验原理异步串行I /O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图2.3.1串行通信字符格式图2.3.1给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。
异步串行通信—单片机课程实验
![异步串行通信—单片机课程实验](https://img.taocdn.com/s3/m/20d6e13283c4bb4cf7ecd17f.png)
A VR单片机异步串行通信(USART)实验一、实验目的与要求:1、理解串口通信的原理,掌握串口通信的几种方式2、掌握串口通信程序的编写和串口通信程序的调试方法3、训练将多种设备、多种中断处理相互融合处理的能力,进一步理解中断系统的组织结构4、理解系统时钟的采用对UART串口通信的影响二、实验内容、步骤实现串口通信的查询和中断两种方式。
基本要求:1、实现查询方式下,A VR单片机与计算机之间的串口通信2、实现中断方式下,A VR单片机与计算机之间的串口通信3、实现不同速率下的通信(4800、9600、19200、38400、115200)扩展要求:1、通过8段数码显示器,显示当前通信速度(只显示有效数字位,如9600显示96、115200显示1152)2、通过按键更换通信速率。
3、根据通信速率或者接收的数据修改更改PWM波形的占空比,调节一个LED的亮度。
5.1.3、电路本实例的电路包含RS323的串口电平转换芯片MAX3232,电路图如下图所示。
1、电路原理在本实例中利用MAX3232芯片使单片机输出的TTL电平转换为标准的RS232电平,从而使计算机能够识别。
同时将计算机输出的RS232电平转换为单片机可以识别的TTL电平。
2、电路连接电路中MAX3232芯片的9、10引脚分别连接单片机的PD0、PD1端口,MAX3232的13、14引脚分别连接计算机串口线的3、2脚。
3、特别说明本学习板采用的是串口插座是公头的,所以与计算机相连的串口连接线应该是交叉串口线,而不是串口延长线。
5.1.4、程序设计1、程序功能程序的功能是使用单片机的串行接口PD0、PD1设计串口通信程序,通过单片机向计算机发送一个字节的数据。
程序调试的时候需要在计算机上安装串口助手,以观察接收的串口数据。
2、单片机与计算机串行通信结果的观察在本例中,只是简单的发送一个字节到计算机,由于单片机运行速度比较快,所以当程序烧写到单片机后再打开串口助手观察接收到的数据的时候,可能会看不到接收的数据,我们可以提前打开串口助手以便观察。
dsp实验报告哈工大实验二异步串口通信实验
![dsp实验报告哈工大实验二异步串口通信实验](https://img.taocdn.com/s3/m/4b6a166b24c52cc58bd63186bceb19e8b8f6ec4b.png)
dsp实验报告哈工大实验二异步串口通信实验异步串口通信实验一. 实验目的1. 了解*****F2407A DSP 片内串行通信接口(SCI)的特点。
2. 学会设置SCI 接口进行通信。
3. 了解ICETEK-LF2407-A 板上对SCI 接口的驱动部分设计。
4. 学习设计异步通信程序。
二. 实验设备计算机,ICETEK-LF2407-EDU 实验箱(或ICETEK 仿真器+ICETEK-LF2407-A 系统板+相关连线及电源)。
三. 实验原理1. *****F2407A DSP 串行通信接口模块*****F240x 器件包括串行通信接口SCI 模块。
SCI 模块支持CPU 与其他使用标准格式的异步外设之间的数字通信。
SCI 接收器和发送器是双缓冲的,每一个都有它自己单独的使能和中断标志位。
两者都可以独立工作,或者在全双工的方式下同时工作。
2. ICETEK-LF2407-A 板异步串口设计由于DSP 内部包含了异步串行通信控制模块,所以在板上只需加上驱动电路部分即可。
驱动电路主要完成将SCI 输出的0-3.3V 电平转换成异步串口电平的工作。
转换电平的工作由MAX232 芯片完成,但由于它是5V 器件所以它同DSP 间的信号线必须有电平转换,此板采用的是74LS245。
3. 串行通信接口设置CPU 进行串行通信时可以采用两种方式,一种是轮询方式,即CPU 不断查询串口状态进行接收和发送,缺点是占用CPU 时间太多;另一种是中断方式,SCI 的接收和发送都可以产生中断信号,这样CPU 可以在完成其他一些工作的同时进行串行通信。
串行通信接口波特率计算,内部生成的串行时钟由系统时钟SYSCLK 频率和波特率选择寄存器决定。
串行通信接口使用16 位波特率选择寄存器,数据传输的速度可以被编程为***** 多种不同的方式。
不同通信模式下的串行通信接口异步波特率由下列方法决定:BRR=1―***** 时的串行通信接口异步波特率:SCI 异步波特率=SYSCLK/ [( BRR+1)*8]其中,BRR=SYSCLK/(SCI 异步波特率*8)-1;BRR=0 时的串行通信接口异步波特率:SCI 异步波特率=SYSCLK/16这里BRR 等于波特率选择寄存器的16 位值。
RS232串口通信实验
![RS232串口通信实验](https://img.taocdn.com/s3/m/6b1dd141a8956bec0975e3ed.png)
RS232串口通信实验一、认识RS232单片机的串行口是非常有用的,通过他我们可以把单片机系统的数据传回电脑处理或者接受电脑传过来的数据而进行相应的动作,在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。
RS-232-C接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口. 它是在1970年由美国电子工业协会(EIA)联合贝尔系统,调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定.后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准.而工业控制的RS-232口一般只使用RXD,TXD,GND三条线.在讨论RS-232C接口标准的内容之前,先说明两点:首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communication Equipment)而制定的。
因此这个标准的制定,并未考虑计算机系统的应用要求。
但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。
显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。
有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。
其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。
由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。
(1)RS232(DB9)的接口说明1 DCD 载波检测2 RXD 接收数据3 TXD 发送数据4 DTR 数据终端准备好5 SG 信号地6 DSR 数据准备好7 RTS 请求发送8 CTS 允许发送9 RI 振铃提示(2)接口的电气特性在RS-232-C中任何一条信号线的电压均为负逻辑关系。
双击串行通讯实验
![双击串行通讯实验](https://img.taocdn.com/s3/m/75a7ebff770bf78a6529548d.png)
实验四、双击串行通讯实验一、实验目的该实验需要两套MPC100B配合完成。
1.掌握单片机串行口工作方式;2.掌握双机通讯的接口电路设计及程序设计。
二、实验设备1.仿真器;2.单片机最小系统教学实验模块;3.外部数据存储器模块;三、实验要求由两套单片机试验装置(两个实验小组)共同完成该实验。
我们称装置1为甲机,装置2为乙机。
甲机发送一个字节的呼叫信号给乙机,乙机正确地收到该呼叫信号后,返回一个字节的应答信号。
当甲机收到正确的应答信号后,再发送规定格式的数据帧。
数据帧必须包括以下内容:数据长度(1字节)+数据(n字节)+校验和(1字节)乙机收到完整的数据帧后,发送一个表明接收正确或错误的应答字节。
要求每个字节的发送帧格式为:起始位(1bit)+数据位(8bit)+停止位(1bit)。
要求通讯波特率为4800bps,二以上个信号和数据帧的具体数据内容,可以自行规定。
四、实验原理4.1 串行通讯的方式在串行通讯中,有两种基本的通讯方式:异步通讯,同步通讯。
异步串行通讯规定了字符数据的传送方式,即每个数据以相同的帧格式发送。
每个帧信息由起始位、数据位、奇偶校验位和停止位组成。
本实验主要学习异步通讯的实现方法。
按照通讯方式,又可以将数据传输线路分成三种:单工方式、半双工方式、全双工方式。
4.2 单片机串行口工作方式单片机串行口工作方式一共4种,从方式1到方式3均用于串行异步通讯。
在异步串行通讯的一个字节的传送中,必须包括了起始位(0)和停止位(1)。
除此之外,方式1具有8位(1个字节)的数据位(低位在先),方式2、3则除这8位之外,还具有一个课编程的第9位,这个第9位编程通常被编程为奇偶校验位。
本实验采用方式1,利用MOV SCON,#50H来设置SCON。
4.3 波特率的设置在异步串口通讯中,一个很重要的工作就是进行串口波特率的设置。
波特率是指串口通讯中每秒传送的位数,单位为bps,它反应了串口通讯的速度;同时,通讯双方的速度必须一致,才能够顺利进行通讯。
异步串口通信控制直流电机实验
![异步串口通信控制直流电机实验](https://img.taocdn.com/s3/m/67557222af45b307e8719745.png)
DSP课程大作业综合设计报告(2011年春季学期)课程名称:DSP技术题目:异步串口通信控制直流电机实验专业班级:学生姓名:学号:指导教师:成绩:年月日一、实验题目:异步串口通信控制直流电机实验二、实验目的:1.了解ICETEK-VC5509-A评估板上扩展标准RS-232串口通信接口的原理和方法。
2.学会对串口通信芯片的配置编程3.学习设计异步通信程序。
4.学习用C语言编制中断程序,控制VC5509 DSP的通用I/O管脚产生不同占空比的PWM信号。
5.学习VC5509DSP的McBSP的通用I/O管脚的控制方法。
6.学习直流电机的控制原理和控制方法。
三、实验设备:计算机,ICETEK-VC5509-A实验箱。
四、实验原理:1.TL16C550异步串行通信收发器TL16C550是一个标准的串口芯片,它的控制寄存器基地址为0x400200,寄存器占用TMS320VC5509的8个地址单元。
串口中断与TMS320VC5509的INT0连接。
用户可以使用TMS320VC5509的中断0响应串口中断。
TL16C550有11个寄存器,这11个寄存器是通过TMS320VC5509的3个地址线(A3~A1)和线路控制寄存器中的DLAB位对它们进行寻址的。
TL16C550的波特率可通过除数寄存器DLM,DLL来设置,除数寄存器值和波特率之间的换算公式如下:除数值=输入频率/(波特率*16),TL16C550的输入频率为:3.6864MHz,波特率和除数之间的关系如表2所示:RS232标准。
4.串口通信接口设置内部生成的串行时钟由系统时钟SYSCLK 频率和波特率选择寄存器决定。
串行通信接口使用16位波特率选择寄存器,数据传输的速度可以被编程65000多种不同的方式。
不同通信模式下的串口通信接口异步波特率由下列方法决定:BRR=1—65535时的串行通信接口异步波特率:串行通信接口异步波特率=SYSCLK/[(BRR+1)*8]其中,BRR= SYSCLK/(SCI 异步波特率*8)-1;BRR=0时的串行通信接口异步波特率:串行通信接口异步波特率=SYSCLK/16这里BRR 等于波特率选择寄存器的16位值。
串行通讯的实验报告
![串行通讯的实验报告](https://img.taocdn.com/s3/m/e5eb29710166f5335a8102d276a20029bd6463c3.png)
一、实验目的1. 理解串行通讯的基本原理和通信方式。
2. 掌握串行通讯的硬件设备和软件实现方法。
3. 学会使用串行通讯进行数据传输。
4. 通过实验,提高动手能力和分析问题、解决问题的能力。
二、实验原理串行通讯是指用一条数据传输线将数据一位一位地按顺序传送的通信方式。
与并行通讯相比,串行通讯具有线路简单、成本低等优点。
串行通讯的基本原理如下:1. 异步串行通讯:每个字符独立发送,字符间有时间间隔,不需要同步信号。
每个字符由起始位、数据位、奇偶校验位和停止位组成。
2. 同步串行通讯:数据块作为一个整体发送,需要同步信号。
同步串行通讯分为两种方式:面向字符方式和面向比特方式。
三、实验设备1. 计算机:一台2. 串行通讯设备:串行数据线、串行接口卡、串口调试助手等3. 单片机实验平台:一台4. 数码管显示模块:一个四、实验内容1. 异步串行通讯实验(1)硬件连接:将计算机的串口与单片机实验平台的串行接口连接。
(2)软件设计:编写程序,实现单片机向计算机发送数据,计算机接收数据并显示在屏幕上。
(3)实验步骤:a. 设置串行通信参数:波特率、数据位、停止位、奇偶校验位等。
b. 编写发送程序,实现单片机向计算机发送数据。
c. 编写接收程序,实现计算机接收数据并显示在屏幕上。
2. 同步串行通讯实验(1)硬件连接:与异步串行通讯实验相同。
(2)软件设计:编写程序,实现单片机向计算机发送数据块,计算机接收数据块并显示在屏幕上。
(3)实验步骤:a. 设置串行通信参数:波特率、数据位、停止位、奇偶校验位等。
b. 编写发送程序,实现单片机向计算机发送数据块。
c. 编写接收程序,实现计算机接收数据块并显示在屏幕上。
3. 双机通讯实验(1)硬件连接:将两台单片机实验平台通过串行数据线连接。
(2)软件设计:编写程序,实现两台单片机之间相互发送和接收数据。
(3)实验步骤:a. 设置串行通信参数:波特率、数据位、停止位、奇偶校验位等。
关于串口的实验报告
![关于串口的实验报告](https://img.taocdn.com/s3/m/98cdf1602bf90242a8956bec0975f46526d3a741.png)
关于串口的实验报告1. 实验目的本实验的目的是通过学习并实践串口通信的基本原理和方法,加深对串口通信的理解,掌握串口通信的使用技巧和开发工具。
同时,了解串口通信在实际应用中的重要性和应用场景。
2. 实验原理串口是一种用于计算机与外部设备之间进行数据通信的接口标准。
在计算机中,串口通常通过RS-232或RS-485等标准来实现。
串口通信采用的是异步通信方式,即接收方和发送方的时钟不同步,通过发送和接收的数据包中的控制信息来实现数据的传输。
串口通信的基本原理如下:- 串口通信通过一个物理接口连接计算机和外部设备。
- 通信数据被分为一个个字节进行传输,每个字节由一定的控制信息和实际数据组成。
- 发送方通过发送字节的方式将数据发送给接收方。
- 接收方通过接收字节的方式将数据接收并进行处理。
3. 实验步骤步骤一:准备实验环境为了进行串口通信的实验,我们需要准备以下工具和设备:- 一台计算机- 一个串口转USB转换器- 一个外部设备(如Arduino、传感器等)步骤二:安装串口驱动程序在开始实验之前,我们需要安装串口转USB转换器所需的驱动程序。
驱动程序的安装方式因不同的设备而有所差异,一般可以通过官方网站下载并按照说明进行安装。
步骤三:编写串口通信程序根据所使用的编程语言和开发工具,编写一个简单的串口通信程序。
该程序应包括以下功能:- 打开指定的串口端口- 配置串口的波特率、数据位、停止位等参数- 循环读取串口接收缓冲区中的数据,并进行处理- 将需要发送的数据写入串口发送缓冲区步骤四:测试串口通信将串口转USB转换器插入计算机,并将外部设备连接至串口转USB转换器。
运行编写好的串口通信程序,并观察实验结果。
测试串口通信的方法可以有很多,可以通过发送和接收数据包来验证通信是否正常。
步骤五:总结与分析根据实验结果,总结并分析串口通信的性能和应用场景。
可以考虑以下问题:- 串口通信在哪些领域得到了广泛应用?- 串口通信有哪些特点和优势?- 在实际应用中,串口通信可能遇到哪些常见问题,如何解决?4. 实验结论通过本实验,我们了解了串口通信的基本原理和实际应用方法。
通用异步串行口(UART)实验
![通用异步串行口(UART)实验](https://img.taocdn.com/s3/m/6c854fe1102de2bd960588b8.png)
班级07电本一班学号2007050352姓名钟发炫同组人
实验日期2010. 06. 01 室温大气压成绩
实验题目:通用异步串行口(UART)实验
一、实验目的
1.掌握异步串行通信协议;
2.掌握2812异步收发器模块的应用。
二、实验设备
1. 一台装有CCS软件的计算机;
2. DSP试验箱的TMS320F2812主控板;
3. DSP硬件仿真器。
三、实验原理
1.异步串行通信协议
在传输数据前,数据线处于高电平状态,这称为表示态。
传输开始后,数据线由高电平转为低电平状态,这称为起始位;起始位后面接着5~8个信息位;信息为后面是校验位;校验位后是停止位“1”。
传输完毕后,可以立即开始下一个字符的传输;否则,数据线再次进入标识态。
上面提到的信息位的位数(5~8位)、停止位的位数(1位、1..5位或2位)、校验的方式(奇偶验、偶校验或不校验)等参数都可以根据不同需要进行设置,但对于同一个传输系统中的首发两端来说,这些参数必须保持一致。
异步串行通信方式中另一个重要的参数是波特率。
在一般的“0”“1”系统中,波特率就是每秒钟传输的位数。
国际上规定了一个标准波特率系列,他们是最常用的波特率。
标准波特率系列为110、300、600、1200、1800、2400、4800、9600和19200。
发送端和接收端必须设置统一的波特率,否则无法正确接收数据。
2.电平转换
RS-232-C标准中规定-5V~-15V位逻辑“1”,+5V~+15V位逻辑“0”,因此要用专门的芯片完成TTL电平与RS-232电平的转换,如MAX3232。
简单异步串行通信编程实验
![简单异步串行通信编程实验](https://img.taocdn.com/s3/m/1fd3a1f9af1ffc4fff47ac7b.png)
简单的异步串行通信编程实验(上)一、背景知识在数据通信中,通常将待传送的每个字符的二进制代码按照由低位到高位的顺序依次发送的方式成为串行通信。
由于串行通信只需在发送方和接收方之间建立一条通信信道,因此可以减小通信系统的造价。
在远程通信中,一般采用串行通信方式。
同步就是要求通信的收发双方在时间基准上保持一致。
在串行通信中,“异步”是同步收发双方通信的重要方式。
在异步串行通信中,每个字符作为一个独立的整体进行发送,字符之间的时间间隔可以是任意的。
为了实现同步,需要在每个字符的第一位前加1位起始位(逻辑1),并在字符的最后一位后加1位、1.5位或2位停止位(逻辑0)。
常用的串行通信接口标准包括RS-232、RS-449、V.24、V.35等。
其中,RS-232是最常用的串行通信标准之一。
个人计算机及终端系统中配备的串行接口几乎都符合RS-232标准。
在数据通信中,通常将数据终端设备简称为DTE(data terminal equipment),而将数据通信设备简称为DCE(data circuit equipment)。
DTE是具有一定数据处理能力以及发送和接收数据能力的设备,而DCE的主要作用是在DTE和传输线路之间提供信号变换和实现编码功能,并且负责建立、保持和释放数据链路的连接。
RS-232是美国电子工业协会EIA推荐使用的串行通信标准,定义了DTE和DCE之间的接口标准。
RS-232使用的连接器包括DB-25、DB-15、和DB-9等几种类型,不同类型连接器使用的引脚定义也各不相同。
目前,个人计算机配备的RS-232连接器通常为DB-9,下图说明了RS-232在使用DB-9作为连接器时的引脚排列、信号名称和方向。
在Windows 平台下,利用系统自带的“超级终端”可测试RS-232电缆连接的正确性。
首先用RS-232电缆将实验用的两台计算机连接起来,然后在这两台计算机上同时启动Windows 系统的“超级终端”串行口应用程序。
RS232串口通信实验
![RS232串口通信实验](https://img.taocdn.com/s3/m/4590b6c43c1ec5da51e27028.png)
实验名称:RS-232串口通信实验实验目的:利用单片机的TXD、RXD口,学会单片机串行口的使用。
实验原理:1、51单片机内置全双工异步串行口,共有4种工作方式,电原理图如下:2、串行通信的编程:(1)串行口控制寄存器SCON(2)SM0、SM1—串行口工作方式选择位SM0 SM1 方式功能说明0 0 0 同步移位寄存器方式(用于扩展I/O口)0 1 1 8位异步收发,波特率可变(由定时器控制)1 02 9位异步收发,波特率为fosc/64或fosc/321 1 3 9位异步收发,波特率可变(由定时器控制)(3)REN—允许串行接收位该控制为由软件置“1”或清“0”。
REN=1 允许串行口接收数据。
REN=0 禁止串行口接收数据。
(4)TB8—发送的第9位数据方式2和3时,TB8是要发送的第9位数据,可作为奇偶校验位使用,也可作为其他标志。
(例:在多机通讯中,可以标注传输内容为地址或数据)RB8—接收到的第9位数据方式2和3时,RB8存放接收到的第9位数据。
在方式1,如果SM2=0,RB8是接收到的停止位。
在方式0,不使用RB8。
(5)TI——发送中断标志位方式0时,串行发送第8位数据结束时由硬件置“1”,其它工作方式,串行口发送停止位的开始时置“1”。
TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。
CPU响应中断后, 向SBUF写入要发送的下一帧数据。
TI必须由软件清0。
RI——接收中断标志位方式0时,接收完第8位数据时,RI由硬件置1。
其它工作方式,串行接收到停止位时,该位置“1”。
RI=1,表示一帧数据接收完毕,并申请中断, CPU从接收SBUF取走数据。
该位状态也可软件查询。
RI必须由软件清“0”。
(6)特殊功能寄存器PCONSMOD:波特率倍增位方式0,波特率=fosc/12方式2,波特率= fosc*2SMOD/64方式1、3,波特率=定时器T1的溢出频率*2SMOD/643、多机通讯:主机传输的信息包括地址+数据,每个从机根据自己的地址来判断是否参与通讯SM2 —多机通信控制位用于方式2或方式3中的多机通信控制。
标准全双工查询方式异步串行通信
![标准全双工查询方式异步串行通信](https://img.taocdn.com/s3/m/67188e18ff00bed5b9f31dc0.png)
RS-232 标准全双工查询方式异步串行通信实验报告实验题目: RS-232标准全双工查询方式异步通信实验专业:计算机科学与技术学生姓名:班级学号:分组序号:指导教师:2011 年 5月27 日RS-232标准全双工查询方式异步串行通信实验一、实验时间2011 5/27二、实验地点三、实验小组人员四、指导老师五、实验目的熟学习RS-232C标准的串行通信接口电路及串行通信收/发程序的设计原理与方法六、实验内容甲乙两台微机之间,按RS-232C标准协议,进行零MODEM方式,全双工串行通信。
所谓全双工是双方通过各自的键盘按键发送,同时接收对方发来的字符。
发送与接收的字符均在屏幕上显示。
通信数格式为起止式:1位停止位,7位数据位,无校验,波特率因子为16。
波特率为1200bps。
按ESC键,退出七、试验要求采用两台MFID平台板上的串行接口电路进行硬件连接,分别编写甲乙两机各自的发送与接收程序,并进行调试,直至程序正常运行八、实验原理1.RS-232标准串行通信接口电路原理如图2.1.17所示。
接口电路以8251为核心,8253提供发/收时钟,8255控制8253的Gate门。
另外,还有MAX232作电平转换,MAX491作RS-232与RS-485的转换、用RxRDY作中断申请开关等。
因此,该接口电路可实现两种接口标准和查询/中断两种方式的串行通信2.RS-232C标准串行通信接口电路设计原理和方法的详细阐述,参考计算机接口技术相关参考书.九、 实验流程图十、 实验源程(a )(b )序data segmenttemp dw (?)message db 'please input some informations',0dh,0ahdb 'quit with esc',0dh,0ah,'$'input_message db '0:110 1:150 2:300 3:600',0dh,0ahdb '4:1200 5:2400 6:4800 7:9600',0dh,0ahdb 'please take a choice(0~7)of baud_rate:',0dh,0ah,'$'error_message db 'input error! try again',0dh,0ah,'$'data endscode segmentassume cs:code, ds:dataint51 proc near ;8251A初始化子程mov dx,309h ;8251A命令口xor ax,ax ;空操作call charout ;送数子程delay:loop delaymov al,40h ;内部复位call charoutmov al,4ah ;8251A方式命令call charoutcall charoutretint51 endpcharout proc nearout dx,al ;送数子程push cxmov cx,10000 ;延时gg: loop ggpop cxret ;返回charout endpset_bps proc near ;8253计数初值计算与装入子程 mov dx,1dh ;取8253输入时钟频率clk作被除数 mov ax,4b54hmov bx,temp ;取所选波特率作第一个除数div bx ;除法运算,商数送axmov dx,0 ;余数清零mov bx,16 ;取波特率因子作第二个除数div bx ;除法运算,得计数初值(商数)送ax mov bx,ax ;保存计数初值至bxmov dx,307h ;8253命令口out dx,almov dx,306h ;8253计数器2的端口mov ax,bx ;取计数初值out dx,al ;装计数初值低字节mov al,ah ;装计数初值高字节out dx,alret ;返回set_bps endpmain proc far ;通信主程序mov ax,datamov ds,axmov ah,9 ;提示选择波特率mov dx,seg input_messagemov ds,dxmov dx,offset input_messageint 21hinput: mov ah,8 ;输入波特率int 21hcmp al,'0' ;输入’0’,表示选择110baud jne next1mov temp,110 ;存入bps00jmp begin ;跳转开始begin处jne next2mov temp,150 ;’1’表示150b/s jmp beginnext2: cmp al,'2'jne next3mov temp,300 ;’2’表示300b/s jmp beginnext3: cmp al,'3'jne next4mov temp,600 ;’3’表示600b/s jmp beginnext4: cmp al,'4'jne next5mov temp,1200 ;’4’表示1200b/s jmp beginnext5: cmp al,'5'jne next6mov temp,2400 ;’5’表示2400b/s jmp beginnext6: cmp al,'6'jne next7mov temp,4800 ;’6’表示150b/s jmp beginjne error ;若波特率选择有错,则重新输入 mov temp,9600 ;’7’表示9600b/sjmp beginerror:mov ah,9 ;提示波特率选择出错,则重新输入 mov dx,seg error_messagemov ds,dxmov dx,offset error_messageint 21hjmp inputbegin: call set_bps ;调用8253的set_bps子程序,设置所选波特率的8253-5call int51 ;调用8251A子程序,初始化8251A lea dx,messagemov ah,09int 21hmov dx,303h ;初始化8255Amov al,80hout dx,almov al,0dh ;置PC6=1,打开8253的GATE2,开始输出方波 out dx,alcheckkey:mov ah,0bh ;按键发送int 21hcmp al,0 ;有键按下?Je receiv ;若无键按下,则转接收mov ah,01 ;若有键按下,则从KB读入,并在CRT上显示 int 21hmov bl,al ;保存键值,以备发送cmp al,1bh ;是ESC?je quit ;是,则退出,并返回DOSmov dx,309h ;不是,则发送数据transm: in al,dxtest al,01 ;发送准备好?TXRDY=1?jz transm ;未准备好,则等待mov dx,308h ;已准备好,则将键入的字符发送出去 mov al,blout dx,aljmp checkkey ;发送1个字符后00,再转按键发送receiv: mov dx,309h ;接收数据in al,dxtest al,02 ;接收数据准备好?RXRDY=1? jz checkkey ;未准备好,即无数据接收,则转按键发送 mov dx,308h ;已准备好,即有数据传送过来,则接收1个字符 in al,dxmov dl,al ;显示接收的字符mov ah,02hint 21hmov ah,0bhint 21hcmp al,00hje checkkeymov ah,08hint 21hcmp al,1bh ;是ESC?je quit ;是,则退出,返回DOSjmp checkkey ;不是,则接收1个字符后,再转按键发送quit: mov al,0ch ;置PC6=0,关闭8253的GATE2,停止输出方波 mov dx,303hout dx,almov ax,4c00h ;程序退出int 21hmain endpcode endsend main十、实验步骤步骤一:硬件连线接口插座J7连接起来。
串行异步通信实验建议
![串行异步通信实验建议](https://img.taocdn.com/s3/m/ed1a5f26f08583d049649b6648d7c1c708a10b34.png)
串行异步通信实验建议
如果您想进行串行异步通信实验,您可以按照以下步骤进行:
1. 准备两个单片机模块:发送模块和接收模块。
发送模块负责向接收模块发送数据,接收模块负责接收发送模块发送过来的数据。
2. 设计传输协议:您需要设计一种协议来规定数据的传输格式。
例如,起始字节、数据长度、数据内容、校验和等。
3. 在发送模块和接收模块中编写程序:您需要编写程序来实现协议的解析和数据的传输。
在发送模块中,您需要把要发送的数据按照协议的定义打包后发送给接收模块。
在接收模块中,您需要监听串口接收到的数据,根据协议的定义解析数据并处理。
4. 连接发送模块和接收模块:连接两个单片机模块,确保它们之间的串口通信正常。
5. 测试:发送模块向接收模块发送数据,检查接收模块是否正确接收并处理数据。
在进行串行异步通信实验时,需要特别注意安全问题和不要使用具有敏感信息的数据进行测试。
2-STM32串口通信实验
![2-STM32串口通信实验](https://img.taocdn.com/s3/m/c70d91f0d4d8d15abe234e7a.png)
STM32串口简介
上面的配置中将串口1的TX和RX引脚配置成AF_PP和 IN_FLOATING模式,因为RX是接收引脚所以设置沉高 输入模式。
接下来将UART1的工作模式配置成波特率为115200(可 自行更改),数据位长度为8bit,停止位为1,无校验位。
在使用printf函数之前还需要进行一些操作。如果要 printf函数工作的话,还需要把printf()重新定向到串口 中,这部分工作是由fputc(int ch,FILE *f)这个函数来完 成的,这个函数在usart.c中实现。
STM32串口的发送和接收在库文件中分别有对应的函数,可直接调 用,分别是:
void USART_SendData(USART_TypeDef* USARTx, u8 Data) u8 USART_ReceiveData(USART_TypeDef* USARTx)
STM32串口状态
STM32串口的状态可通过状态寄存器USART_SR读取。
STM32串口波特率设置
STM32串口控制
STM32中每个串口都有3个控制寄存器USART_CR1~3,串口的很 多配置都是通过这3个寄存器来设置的。这里我们只要用到 USART_CR1就可以实现我们的功能了,其他的寄存器就不一一列 出了。具体各位的功能及操作方法见STM32参考手册的496~497页。 其中发送和接收的中断都通过这个寄存器进行使能。
}
3、在工程属性的“Target” -> “Code Generation” 选项中勾选 “Use MicroLIB””。
STM32printf用法配置
在这里讲解一下fputc函数里面的代码,我们前面提到 过USART_SR寄存器的5、6、7三位,理解了这几位的 功能就可以大概理解串口是如何发送数据的了。
串口通信编程实验报告实验二
![串口通信编程实验报告实验二](https://img.taocdn.com/s3/m/6b22d636b14e852459fb57d6.png)
内容
得分
1.基本功能描述(300字以内
关键词
(5个以内))
基本功能:
1、PROTUES仿真软件搭建实验电路
2、通过单片机串口向74164发送数据,控制8个LED灯实现跑马水灯效果
关键词:74164,跑马水灯
2.基本原理及实现方法(300字以内)
实验的基本功能是将串行数据转换为并行数据,由51单片机发送给74164芯片,74164芯片将接收到的字节转换为并行数据,驱动8只LED灯亮灭。51单片机的TXD为输出时钟信号连接74164芯片的时钟引脚,51单片机串口模式设置为模式0。
74164跑马水灯基本原理及实现方法300字以内实验的基本功能是将串行数据转换为并行数据由51单片机发送给74164芯片74164芯片将接收到的字节转换为并行数据驱动8只led灯亮灭51单片机的txd为输出时钟信号连接74164芯片的时钟引脚51单片机串口模式设置为模式0
串口通信编程实验报告
物理与电子工程学院制
TL0= TimerL;
TR0=1;
while(TF0==0);
TF0=0;
}
}
int main(void)
{
char c=0x80;
SCON = 0x00;
TI=1;
while(1)
{
c=_crol_(c,1);
SBUF=c;
while(TI==0);
TI=0;delay_m源自(100);}}6.成绩评定
3.应用软件和硬件工具
3.1硬件工具:
3.2软件工具:PROTEUS
4.功能实现情况描述
八个LED灯轮流亮起,实现了跑马灯的效果
5.程序(含程序框图)
#include <reg51.h>
串口异步通信
![串口异步通信](https://img.taocdn.com/s3/m/d661d788680203d8ce2f2482.png)
微机原理与接口课程设计报告课程设计题目:DOS功能调用-串口异步通信学号:08113217学生姓名:苏林坡班级:081132专业:信息工程指导教师:谌洪茂一软件的功能随着计算机的不断普及,在我们的周围可能会同时出现多台微型计算机,而且这些计算机的牌号,后型号不同,而且有的格式不兼容。
于是利用单片机串行口实现不同计算机之间的相互通信,以达到信息或程序的共享是非常有用的。
另一方面,在某计算机的软磁盘驱动器万一出现故障的情况下,也可以通过它将计算机硬盘的数据或程序拷贝出来。
文件传输程序可以用来在两个计算机之间传输任何类型的文件(包括二进制文件),对于那些有不同类型的计算机特别有用。
网络的发展,局域网的建立,使得一个文件服务器以及允许其他计算机从服务器中装入文件或将它们存入文件服务器也可以通过串口来实现。
二软件设计2.1设计简单介绍本系统的软件设计流程图参见附录部分(图2)。
系统设计代码分为以下几个部分:初始化8251A、发送数据、接收数据、键盘输入、数值转换、LED显示。
2.2 模块设计详细分析1. 初始化8251A:8251A工作在同步方式下,方式选择控制字为00H,工作命令控制字为40H.代码如下:KEYLED: MOV AL,00HOUT DX,ALOUT DX,ALOUT DX,ALMOV AL,40HOUT DX,ALMOV AL,4EHOUT DX,ALMOV AL,27HOUT DX,AL2. 键盘输入键盘的输入由8279控制,再输入之前要现判断键盘是否允许按键,则只需读取8279的状态即可;通过数据口读取键值。
然后对输入的数据进行判断,若为数字键,只需判断其高四位,高四位为零,则为数字键;不为零则不是数字键;再判断是否为EXEC键,此时只需和10H比较,相同则为EXEC键。
KEY0: MOV DX,CONTPORT ;读8279状态IN AL,DXTEST AL,07H ;判断是否有键按下JZ KEY0MOV CX,0FFFHDELAY1: LOOP DELAY1MOV DX,DATAPORT ;读取键值IN AL,DXMOV DI,AXAND AL,0F0H ; 判断是否为数字键JZ KEY1MOV AX,DICMP AL,10H ; 判断是否为EXEC键JNZ KEY0CMP WORD PTR DS:[0601H],0000H ;判断按EXEC键前是否按过数字键JZ SERERR1MOV SI,DATA3CALL LEDDISP3. 数值转换数值转换就是将输入的键值转换成发送代码。
UART串口通信实验报告
![UART串口通信实验报告](https://img.taocdn.com/s3/m/aadefb4759fb770bf78a6529647d27284b7337a2.png)
实验四UART串口通信学院:研究生院学号:1400030034姓名:张秋明一、实验目得及要求设计一个UART串口通信协议,实现“串<-->并”转换功能得电路,也就就是“通用异步收发器”。
二、实验原理UART就是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输与接收。
在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间得通信,与PC机通信包括与监控调试器与其它器件,如EEPROM通信。
UART作为异步串口通信协议得一种,工作原理就是将传输数据得每个字符一位接一位地传输。
其中各位得意义如下:起始位:先发出一个逻辑”0”得信号,表示传输字符得开始。
资料位:紧接着起始位之后。
资料位得个数可以就是4.5.6.7、8等,构成一个字符。
通常采用ASCII码。
从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”得位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送得正确性。
停止位:它就是一个字符数据得结束标志。
可以就是1位、1.5位、2位得高电平。
由于数据就是在传输线上定时得,并且每一个设备有其自己得时钟,很可能在通信中两台设备间出现了小小得不同步。
因此停止位不仅仅就是表示传输得结束,并且提供计算机校正时钟同步得机会。
适用于停止位得位数越多,不同时钟同步得容忍程度越大,但就是数据传输率同时也越慢。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:就是衡量资料传送速率得指标。
表示每秒钟传送得符号数(symbol)。
一个符号代表得信息量(比特数)与符号得阶数有关。
例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就就是120baud,比特率就是120*8=960bit/s。
这两者得概念很容易搞错。
三、实现程序library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_arith、all;use ieee、std_logic_unsigned、all;entity uart isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号;rs232_tx: out std_logic --RS232发送数据信号;); end uart;architecture behav of uart isponent uart_rx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送);end ponent;ponent speed_select port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps 得高电平为接收或者发送数据位得中间采样点bps_start:in std_logic --接收数据后,波特率时钟启动信号置位);end ponent;ponent uart_tx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps 得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);end ponent;signal bps_start_1:std_logic;signal bps_start_2:std_logic;signal clk_bps_1:std_logic;signal clk_bps_2:std_logic;signal rx_data:std_logic_vector(7 downto 0);signal rx_int:std_logic;beginRX_TOP: uart_rx port map(clk=>clk,rst_n=>rst_n,rs232_rx=>rs232_rx,clk_bps=>clk_bps_1,bps_start=>bps_start_1,rx_data=>rx_data,rx_int=>rx_int);SPEED_TOP_RX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_1,bps_start=>bps_start_1);TX_TOP:uart_tx port map(clk=>clk, --系统时钟rst_n=>rst_n, --复位信号rs232_tx=>rs232_tx, --RS232发送数据信号clk_bps=>clk_bps_2, --此时clk_bps 得高电平为发送数据得采样点bps_start=>bps_start_2, --接收到数据后,波特率时钟启动置位rx_data=>rx_data, --接收数据寄存器,保存直至下一个数据来到rx_int=>rx_int --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);SPEED_TOP_TX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_2,bps_start=>bps_start_2);end behav;-----------------------------------------------------------------------------------------------------------------------3个子模块------------------------------------------------------------------------------异步接收模块-------------------------------------------library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_unsigned、all;entity uart_rx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);end uart_rx;architecture behav of uart_rx issignal rs232_rx0: std_logic;signal rs232_rx1: std_logic;signal rs232_rx2: std_logic;signal rs232_rx3: std_logic;signal neg_rs232_rx:std_logic;signal bps_start_r:std_logic;signal num:integer;signal rx_data_r:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrs232_rx0<='0';rs232_rx1<='0';rs232_rx2<='0';rs232_rx3<='0';elseif (rising_edge(clk)) thenrs232_rx0<=rs232_rx;rs232_rx1<=rs232_rx0;rs232_rx2<=rs232_rx1;rs232_rx3<=rs232_rx2;end if;end if;neg_rs232_rx <=rs232_rx3 and rs232_rx2 and not(rs232_rx1)and not(rs232_rx0);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';rx_int<='0';elseif (rising_edge(clk)) thenif(neg_rs232_rx='1') then --接收到串口数据线rs232_rx 得下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收rx_int<='1'; --接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号rx_int<='0'; --接收数据中断信号关闭end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrx_data_r<="00000000";rx_data<="00000000";num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rx_data_r(0)<=rs232_rx;--锁存第0bitwhen 2=>rx_data_r(1)<=rs232_rx;--锁存第0bitwhen 3=>rx_data_r(2)<=rs232_rx;--锁存第0bitwhen 4=>rx_data_r(3)<=rs232_rx;--锁存第0bitwhen 5=>rx_data_r(4)<=rs232_rx;--锁存第0bitwhen 6=>rx_data_r(5)<=rs232_rx;--锁存第0bitwhen 7=>rx_data_r(6)<=rs232_rx;--锁存第0bitwhen 8=>rx_data_r(7)<=rs232_rx;--锁存第0bitwhen 10=>rx_data<=rx_data_r;when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;---------------------------------波特率控制模块-----------------------------------------library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_arith、all;use ieee、std_logic_unsigned、all;entity speed_select isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps得高电平为接收或者发送数据位得中间采样点bps_start:in std_logic --接收数据后,波特率时钟启动信号置位或者开始发送数据时,波特率时钟启动信号置位);end speed_select;architecture behav of speed_select issignal cnt:std_logic_vector(12 downto 0);signal clk_bps_r:std_logic;constant BPS_PARA:integer:=5207;constant BPS_PARA_2:integer:=2603;beginprocess(clk,rst_n)beginif (rst_n='0')thencnt<="00";elseif (rising_edge(clk)) thenif((cnt=BPS_PARA)or(bps_start='0')) thencnt<="00"; --波特率计数器清零elsecnt<=cnt+'1'; --波特率时钟计数启动end if;end if;end if;end process;process(clk,rst_n)beginif (rst_n='0')thenclk_bps_r<='0';elseif (rising_edge(clk)) thenif(cnt=BPS_PARA_2) thenclk_bps_r<='1'; --clk_bps_r高电平为接收数据位得中间采样点,同时也作为发送数据得数据改变点elseclk_bps_r<='0'; --波特率计数器清零end if;end if;end if;clk_bps<=clk_bps_r;end process;end behav;---------------------------------异步发送模块------------------------------------------- library ieee;use ieee、std_logic_1164.all;use ieee、std_logic_unsigned、all;entity uart_tx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps得高电平为接收数据得采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据得时候,发送模块不工作,避免了一个完整得数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确得数据传输出去);end uart_tx;architecture behav of uart_tx issignal rx_int0: std_logic;signal rx_int1: std_logic;signal rx_int2: std_logic;signal neg_rx_int:std_logic;signal bps_start_r:std_logic;signal num:integer;signal tx_data:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrx_int0<='0';rx_int1<='0';rx_int2<='0';elseif (rising_edge(clk)) thenrx_int0<=rx_int;rx_int1<=rx_int0;rx_int2<=rx_int1;end if;end if;neg_rx_int <=not(rx_int1)and (rx_int2);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';tx_data<="00000000";elseif (rising_edge(clk)) thenif(neg_rx_int='1') then --接收到串口数据线rs232_rx得下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收tx_data<=rx_data; --接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrs232_tx<='1';num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rs232_tx<='0';when 2=>rs232_tx<=tx_data(0);--发送第1bitwhen 3=>rs232_tx<=tx_data(1);--发送第2bitwhen 4=>rs232_tx<=tx_data(2);--发送第3bitwhen 5=>rs232_tx<=tx_data(3);--发送第4bitwhen 6=>rs232_tx<=tx_data(4);--发送第5bitwhen 7=>rs232_tx<=tx_data(5);--发送第6bitwhen 8=>rs232_tx<=tx_data(6);--发送第7bitwhen 9=>rs232_tx<=tx_data(7);--发送第8bitwhen 10=>rs232_tx<='1';when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;四、实验步骤1.建立新工程UART,选择芯片,型号为cyclone ii EP2C35F484C8。
实验二 RS232串口通信实验
![实验二 RS232串口通信实验](https://img.taocdn.com/s3/m/ba7278d8a58da0116c174965.png)
实验二RS-232串口通信实验
一实验目的
(1)熟悉RS-232接口电路的作用与电路组成;
(2)掌握计算机间利用串口进行通信的连接方法;
(3)掌握串口通信软件的使用方法。
二实验所需材料
本实验要求使用:
◆UTP类电缆
◆两个RJ-45连接器
◆两个DB-9串口改RJ-45口连接器
◆两台计算机
◆一把网络压线钳
◆一把电缆剥线钳
◆一台电缆测试仪
三实验步骤
1、每两人一组,在老师指导下,根据下面的线序关系排列线序对;
一端:
2
3、使用压线钳将两端压紧。
4、使用测试仪测试连通性。
5、将两个DB-9连接器分别固定在两台计算机的串口(COM1)上。
6、将做好的线缆两端分别接入固定好的两个DB-9连接器的RJ-45端口上。
7、使用串口通讯软件测试,验证能否通讯。
四、实验总结
1.制作网线,选定一节双绞线,用剥线钳剥去两端的皮,按线序关系排列线序对,将两端分别插入水晶头中,用压线钳压好。
2.用测试仪测试网线的连通性。
3.将两个DB-9串口改RJ-45口连接器分别插入两台PC机的DB—9串口种,再用网线插入连接器的RJ-45口中,连接两台电脑。
4.用软件测试连接的状况。
一开始显示的界面
5.选择发送的文件,点击“打开”即可接收到。
6.接收文件的一端,显示文件内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二串口通信(SCI)实验
一.实验目的
1.进一步熟悉MT-IDE嵌入式开发系统环境、汇编、C语言、调试方式。
2.加强串口通信(SCI)基本原理及编程原理的理解。
3.理解课本中的程序代码。
4.分别运用查询方式、中断方式实现通信。
5.理解SCI通信原理图(如图2-1)。
PC
二.预习要求
1.仔细阅读本实验指导书。
2.复习有关的串行通信(SCI)的章节
3.熟悉GP32串行通信(SCI)的工作方法及编程。
4.根据实验内容要求编写好程序,为实验做充分地准备。
三.实验设备及其连接
1.PC机一台
2.MT-IDE嵌入式开发系统一台
3.串行通信线一根
4.万用表一只
四.实验内容
1.理解串行通信(SCI)原理。
2.运行与理解各子程序。
3.主程序运行课本的样例程序。
4.编制一个查询方式通信程序。
通过PC机发送一个命令以控制接在PTA0~PTA7口的8个小灯亮暗状态,具体是:各个小灯初始状态都为暗,首先进行通信测试,PC机发送“A”(65),若单片机接收到则8个小灯全亮,并回送字符“A”(65),虽然单片机接收到但有问题,不是“A”(65),说明有误码,则4个小灯全亮,并回送字符“0”(48),否则8个小灯全暗无反应,PC机1分钟后自己判断线路不通,并显示“线路不通”。
成功后进入控制状态,PC机发送字符串“11”,PTA0口灯亮;发送“10”,PTA0口灯暗;发送“21”,PTA1口灯亮;发送“20”,PTA1口灯暗;依此类推,当给PTA口发送“01”,8个小灯全亮,发送“00”,全暗。
PC 机方程序已知。
5.编制一个中断方式通信程序。
编程要求同上一条。
五.编程提示
1.按照结构要求写好编程代码和注释。
2.计算波特率,SCIInit.h(SCI初始化子程序)设置SCI比特率寄存器(SCBR),设置允许SCI、正常码输出、8位数据、无校验,即设置SCI控制寄存器1(SCC1)相应位,设置是否允许发送与接收、是中断接收还是查询接收,即设置SCI控制寄存器2(SCC2)相应位。
3.查询方式通信程序的主程序主体是一个死循环,循环体中是不断检测来自PC机的数据是否可以收,即检测SCI状态寄存器1(SCS1)第五位是否为1,成立时可以接收数据;和发送接收到的数据,即不断检测SCI状态寄存器1(SCS1)第七位是否为1,成立时可以发送数据。
4.中断方式通信程序的主程序也主体是一个死循环,但该循环体是一个空循环体,所有接收和发送数据程序代码放在中断程序中,这里没有检测代码,数据开始发送和接收的条件就是中断的条件。
六.实验报告要求
1.小结GP32串行通信(SCI)的原理及编程,并画出其流程图和程序代码与硬件接线图。
2.小结中断方式和查询方式的编程方法,并画出其流程图和程序代码与硬件接线图。
3.回答下列问题
(1)全部发送字节每位为0,用万用表测量芯片的TX端电压是多少?并说明其原理。
(2)全部发送字节每位为1,用万用表测量芯片的TX端电压是多少?并说明其原理。
(3)什么是空闲线,如何识别?
(4)串行SCI通信有哪些中断?各在什么情况下发生,作用是什么?
(5)如何知道串行口TX发送了信号?
提示:方法一,利用万用表在TX端发送0或者255持续0.5秒钟时的电压值。
方法二,在TX端发送0或255持续0.5秒钟的波形时的小灯变化。