串行端口程序设计

合集下载

串行接口实验报告

串行接口实验报告

课程实验报告实验名称:串行接口专业班级:学号:姓名:同组人员:指导教师:报告日期:实验二1. 实验目的 (3)2. 实验内容 (3)3. 实验原理 (3)4. 程序代码 (6)5. 实验体会 (13)实验二1.实验目的1.熟悉串行接口芯片8251的工作原理2.掌握串行通讯接收/发送程序的设计方法2.实验内容通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。

具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。

2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验箱的8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。

3.实验原理1.8251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。

控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。

另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。

2.8251方式指令(端口地址2B9H)3.8251工作指令(端口地址2B9H)4.8251状态字(端口地址2B9H)5.8253控制字(283H)6.8253计数初值(283H)计数初值=时钟频率/(波特率×波特率因子)本实验:脉冲源=1MHz波特率=1200波特率因=16计数初值= 1000000/1200*16=527.程序流程框图4.程序代码Fxc.asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz nextmov dl,0ffh ;有键盘输入,读入字符mov ah,06hint 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend startSend .asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址buf3 byte 0mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz next; mov dl,0ffh ;有键盘输入,读入字符;mov ah,06h; int 21hmov dx,28ahin al,dxcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend start步进电机:1.K0=0,逆时针转;K0=1,顺时针转2.K1=0,慢转;K1=1,快转data segmentbuf1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;LED显示buf2 byte 0 ;步进电机数据buf3 byte 0 ;保存开关数据buf4 byte 0 ;保存顺转数据buf5 byte 9 ;保存反转数据buf6 byte 0 ;开关机data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov buf2,00110011b ;步进电机数据mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;-----------------------------逆转控制----------------R0: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jnz kai ;转反转test al,01 ;测试K0=1?jnz L0 ;转反转mov al,buf4 ;走马灯开始一步顺转cmp al,9jnz S1call change9_0S1: inc al ;数据加1mov buf4,almov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;数据完成加1mov al,buf2 ;电机开始一步逆转ror al,1 ;数据左移mov buf2,almov dx,288h ;A口输出out dx,al ;电机完成一步逆转mov al,buf3 ;回复C口数据test al,02jnz R1 ;转快转call delay_s ;否则慢转jmp R0R1: call delay_q ;快转jmp R0;------------------------------顺转控制-----------------L0: mov al,buf5 ;走马灯开始一步顺转cmp al,0jnz S2T2: test al,03 ;测试K2=1?jnz T2call change0_9S2: dec al ;数据减1mov buf5,al ;mov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;走马灯结束一步顺转mov al,buf2 ;电机开始一步顺转rol al,1 ;数据右移mov buf2,almov dx,288h ;A口输出out dx,al ;电机结束一步顺转mov al,buf3 ;回复C口数据test al,02jnz L1 ;转快转call delay_s ;否则慢转jmp R0T3: test al,03 ;测试K2=1?jnz T3L1: call delay_q ;快转jmp R0kai: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jz L0 ;转反转jmp kaiexit: mov ah,4chint 21hdelay_s proc near ;长延时mov bx,20hlp1: mov cx,0ffffhlp2: loop lp2dec bxjnz lp1retdelay_s endpdelay_q proc near ;短延时mov bx,1lp11: mov cx,0ffffhlp22: loop lp22dec bxjnz lp11retdelay_q endpchange9_0 proc nearmov buf4,-1mov al,buf4retchange9_0 endpchange0_9 proc nearmov buf5,10mov al,buf5retchange0_9 endpcode endsend start5.实验体会这次实验需要用到两种芯片8253和8251,两种芯片的作用分别是8253提供串行通讯所需的特定频率的脉冲信号,8251提供输入输出控制,所以在实验的过程中需要熟悉这两种芯片的方式字等使用规范,在仔细阅读了书本以及书本的编程实例后,基本摘掉了程序的设计方法实验过程中,出现了程序编译通过了但是不能运行的情况,后来经过检查发现是程序没有设置好的原因,要设置为编译后运行状态,否知只编译不运行,经过这次实验,知道了8253和8251两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。

VB 串口通信程序设计典型实例

VB 串口通信程序设计典型实例

V B串口通信程序设计典型实例利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。

不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。

在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC、PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。

6.1 PC与PC串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。

本设计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。

6.1.1 PC与PC串口通信程序设计目的(1)掌握PC与PC串口通信的线路连接方法。

