nbhkdz.com冰点文库

Windows下实现PC机与单片机AT89C51的串行通信

时间:2011-03-08


20 0 9年第 9期  ( 总第 1 1 ) 2 期  

大 众 科 技 
DAZHONG    I KE J 

No 9, 0 9 . 2 0  

( muaie   .2 ) Cu lt lNo1 1 vy    

W  o s   d w 下实现P 机与单 片机A 8 C 1 i n C T 9 5 的串行通信 
董晓丹 
( 苏信 息职业技 术 学院,江苏 无锡 2 4 0 ) 江 10 0  
【 摘 要 l Wid w 9 下使 用 A I 在 n o s8 P 通信 函数 实现 P C机 与 A 8 C5 单 片机 的 串口通信 , T9 1 硬件上通过 电平转化芯 片MA 3  X2 2

来实现 RS 2 2电平和 T L电平的转化 ,并说明 了相 关的通信应 用协议 。上位机 通信程序 采用 v + . -3 T c+ 6 0结合非阻塞通信 、多  

线程等技术编写 。单 片机采用 中断方式进行数据传送 。   【 关键词 】串口通信 ;单片机 ;MA 3 ;RS 2 2 X22 一 3 ;通信协议 
【 中图分类号 】T 1 .   N9 5 4 0


【 文献标识码 】A  

