C语言如何实现串行通信

更新时间:2023-05-13 06:10:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

串口通信

维普资讯

的网络板!一

设备驱动器能了解这!剐曩是网

当所有这屠的程序一起。作就形成丁局域 I‘网操作系统,它能支持局网服务和蛊用程序——遗’

否采用了直接存贮器访问和期望的Io口了中断/ _乏典型的网络硬件是由微机局部网络卡和联结计算机的电缆组成。当夸最常用的二种硬件联结是 I !』太网和标志环嘲 ( k n Ri g,虽然证有很多 To e n )

蔗局域圈成为理代计算机里程碑的一个必要的组成部分。

[孙月和译 ̄,YTE,J n,1 8,北方校] B u e 99

系统使用ARC n t e和Ap l的L c l l pe o at k a

C言如何实现串行通信语大连海运学院电子系赵伟

引曹我们在编制计算机通行软件中发现,目前流亍 亍的太多数C语言版本 ( c8 Ms · MS 如 6 c 30 C

不再说明了。 裹1 1 H号软件中断 4输八参数功能输出参数

4 0 )都没有提供串行通信的功能个别版本 .等 (如MS . )虽然有涉及串行通信的函数,能 C 50功也远不如汇编语言和BA I S C语言强。为此 .我们编写了几个子程序,它们分别实现对串行口的初始化、毂据传递、数据接收及状态检襁6等功能,子程序的调用方式和 C语言中—般函数的调用相同 . 因此使用起来非常方便。子程序的编写有二种方式:c语言方式和汇编语言方式,可以根据具体情况选择一种自己认为台适的方式。本文源程序全部用 c 6匿Mir s f宏汇编编写,于其他版本的C B c o o ̄对语言 .个别语句要稍加修改之后才能使用。子程序编写好后,曾经在I BM~ c机上使用过较长时间, P 效果良好。一

AH=0 DX=串行 端口号初始化串AL=初始化参数行口

A信状 H曩线AL:M ODEM

I

状态

A端号行费A f H通绞态 H; 发 L A信状 口 送 IA=送J的符 L发中字 l字符 I

一羯靳

姐默

A嚣粤行态试 L H。 【测 端串棱口 A H我们编写的子程序基本上是用 lH号软件中断 4宴现的,它们妁功能如下: i i

c m ( o ̄ o fg l设置并初始化由 p r指 n to p r,c n i ) ot

软件中断介绍由于子程序的编写大量使用了软件中断,在此

首先对轼件中断做简单的介绍。I M— c机写在ROM中的程序,一部分是 B P BA C解释程序 .另部分就是基本输人输出系统 SIBI OS。

定的串行口,参数 c n i说明了波特率、数据 of g位、停止位和奇偶位。 tn h r ( o t h r c a p r,c ):将字待 c送往由p n指定的 h o

B 0s主要功能是驱动系统中所配置的常 1的

用外设 .使程序员不必过多地关心设备的物理特性 .从而能方便地控制各种输几输出操作。B OS I 允许程序员脚软件中断的方式调用其中的各个子程

串厅口发送。来的字符

rv h r ( o t:接嵌一个 I o t cc a p r) ̄p r指定的串行口送

序,这就太大简化了程序员的工作在 B O中, IS 与串行通信有关的是lH号软件中断,它的输八/ 4 输出参数阻及实现的功能如表 I示。表中的韧始所化参数、通信线状态、MODEM状态等各个参数的

s ̄o (o t:返回由p I指定时串行口状态。 t . m p r) ac。t

其 *p r=0 ̄CQM I 1)t代表 COM=2 ot代, xr=1 .

=、缩写子程序1 )C语言实现方式

基本含X .在很多参考资料上都可以查到,这里就

C8允许用户调用B O 6 I S中所有的软件中断和系·7· 5

串口通信

维普资讯

统功能调用 c8与B1 6 0s的接口主要是通过系统库函数s n v c r f rs y t( e。se .r c )来实现的 .该函数的功能是调用BI的V C软件中断,八口参数为 OS e号sr c{n x.b c tu tit a x x.d s .d, d e: x.i l s s}re s 1

缸e,口参热为r e,数的返回值是8 s或8 8 g出 f5函 o 6 o8标志寄存器的内容 .为了实现串行通信 .我们只要利用这一函数反复调用 1 P号软件中断,就可以完 4I成对串行口的各种操作表 2是子程序的源程序就

r g . x= ( t ) 0t es& 3Blrg d c s, x= po t r ̄

Sysnt

( x1 t 0 4.& rgs& r g ) e . es I r t r (e s a eu n r g . x)

清单 .文件名是SO- I C.它可以放在主程序中和主程序一起编译,也可以单独编译,形成s o.BJ I O后再与主程序进行连接。 2{语言实现方式 )亡编