(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。

6.1.2 PC与PC串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1所示。

表6-1设计用软、硬件6.1.3 PC与PC串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A 串口COM1端口的TXD与计算机B串口COM1端口的RXD相连,计算机A串口COM1端口的RXD与计算机B串口COM1端口的TXD相连,计算机A串口COM1端口的GND与计算机B串口COM1端口的GND相连。

图6-1 PC与PC串口通信线路6.1.4 设计任务利用MSComm控件和VB API函数编写程序实现PC与PC串口通信。

任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。

07实验七 Linux环境下的串行通信实验

07实验七 Linux环境下的串行通信实验

连接驱动器的使能端,使得当RTS设置成高(逻辑1)时,有效RS485驱动器;设置RTS为低 时,使驱动器处于三态,这时候实际上从总线上断开了驱动器,从而允许其他节点可以使 用同一传输线。当使用RTS时,必须确保发送数据前将RTS设置成高,在发送完数据的最 后一位后,将RTS线设成低。。另一种可选方法是自动发送数据控制。这种方法要求特殊 的电路,当数据传输时自动使能或无效驱动器。它减少了软件开销和程序员的潜在错误。
五、基础知识
串行通信 1、基本原理 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行 端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 串口是系统资源的一部分,应用程序要使用串口进行通信,必须在使用之前向操作系统提 出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。 2、串口通信的基本任务 (1) 实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实 现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的 帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。 (2) 进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是 并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送 入计算机处理。因此串并转换是串行接口电路的重要任务。 (3) 控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选 择和控制的能力。 (4) 进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他 校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。 (5) 进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用

RS232串口通信C++课程设计

RS232串口通信C++课程设计
2
2.1
设置和修改串口通信参数,包括端口,时间,波特率,奇偶校验位,数据位,停止位。
2.2
显示当前串口通信参数,包括端口号,波特率,时间,奇偶校验位,数据位,停止位,点击参数设置按钮,弹出参数设置窗口,当完成设置后点击确定,子窗口隐藏,显示界面是数据发送和接收界面。
2.3
参数设置后,打开串口,在程序中设置了一个默认的COM4但是在参数设置窗口可以设置串口,实现通信。
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CLASS1DLG_H__B8BA98C1_5D58_47BE_B664_E97E77EC5076__INCLUDED_)
随着当今信息技术的快速发展,通信已成为信息技术中的关键问题。尤其在控制领域,以何种方式实现计算机与外围设备间既简单又可靠的通信,就显得特别重要。由于串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一。VC++是新一代面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面有很强的功能。它具有功能强大、简便易用和代码执行速度快等特点,在通信软件的开发中成为越来越多开发人员的首选工具。无论在工业控制中PC机和单片机之间的通信,还是在2台Pc机之间的串口通信,都具有相同的原理。只要掌握其中的通信本质,就能灵活地实现串口通信,串口控制。

Vxworks串口通信程序设计与实现