【 文章编号 】10 -   120 )9 0 2- 2 0 8 1 5(0 90 - 0 9 0  1

般单 片机 构建的应用系统 ,如 智能控制系统 以及 数据 

( )软件 结构  三
1P 机部分  .c Wno s i d w 提供 了两种线程 ,辅助线程和用户界面线程 。区  别在 于:辅助线程 没有 窗 口,所 以它 没有 自己的消息循环 。   我们使 用辅助线程 ,主 要用它来监视 串 口状态 ;而主线程则  可专 心进行数据处 理、提供友好 的用 户界面等重要 的工 作。   注意辅助线程和用户 界面线程 必须 同步。   所 谓的非阻塞通信 ,也即异步通信 。是指在进行需要花  费大量 时间的数据读 写操 作 ( 不仅仅是指串行通信操 作)时,  
旦调 用 R a F i 0、W i e i e edie r t F l 0, 就 能立 即返 回 ,而 让 实  际 的读 写操作在后 台运 行:相反 ,如使用 阻塞通信 ,则必须  在读 或写操作全部完 成后才能返 回。 由于操作可能需要任意  长 的时间才能完成 ,不 能实现实 时控制 。非阻塞操作还允许  读 、写操作能 同时进行 ( 即重叠操作 ),在实际工作 中非常  有用 。下面 是一些常用 的函数 :   C e t F  (z e ie fw c e s fw h r M d ,p a f W   r a e i e sD v c , dA c s , d S a e o e l s , dc l


采集 系统,都需要具有与P 机通信 的功能 。它主要 介绍 了硬  c 件 的组成 以及 利用A I P 函数进 行 串 口通信 中如何 结合非 阻塞  通信 、多线程等 手段 ,编写 出较好的通信程序 。P 机在V 6 0 c C . 

环境下利用 通信A I P 函数 实现,单片机则是在 方式1 下的中断 
方 式编程 。串 口通信中结合非 阻塞通信、多线程等 手段可 以  在C U P 处理任 务 比较繁重 、与外 围设备 中有 大量 的通信数 据 
时 ,有 更 好 的 表 现 。  

( )硬件 介 绍  一
系统 中采用 8C 1 片机 作为下位机 ,运行W n o s 8 95单 i dw 9 的  P 机作为上位机 ,二者通过R 一 3 串行 口进行通信 。 C s22   R 一 3 接 口使用 的是R 一 3 电平 ,是 负逻辑定义 的。其  S22 S22 电气特性要求 :规定逻辑 “ ”的电平低于- V 1 3 ,而逻辑 “ ” 0  的电平 高于+V 3 ;与T L T 电平截然相 反。要 使这两种 电平 能够  互连 ,必须加入 相应的 电平转化 电路 。在 本设计 中采用 集成  电平转换芯片 ̄X 3 进行R- 3 / T 电平转换。 22 S22TL   由于R 一 3 互连线采 用的是单端共地 的信 号传输模 式, s22   信 号极 易收到环 境噪音 的干扰 ,采 用R一 3 的最大传输 距离  S22 仅为3m 0 ,实践证明,如果连接 的电缆未经过特殊处理 ,在超  过 1m 5 的情况下 ,信号传 输的差错率就 已经不容忽视 ,所 以这 

re e, at  

fw t rA d l g , T m l tF   ) d A t sn F a sh e p a e ie  l
R a F i (C m , n u f n y e , n y e R a , o e l p e   e d i eh om i b f ,B t s& B t s e d& v r a p d )  

W ie i eh o ,u b f,B ts& B t sr t, oe lp e  r tF l (C m o tu fn y e, n yeW ie& vr ap d )   G t v r a p d e u t H N L   F  , P V R A P D e O e lp e R s l (A D E h i e L O E LP E  l
l O e a p d  p v rl p e ,

里使用二芯屏蔽 电缆作为传输 介质 。  
整个硬件电路如图I :  

LD O D l c T a s e ,O L f a t P W R   p b r n f r B O   W i)  
R2cI ss  .2  

要使 用非阻塞通信 ,首先在 调用C e tF l ( 函数打开  r a e ie ) 串口时 ,参数fw t rA d l g 使用F L  LG O E L PP D; d A t sn F a s IE F A V R A E  
_

止 

  I

然后 在调用R a F l 0函数读 串口时,l O e lp e 参数指  edie pvrapd

图 1 采 用 M X 3 接 口的 串口通信电路  A22

定一个O E L A E 结构 ,使数据 的读写操作在 后台进行 ,接  VRPAD 着通过 调用G tv r a p d e u t) e O e l p e R s l ( 函数 并为其参数 fa t W i传  入T U 来挂起辅助线程直 到操 作执 行结束。W i e i e RE r tF l  0函数 
的使用类似 。下面 为上位机通信程序部 分代码 :   ( )自定义消息  1
# e i e W C MM  A WM US +I   d f n  M O RE D  ER O1
_

( )通信 协议  二
P 机读取 ( C 发送 ) 数据 时, c 由P 机先发送字母 “ ”( W )  R “” ,

通知单片机计算机 已准备好,然后计算机在事件驱动 Io / 方式  下等待接收到字符 “ ”;当单片机接收到 “ ” (“ ”), Y R w  
时 ,向计算机发送 “ ”,表示单片机也 已准备好 ,这样 ,一  Y 旦计算机接收到 “ ”就表示双方都 已准备好 ,二者之间就可  Y 以进行数据交换 了。   【 收稿 日期 】2o 一 6 0  09 O— 1
口 

_

O N
_

M S A E W_ O0 】 A , n o m e d :/ 息 映 射 入   E S G (M C hIR D O C m R a ) / 消 _E

L N   n o R a (IT w a a , O G 1a a) / 消 息 响  O GO C J , d U N  P r m L N   P rm :/ m e 应 函数说 明  ( )在M iF m c p 2 a n r .p 中定义全局变量 

【 作者简介 】董晓丹 ( 9 1 ) 18 一 ,男 ,江 苏无锡人 ,江 苏信息职业技术 学院助教 ,研 究方向为计 算机通信 。  


29 .  

 

HN L  ADE HN L  ADE
数 

h o ;/ 准 备 打 开 的 串 口的句 柄  Cm / h o m a cT r a :/ C m W th h e d / 辅助线程的全局 函 

B 0  Ra S a : 0Lfedtt  

f e d t t: R a F  (h o , lB fe ,d L n t, RaSa edie Cm pufr wegh l  
&wyeRa, d B t s e d 

( )打 开 串 口, 设置 串 口 3  

ho C etF l( O2 ,GNRCRA  Cm=raeie CM  EE I ED l  
G N R C W I E / 允 许 读 写  EE I  R T , /
0  , NL, U L  OE PN
_ _

0 (n T Y n o)) / S pTIf :/ 读数据  G t v r ap d eu t h o , eO e lp e R s l (C m   & E D O (nT Y n o ) RA S p T I f ,& d B t s e d w y eR a ,   TU ): R E ) 
& ED RA
_
_

E IT N , X S IG  


/ 设 置 产 生 方式   /

:P sM sa e (W D h e dn , :o t e s g (H N ) S n W d  

FL FA IE LG

O E L P E ,/ 使用异步通信  V RA P D /

W   O lR A , , ) )/ 通知主线程,串 口收到数据  M Cl   E D 0 0 :} /  ̄
}   ,  
ret r u n 0:  