C8调用{ 8[编子程序与调用其它外部函数的方法相同 .但对汇编语言的书写格式有严格的要求, 小模式为例,要求的格式如下:i ld o 1h ncu e m de .

襄 2¥0.程序清单 1 c潭{ to nic m ( o t c n f ) p r, o fg

{

sr c{n x x.C tu t{ ta,b X,d, s .d, s c; x t i d, 0'r s, eg

i l e ol f c h nc ud pr o a .

rg a e s. x= (《 ) o l 0 8 I nff; cr g . x= p r j c sd o t

p bi u lc文件名文件名p o e r rcnapus bp h E O b q V p, s p po b p p

S, i ̄ m

( x1 o 4.

&, g e s,& t ) e,

}t nc r ( o t c r ha p r, h)

文饽名e d npi l d pio u h nc u e e l g e. e nd

f

sr c{n x x,C,d , i s e I ) tu t{t a,b X x, d,d, r egst

关于所要求的汇编子程序的接式 .有几个问题需要说明

r g . x= (《 ) c csa 1 8 l hIt g - x= p r c sd o% Sy l snt ( X 4,& r¥s 0 l e。

( )mo . 1如1h.p oo u . e i g e b三个不 r lg e h, p l u .是 o可缺少的定义文件,它们包含在所配置盼磁& r F )I c, s

盘上。

}r v ha ( r ) c c r po t

()c 6 2 8在调用子程序时把要传递的参数压八栈中 并且最左面的参数放在栈顶,右面的参数最放在栈底,因此在小模式下子程序取参数的地址分别是 b p+4 p,b+4+参数的长度,’”

f

sr c ̄n x,b tu t tta x.C X.d s,d,d,O; x, i s S}r egs j

o

r g . x= ( t ){ es a 281 0r g . x= p r c

d o%

( )子程序回送的c a型、t t 3 hr n型值存于 A x寄存器中 .

Sysn ( Xl t t 0 4,& r g .& r g ) cs es,r t e um (esa r g . x& 0 0f l x0 f )

有了上面的介绍,就不难编写串行通信子程序了。源程序清单列于亵 3,文件名为s o. S .为 I AM了生成目标文件,首先用M A M软埠进行汇编, s

} aⅫ t I( cH ) p

然后就可以和主程序进行连接了,

衰5¥0 4 U曩墨序蒲簟 1. 5i l d d 1h nc u e mo e . L l d p o o u h uc u ̄ r l s e.J

pu h p s b mO p v b

t

s p

ticm m d nto pI pu lc tnc r b i r hapor ̄= 4 c bar ̄ 6 t c a pr near m h r oc

 ̄ O d ( p+ pr'2 W V x i b o t

p lc i# o ub i ntc mpot= 4 t

 ̄ O a .[ p+ c nf ' W V 1 b i o ̄3 1 o a 0 nv h il 1 H rt 4 p p p o D

c n i= 6 o fs i lor p o i i nt c/l rcI" ̄

·7· 6

串口通信

维普资讯

p s p uh bi ov p, s n- b p

p s p uh bm ov bp . s p

E pt o t b p r3 ̄ pt ha 3 b c r

mo x.[ p p r3 vd b+ otm o h, 2 v ai t l H n 4 p p b o p

mOV x.[ p+ p r ̄ d b o tm o h. 3 v ai 1 nt 4H poP bpr et

pop bpr et

r vc r ̄dp c hc el,

sa ̄ t t om c ndpI

t nc r口 d r ha p,

p b i 8 a cO n u lc t t i pu l c r vc r b i c hapor t= 4 ’ por t= 4

i l e pio u· nc ud e l g e h e nd

藿 l"

sa c m p o o r t to r c h a

r vc r p o a c ha r c ne t

三、实现串行通信为了说明在主程序中如何调用以上子程序瓣.

将两台I BM— c或其兼客机以串插方式连接 .

P双方同时运行TALK软件 .就可用对话方式实现

串厅通信 .们编写了一个简单的终端仿真程序 .我命名为T ALK. C.我可以实现下面的功能。每当键盘上敲八一个A I码键 .T K ̄将这一字符传送 SC I L A

双机通信襄 4 T K.薯程序清单 AL c# i l c 8 d o. nc ud t i h#耐缸 e o i O 5 c nf ̄ X B

给字符发送予程庠,后者通过串符口将字符发送出去 I串行口每收到一个字符 .TA K ̄将此字符送 L屏幕显示.程序选择COM作为通信端口,波特 1

# d fn 酊 ei e 0l0 X 0# d fn or 0 c Ie p t # d fne TR UE 1 ei mai n ( )x 2. c hJ

率为3 0 P .数据位 8 .止位 1, 0B S位停位偶校验方式 .主程序中还用到了其它两个子程序 c ( )和址 o ( ) y,它们分别完成监视键盘和读键盘的功能逸两个子程序是用 1 H号软件中断实现的 . 6图 1 AL C的流程图,表 4 AL C的源 ̄T K. ̄T K.’

i nt X1

.

i 'o nic m ( ̄

) J

whie ( l TRUE){ xl c c ( ) A O 0 = hk y X4 )x2 xl 0 4 =& x 0I

程序请单。

i (2{ f x)c h= r虹 y ( d ) I

p i t (牺 C .c ) rn f‘ h It nc t ( h) r ha o I

} i (t t o ( )& s d ){ f sa c m ry c h= r v ha ( ) cc r, pif ( rn牺C’ .dx l )} ) 'ck y ( h c )

{i tt t nt s a us

mm c{ x】, ti a,b【 ntos} s

.d .s。d,d, x i i s

图l TAL C件流程图 K·软.

咐 r郴

s 1 t缸= 0 x01, 00

将主程序输八计算机 .经编译之后产生目标文倬 T K· L A OBJ .再与子程序的目标文件 g o. l OBJ 进行连接就可以运行了。编译,连接过程如下C> cci TA LK C> CC2 TALK C> CC3 TALK C> CC4 TALK

啪协 B ̄ tnt ( Xl= i f 0 6.& r s& r ̄s l皤, e ) r诅m (

t e sa州 a l )} r k ( ) de’

sr c{n x x.c,d .s .d。d, tu ti t a .b x x i i s e 1) r 暗 r秘 . x= 0 0 0 e B X0 0 )蛳呻坤

0 0H r r ( ̄ s ax& X0 ) et n g u r,

C> LI K T ALK+ S o一葛 LI N ”( B

} ‘ 7 7

串口通信

维普资讯

四、结束语本文主要是通过嘏用软件中断的手段来强化c语言串行通信的功能,它具有编程简单 .容易实现

的波特蛊无法设置,无法实现环路自测试骘。如果各个子程序采用直接对 8 5硬件进行存取的办法, 20 将会得到更好的效果对子大多数应用场台来说 -本文的程序足以满足要求。

的特点=但由于软件中断车身的局限性,限制了串行通信一些功能的使用 .例如小于或等于 1 0 BP o s

I系列计算机用户文件结构改进初探 V I V华东工学院计算机系‘ ~

高宝华

摘要。在MV计算机的文件树中 .操作系统将全部用户的初船工柞目录都设置 AUDD目录之下 .

件类型可蹦粗略地分成二大类:即目录文件和数据文件。数据文件又可分为系统的、用户的及其它

但在系统的实际运行和管理过程中,这种 J户文件 f I蛄构表现出来些缺陷和不足。拳文针对这一问题 . 试图对原J户文件蛄构的改连柞一些探讨和说明。 f I

的魏据文件,它们按类别放置在有关的目录之下 .

全部目录文件和数据文件组成了一个所谓网状的倒置树形结构。在较低一级分支上的目录做子目录 q

实践证明。经过这些改进烈后 .不怔敖善了系统的运行情况,同时也寿系统管理带来了雁太方便 .基蕾解决了原木统拄这一方面的不足。

或下级目录,较高一级分支上的目录叫做某一主目录或上级目录 .最高级目录即树中顶的目录叫做根目录。典型的Al/ s文件系统结构如图 1璐 V所

微型显鬟

在MV系列计算机的AO/ S B V操作系统中.文

图 I A0/文件系统简图 s Vs

其中,与用户有关的目录有两个;即UP目录和 DUDD目录。uP D目录是用户说明文件目录 .该目

对于

这种用户文件结构,笔者在系统管理曲实践中感觉到有几点不足 .不便于动态她随机修改 1用户初始工作目录磁盘区域的大小。2 .由于全部用户文件和系统文件构成了物理磁盘的整体,园此对整个系统的优化和调整带来很多不便。3 .不利于散磁盘文哗的后备工作 4 .对于多磁盘控制器多磁盘驱动器的计算机硬件系统,不能充分有效地盘挥硬件结构上的优势。5·不便予兼顾对各类大 小不同甩户的管理工作。

录存放着在系统中注册的每个用户的说明文倬,操作系统根据每一说明文件的具体内容,实施对相匝用户的某些规定的控制 .UDD是垒部用户初始工

作目录的总目录 .当用户登录系统成功以后,用户 的韧始工作目录即在uD D目录下的某一用户子目 录巾。着用垒通路名表示这一初始工催目录应为:、

U DD: U ̄ERN A M E n。

在这种文伴结构中,用户的全部文肄 (论是无自己编制的 .或是由于运行某些程序而产生的 ),都在这一用户韧始工作目录或它的某一子目录中, 而用户相 _于系统文件的参考工作点也固定是这一对

象我院这样的用户环境,用户数量多、用户程序规模大小相差悬殊,上述不足之处就表现得尤为

突出 .于这掸的用户环境,安排好用户文件结对如何构 .充分发挥系统资源效益,是从事中小型计算机

韧始工作目录 .或是击用户自己设置的初始工作目录的某一子目录。·7‘ 8

系统管理和应用的技术人员的一项重要工作。 为此 .笔者根据自己多年工作的实际体会 .列

本文来源:https://www.bwwdw.com/article/vtpe.html

Top