Vxworks串口通信程序设计与实现
#n ld i c u e< t n I > sr gh i #n ld i c u e< i Li h so b >
_
1 Vx rs简 介 wo k
从 19 9 5年 以 后 , S 公 司 推 出 了 一 套 实 时 操 作 系 统 开 发 环 WR
# n l d i Li - > i c u e< o b h 撕 n l d s d oh c u e< t i .> 衔n l d i c 1 > c u e< o t. h
பைடு நூலகம்
境— — T ma0 o ao集 成 环 境 提 供 了高 效 明 晰 的 图 形 化 的 实 时 应 o d 。T r d n
用 开发 平 台 ,它 包 括 一 套 完 整 的 面 向 嵌 入 式 系 统 的 开 发 和 调 测 工 具 。 T rao环 境 采 用 主 机— — 目标 机 交 叉 开 发 模 型 ,应 用 程 序 在 主 机 的 o d n
2 串 口通 信 基 本 原 理
i tc n i n o fg
_
cm1 od o ( i) v
/ 口 l配置 函数 / 串
串 L在 嵌 入 式 系 统 中是 一 类 重 要 的 数 据 通 信 接 口 , 本 质 功 能 是 I 其 作 为 C U 和 串 行设 备 间 的编 码 转 换 器 。 当 数 据 从 C U经 过 串行 端 口 模 式 :I E MO E P P LN _ D 发 送 出去 时 , 节 数 据 转 换 为 串 行 的位 ; 接 收 数 据 时 , 字 在 串行 的位 被 转 i ts , B U A E9 0 ) / 置 串 口波 特 率 为 9 0 b s o l f  ̄O A DR T ,6 0 ; / c(d 设 60 p 换 为字 节 数 据 。应 用 程 序 要 使 用 串 口进行 通 信 , 须 在 使 用 之 前 向 操 必 i ts , F U H,】 o lf  ̄O L S o ; c (d / 空 输 入 输 出 缓 冲 区 / 清

串行232接口与USB接口的转接口设计

串行232接口与USB接口的转接口设计

1绪论1.1 USB转RS232应用价值USB自从1994年推出以来,逐渐得到了广泛的应用,现在的计算机都配备有USB 接口。

USB具有传输速度快,使用方便,支持热插拔,连接灵活,独立供电等优点,可以连接鼠标、键盘、打印机、扫描仪、摄像头、闪存盘、手机等几乎所有的外部设备。

正是由于USB的强大功能,使原来流行的RS-232接口逐渐退出了市场,现在很多新型的计算机甚至不带有串口。

但是RS-232可以做很多USB无法进行的工作;而且目前尚有很多外围设备,如打印机,Modem,传真机仍是用串口连接的,计算机如果不带串口或者串口数量少就会给使用者带来极大的不便。

所以设计出一种USB转RS232的设备是非常具有实用价值的,它可以满足某些没有串口或者串口数量少的计算机对串口通信的需求。

USB转RS232通信线可使你在串口和USB接口之间非常容易地建立可靠的连接,通过利用USB接口具有的即插即用和热插拔的功能给串口外围设备提供非常容易使用的环境。

它的设计可以轻松实现USB接口到通用串口之间的转换,为没有串口的计算机提供快速的通道,而且其传输速率高达1Mbps以上[1].1.2 现有USB转RS232专用芯片介绍随着新型的计算机的串口数量逐渐减少,用户对于USB转RS232通信线的要求也在不断的增加。

许多芯片制造商陆续推出不同功能的USB转S232专用芯片,用来满足广大用户的需求。

一下是现在市面上比较流行的几种USB转RS232专用芯片。

(1)PL2303芯片:台湾玖旺科技公司推出。

兼容USB1.1规格;通信速率最高为1.5Mbps;内含USB1.1全双工收发器;支持RS232串行接口。

(2)CJS1015芯片:深圳金鑫电子科技公司推出。

兼容USB 2.0规格;使用USB 全速通信(12Mbps);内含USB 2.0全双工收发器,48MHz晶振。

(3)FT232BM芯片:FTDI公司推出。

同时兼容USB 2.0和USB 1.1规格;适合任意波特率的数据传输;内置EEPROM,可在线编程。

RS232与RS485串行接口转换电路及编程实现

RS232与RS485串行接口转换电路及编程实现

RS232与RS485串行接口转换电路及编程实现RS232和RS485都是串行通信接口,但它们在信号电平、传输距离和通信方式等方面有所不同。

RS232是一种单向通信的接口,常用于连接个人计算机和外部设备,如打印机、调制解调器等,信号电平为正负12V。

而RS485是一种半双工通信的接口,常用于远距离和多点通信,信号电平为正负2-6V。

为了实现RS232与RS485之间的转换,我们需要使用特定的电路和编程实现。

电路设计:1.信号电平转换:由于RS232和RS485的信号电平不同,所以我们需要使用电平转换电路将RS232的正负12V转换为RS485的正负2-6V。

这可以通过使用MAX202芯片来实现。

MAX202芯片是一个双向转换器,可以将RS232信号转换为RS485信号。

2.数据方向控制:RS485是一种半双工通信接口,需要通过数据方向控制线来实现发送和接收的切换。

可以使用一个双四极开关(如74HC4053)来控制数据方向。

其中A路和B路分别连接到RS485的A线和B线上,控制端连接到MCU的IO口。

3.电源供电:RS485通信线需要提供独立的5V供电,可以使用一个稳压芯片(如LM7805)来为RS485提供稳定的电源。

编程实现:1.初始化串口:在MCU上初始化串口,设置波特率、数据位、停止位等参数。

根据不同的MCU,具体的初始化方法会有所不同。

2.设置数据方向:根据发送或接收操作,通过控制IO口的电平来控制数据方向,将数据发送到RS485或从RS485接收数据。

3.发送数据:将要发送的数据写入串口缓冲区,并发送出去。

4.接收数据:通过轮询串口缓冲区检查是否有数据到达,若有数据则读取并进行相关处理。

总结:通过以上电路设计和编程实现,我们可以实现RS232与RS485之间的串行接口转换。

这样可以实现单向通信接口与远距离多点通信接口之间的互联。

在实际应用中,我们需要根据具体的系统需求和MCU的特性进行具体的电路和编程设计。

一种串口通信程序的设计与实现方法

一种串口通信程序的设计与实现方法

效的方 法 , 它可以利 用 On o C mm 事件捕获 并 处理通 信 中发 生 的事件 或错误 , 时性 较 强。 实 O C mm 事 件是 MS o no C mm 控件提供的唯 一 的事 件 ,当有 数据到 达端 口或端 口状 态发 生 改变或有通讯错 误时 ,都将 触发 O C mm事 no 件 ,以获取 和处 理这些 通讯 事件 和通 讯中产 生的错误 。通 过查询 C mmE e t o v n 属性值 , 可以获 得关 于通 讯事 件和 通讯错误 的 完整信 息 ,进 而进 行处 理 。这 是 一种功 能很 强的处 理 串行 口错 误 的方 法 ,具 有 程序 响 应 及时 , 可 靠性 高 的优 点 。 示 : 查询方式是 程序通过查询 C mm vn 属 o E et C0 mP r : o r 0 t 设置 并返 回通信 端 口号 ; 性 的值 来判 断通信 过程 中的事 件或 错误 ,这 S ti g : e tn s 以字符 串的 形式设 置并 返 回波 特 种 方式 适合 于应 用程序 较小 、 实时性 要求 不 率 、 奇 偶 校 验 、 数 据 位 、 停 止 位 ; 是很 高的系统。 P rO e : o t P n 设置并返 回通信端 口的状态 , 也可 鉴于 以上 两种 通信 方式 的优缺 点 以及实 打 开和关 闭端 口;I p t 保 存和接 收从接 收 际应用 的需 求 ,本 系统 采 用查询 方式 来处理 n u: 缓 冲区获 得的数据 I up t 向发送缓 冲区发 通 信过 程 的 事件 或 错误 。 tu: O 送 命令和数据 ;Ib f rie 设 置接收缓 冲 n u f sz : e 区分配的 内存 数量 ;O tufri : 置发送 4远程门禁系统应用实例 ub f s e设 e z 缓 冲区分 配的内存数量 ; t rs od 设置为 4 1 系统设计 简介 R h eh l: . 某一 定值 , 每当接收缓 冲区收到该 定值个位字 当红 外线传 感 器感知 有 用户刷 卡时 ,读 符时 , 都会使 MS o C mm控件 产生 O C m 事 卡 器将卡 中信 息读 出 ,通过控 制 器传到 上位 n om 件 ; t rs od: 置为某一 定值 , 当传 输 机 ( 机 ) S h eh l 设 每 PC ,与 数据 库 中信 息 进 行 比对 , 缓 冲 区 中 的 字 符 个 数 少 于 该 定 值 时 , 如果 正确 ,上 位机 给控制 器发 送信 息 ,控 制 M sC0 m 控 件 产生 OnC0 m 事 件 ; 器 根 据 收 到 的 信 息 判 断是 否 需 要 开 门 和 关 m m Ip t d : n uMo e 确定 Ip t n u 属性取 回的数据格式 门 。 由于 该 门禁系 统是远 程控 制的 ,因此信 是 字 符 串 还 是 二 进 制 数 据 的 数 组 ; 息 需 要 通 过 以太 网传 输 ,控 制 器的 传 输 是 Ip te : n uL n 设置并返 回 Ip t n u 属性从接收缓 冲 Rs 2 2格式 的 ,而远 程 网络 数据 传输是 3 区读 取的字符 数 ; C mm: C mmE e t TC / P格 式的 ,因此 需要使 用接 口 换器 On o 当 o v n P I 转 属性 的值 变化时 , 产生 O C mm 事件 , 就 no 标志 完成 两种 数据 格式之 间的 转换 。整 个系统 的 发 生 了 一 个 通 信 事 件 或 一 个 错 误 ; 数据 传输 流 程如 图 1所 示 。 C mmE e t返 回最 近的通 信事件和 错误 ; 42 P o vn : . C机 单片机 串行通信 电路设计 C mE S n : o v e d在传 输缓冲 区中有 ̄Sheh l . rsod t 该 系统使 用的单片机 为凌阳 S C 0 1 P E6A 数 少 的 字 符 时 , 产 生 该 事 件 ; 单片机 ,利用单 片机 自带串 口与 P C机进行通 Co mEv e d c ie: S n Re ev 收到 Rt ehod个 字 信 , 中R - 3 接 口芯片完成 S C o l hrs l 其 S 22 P E 6A与 符 , 事件将 持续产生 直到用 Ip t 该 n u 属性从接 P C机 串 口 间的电平转换 。整个通信 电路 的 之 收缓 冲 区 中删 除数 据 。 框 架如图 2 ‘ 。根据实 际的需 要 , 卡器也 所示 读 32 M C m . S o m控件通信步骤 可以通过 RS 3 接 口芯片直接连 到上位机 -2 2 MS o m 控件进 行 串口通信的一 般步骤 上 。 Cm 为 : 置通 信对 象 、通 信 端 口号 以及 其他 属 4 3 通信 协议说明 设 . 性; 设定 通信协 议 ;打 开通 信端 口, 进行 数据 上 位 机 与 下 位 机 之 间 以 通 讯 速 率 的 传 送 ;关 闭 通 信 端 口 。 9 0b s 6 0 p /秒传输 数据 ,无奇 偶校验 ,八位 33 M a m , S o m控件通信方式 数 据 位 和 一位 停 止 位 。 MS o C mm 控 件有两 种处理通 信的 方式 , 4 4 串行通信 模块框架 . 即事 件 驱动 方式 和 查询 方 式 。 上位机 与 S C 0 1 P E 6 A单片机通 过一系列 应 答联络后 ��
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串行端口程序设计
一、实验目的
了解在linux环境下串行程序设计的基本方法。

掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。

学习使用多线程来完成串口的收发处理。

二、实验内容
读懂程序源代码,学习终端I /O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。

三、预备知识
有C语言基础。

掌握在Linux下常用编辑器的使用。

掌握Makefile 的编写和使用。

掌握Linux下的程序编译与交叉编译过程
四、实验设备及工具
硬件:UP-CUP S2410 经典平台、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位的时间宽度。

至此一个字符传送完毕,线路又进入空闲,持续为“1”。

经过一段随机的时间后,下一个字符开始传送才又发出起始位。

每一个数据位的宽度等于传送波特率的倒数。

微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。

接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:
●奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。

●帧格式错:一个字符从起始位到停止位的总位数不对。

●溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。

每一种错误都会给出相应的出错信息,提示用户处理。

一般串口调试都使用空的MODEM 连接电缆,其连接方式如下:
图2.3.2实用RS-232C通讯连线
六、程序分析
Linux 操作系统从一开始就对串行口提供了很好的支持,为进行串行通讯提供了大量的函数,我们的实验主要是为掌握在Linux中进行串行通讯编程的基本方法。

本实验的程序流程图如下:
本实验的代码如下:
下面我们对这个程序的主要部分做一下简单的分析 头文件
在Linux下串口文件位于/dev下,一般在老版本的内核中串口一为/dev/ttyS0 ,串口二为/dev/ttyS1,在我们的开发板中串口设备位于/dev/tts/下,因为开发板中没有ttyS0这个设备,所以我们要建立一个连接,方法如下:
打开串口是通过标准的文件打开函数来实现的
最基本的设置串口包括波特率设置,效验位和停止位设置。

串口的设置主要是设置 struct termios 结构体的各成员值,关于该结构体的定义可以查看
/arm2410cl/kernel/linux-2.4.18-2410cl/include/asm/termios.h文件。

设置这个结构体很复杂,可以参考man手册或者由赵克佳、沈志宇编写的《UNIX程序编写教程》,我这里就只考虑常见的一些设置:
●波特率设置:
下面是修改波特率的代码:
●校验位和停止位的设置:
无效验 8位
奇效验(Odd) 7位
偶效验(Even) 7位
●设置停止位:
1位:
2位:
设置好串口之后,读写串口就很容易了,把串口当作文件读写就可以了。

●发送数据:
使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。

可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。

关闭串口就是关闭文件。

七、实验步骤
1、阅读理解源码
进入/arm2410cl/exp/basic/03_tty目录,使用vi编辑器或其他编辑器阅读理解源代码。

2、编译应用程序
运行make产生term可执行文件
3、下载调试
切换到minicom终端窗口,使用NFS mount开发主机的/arm2410cl到/host目录。

进入
/host/exp/basic/03_tty目录,运行term,观察运行结果的正确性。

由于内核已经将串口1 作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试;这时要修改一下执行命令,在term 后要加任意参数(下面以./term www 为例)
Ctrl+c或者ESC可使程序强行退出。

注意:如果我们需要使用串口1通讯,比如做Zigbee或微型打印机实验时,需要加载串口1的驱动,这个在光盘里做了补充,请到实验补充里面找一下驱动程序s3c2410-tty.o。

insmod s3c2410-tty.o 就可以了。

相关文档
最新文档