( 阻塞 通 信 ) 非  
N L )  UL : i (C m = N A I H DL V L E  f h o = I V L D AN E A U ) {   M sa e o (打开串 口失败 ! , 告  M_ K : e s gB x      警 ,B O )  }   S t om a kh o , E _ X HR :/ 置 事件 驱 动 的类 型  eC m M s (Cm V R C A ) / 设 S tp o m Cm 12 , 1 ) : e u Cm (h o , 0 45 2   P r eo m C m U G   X B R lP R E RA OT } u g Cm (h o ,P R E TA OT   U G   X B R  
_



)   ( )在主线程 中发送下行命令。 6   B O   W ie t t :ca   z u f r c u t : O L f r t Sa h r s B f e [o n ]  fr t S a W i e t t: W ie ie h o , sB fe , r tF l (C m z u fr 
d B t so r t , w y e T W i e 

& w y e W i t n  dB t s r t e ,

P R E T CE R UG X L A 
_

  RERCER) l UG—X LA   P
C  ̄ TM O T  o m i eu s :/ 定 义 超 时 结 构 , 并填  O IE U SC m T m O t / 写该 结 构 

& IE O (n TY n o ) ) / R W T S pTlf :/ 写数 据  G tv r a p d e u (C m e 0 e 1 p eR s 1 h o , t   & E D O ( p T lf , RA S n T Y n o) &d B t s e d w ye R a ,  
_

TU ) : R E ) 

( )W _ 0 M_ A 消息响应函数  7 MCM_ED R
L N  no m e d U N  P rm L N   P r m  O G O C m R a (IT w a a , O G 1a a) (  

S t om ie u s Cm C m T m O t eC m T m o t (h o ,& om i eu s) :/ /设置读  写操作所允许的超 时 
DC   d b : B c  

/ 主线程对从下位机接 受来 的数据进行处理  /
}  

G t om t t (Cm d b) :/ 读串 口原来 的参数设置  e C m S a e ho ,& c /
d b B u R t = 6 0:d b B t S z = c . ad a e 9 0 c . y e i e 8:d b P r t : c . a iy   NPRT : O A I Y  db S o B t = O ET P I :c .B n r = c . tp i s NSOBT dbfiay   T U : c . P r t = F L E: RE dbfaiy AS  

S to m t t (Cm d b ) :/ 串 口参 数配 置  e C m S ae h o ,& c / ( )启动一个辅助线程 ,用 于串口事件的处理。 4  
h o m a c T r a = r a e h e d(U L 0  C m W t hh e d C e tT r a N L , ,

2 单片机部分  . 实 时控制 中,由于事件 的突发性 ,常采用中断的方 式进  行数据传 送,中断方式能更大限度地提高资源的利用率,使  CU P 在不进行数据通信时做其他的工作。下面重 点介绍单片机  在方式 l 下的中断方式编程 。   方式 1 0 异步通信方式 ,其中包括 1 是1位 个起始位 ,8 个数  据位和 1 个停止位 。波特 率由定时器T 的溢出率和 串口控制寄  1 存器S O 的状态确定,在CU MD P 的晶振为1 . 52 z 10 9Nl时,波特率 
常采 用 9 0 b s  60/。 对 S U 进 行 写 操 作 就 可 启 动 发 送 ,在 发 送 移 位 时 钟 的 同  BF 步下,从TD X 先送 出起始位 ,然后是8 位数据位 ,最后是停止  位,这样 ,1 帧数据发送完 ,中断标志T 置位 。 I   在允许接收的条件下 (E  ̄1 ,当R D RN ) X 出现 由l 的负跳  到0 变时,即被当成 是串行发送来的1 帧数据的起始位 ,从而启动 

(P H ED S A T R U I ) om ac P o ,/线 程 的全 局 函  LT R A   T R  O T N C m W t h r c / E 数  G ta e w d e S f Hn   / 此 处 传 入 了 主框 架 的句 柄  0, / 0 &w h e dD )  , dTral :
A S R (C m W t h h e d N L )  S E T h om a c T r a  U L :

( )为辅助线程写一个全局函数 ,主要完成数据接收的工  5
作。   UN   om a c P o (w D h e d n ) IT Cm W th r c H N  Sn W d  {  
D R WO D d Evt w Mas =O : k  

1 次接收过程 。当8 位数据接收完,并检 测到高电平停止位后,   即把收到 的8 位数据装入SI ,置位R ,l BF J I 帧数据的接收过程就  完成了。  

( )结 束语  四


S t om a k C m V R C A ) / 有 哪 些 串 口事件 需  eC m M s (ho ,E X H R :/
要 监视 ?   w ie 1 h 1 ()   {  

串口通信 中结合非阻塞通信 、多线程等手段可 以使得有  更好 的通信效果 ,并得 到实 践的证 明。本 文所提 出的实现 函  数 不 仅 在 V 十 上 可 以 实现 ,在D lh 、V 等 编程 工 具 ( 件 ) C+ epi B 软   中都可实现 。在使用 该程序 的通 信系统中,近 远距 离的通信  都取得 良好的效果。   【 参考文献】  

W iC mE e t Cm d E t ak S) / 等 待 串 口 a  om v n (h o ,& w v M s ,O :/ t   通 信 事件 的发 生  i (dE t a k& E RC A )一 E R C A ) /缓     (w vM s f V XHR V X H R (/ 冲区中有数据到达 
_ —

C M T TC m t t ;D O D dL n t : OS A  o S a W R   w e g h 

【 Dai J K u si i ac + 术 内幕【 皤 爱 民1 国印, 1 vd . r nk. s l + 技 1   ] V u  M】 王   译  北京: 清华大学 出版社,98 19 .   『1李华. S 5 2 MC 一 1系列单片机 实用接 口技 术【 . M】 北京: 北京航 
空航 天 大 学 出版 社 , 9 . 1 7 9  

C e r o m r o (C m d E r r 1 g , C m t t )   l aC m E r r h o , w r 0 F a s  &  & o S a  :
dL n t = C m t t c lQ e : w e gh oS a .b n u  

f]李朝青.C机及 单片机数据通信技 术[ . 3 P M】 北京: 北京航 空航 
天 大 学 出版 社 , 0 . 2 0 0  

i (w e g h > 0 { f dLnt )  
3   0.




赞助商链接

基于AT89C51单片机的双机串行通信设计

基于AT89C51单片机的双机串行通信设计 - 编号 1 单位代码 学号 分类号密级 课程设计 基于 AT89C51 单片机的双机串行通信设计 院( 系 )名称专业名 ...

如何使用AT89C51的串口和电脑的串口进行通信原理与实验

如何使用 AT89C51 的串口电脑的串口进行通信原理与实验串口通讯对单片机而言意义重大, 不但可以实现将单片机的数据传输到电脑端, 而且也能实 现电脑单片机的...

AT89C51单片机串行输出

AT89C51单片机串行输出 - 来源: 《单片机与嵌入式系统应用》 摘要: 介绍使用 AT89C51单片机扩展高速串行同步移位输出口的方法, 给出基于分立 TTL 元器件可...

第7章 AT89C51单片机的串行口

第7章 AT89C51单片机的串行口 - 第7章 AT89C51 单片机的串行口 1.帧格式为 1 个起始位,8 个数据位 1 个停止位的异步串行通信方式是方 式。答:1。...

基于AT89C51单片机的双机串行通信设计

基于AT89C51单片机的双机串行通信设计 - 编号 1 单位代码 学号 分类号密级 课程设计 基于 AT89C51 单片机的双机串行通信设计 院( 系 )名称专业名 ...

基于AT89C51单片机的双机串行通信设计课程设计

暂无评价|0人阅读|0次下载基于AT89C51单片机的双机串行通信设计课程设计_工学_...PC 机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现 集中...

单片机课后答案

AT89C51 单片机中,如果采用 6MHz 晶振,一个...A.PC 是一个不可寻址的特殊功能寄存器 B.单片机的...8 个数据位 1 个停止位的异步串行通信方式是方...

单片机原理及应用89c51期末复习资料

AT89C51 单片机运行出错或程序陷入死循环时,如何...答: (1)SP=SP+1=61H (61H)=PC 的低字节=...T 69、单片机 89C51 具有 并行 通信 串行 通信...

基于AT89C51单片机的双机串行通信设计课程设计

基于AT89C51单片机的双机串行通信设计课程设计 - 课程设计 基于 AT89C51 单片机的双机串行通信设计 黄河科技学院课程设计 毕业论文(设计)原创性声明 第 I 页 ...

单片机七八答案

单片机七八答案 - 第7章 AT89C51 单片机的串行口 4.通过串行口发送或接收数据时,在程序应使用 。 A.MOVC 指令 B.MOVX 指令 C.MOV 指令 D.XCHD 指令 ...