找回密码
 注册
关于网站域名变更的通知
查看: 193|回复: 3
打印 上一主题 下一主题

单片机教程22单片机串行口通信程序设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-8 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1.串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。
" W5 @& o  x) b" d4 E* U8 ?
1 o  s: g. _/ @, {- K<单片机串行口通信程序设计硬件连接图>( R, q, Z4 @/ h# b% m; I5 O4 T
   例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON就能了。 5 g" Q  p7 E2 F5 w$ \
-----------------单片机串行口通信程序设计列子--------------------------6 J6 L" y" O. k; N2 v" I! m
ORG 2000H : \; @! K! r$ u0 j! V
START: MOV SCON,#00H ;置串行口工作方式0 : W& B) C) ~% Y# l1 P2 T- S
MOV A,#80H ;最高位灯先亮 % T7 T  u$ e/ z; y: U2 M* }
CLR P1.0 ;关闭并行输出(避象传输过程中,各LED的"暗红"现象): Z: o! s" Q0 m7 Y, D5 r7 ]% A6 z& Z
OUT0: MOV SBUF,A ;开始串行输出 3 G* r# e1 ~0 F2 _) V! G
OUT1: JNB TI,OUT1 ;输出完否
% W) m' L# W2 u  ECLR TI ;完了,清TI标志,以备下次发送
2 Y6 G1 {& L. E0 m5 xSETB P1.0 ;打开并行口输出 ) f$ T5 R* X7 h4 H" A- w  x3 |
ACALL DELAY ;延时一段时间 , G7 ^* Z  {' w; B& y1 E7 s
RR A ;循环右移
4 f- Z' X! b/ ~) W# U! KCLR P1.0 ;关闭并行输出
$ [0 u: A6 X. c( X1 H7 n: @9 \' @1 YJMP OUT0 ;循环
- o% ~" W1 p" Y6 J( n说明:DELAY延时子程序能用前面我们讲P1口流水灯时用的延时子程序,这里就不给出了。
* W% m& ]% z# U% X4 `3 i$ w2 Q二、串行口异步通信, {2 x3 W4 e7 f, M7 g
org 0000H
) S- v/ k2 M3 QAJMP START
! b( ~6 O& M: Z1 BORG 30H
1 G+ l: S$ A) n+ b9 h3 T& RSTART: 0 \' h/ f& d; S" v2 a. @
mov SP,#5fh ;+ H1 u0 ?5 Y0 J) T: a* A. v3 G/ J" A
mov TMOD,#20h ;T1: 工作模式28 N2 J$ K# D: [( a
mov PCON,#80h ;SMOD=1
" ]$ g+ _  T6 \# Wmov TH1,#0FDH ;初始化波特率(参见表)
# I0 a9 ]" l$ z1 G$ p! @" }mov SCON,#50h ;Standard UART settings6 U! D6 C" S9 N5 ~3 A
MOV R0,#0AAH ;准备送出的数
  v0 m* l4 V( A6 o/ E5 A. CSETB REN ;允许接收6 u. }4 F0 h1 i; {: |/ W
SETB TR1 ;T1开始工作+ ]2 R3 @( U2 B' m! w, W* K
WAIT:
' p! @& V' D% n6 GMOV A,R0 0 W: h) z& ~" U  g
CPL A; h! W. q- J% C: w5 ]9 B, @
MOV R0,A
9 A& s) }* u( T5 j  I* L# [MOV SBUF,A4 m& n% ^2 _* q" ]! X
LCALL DELAY ! q* p7 y% P# `
JBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1
! M! P; x! _2 o. i5 b6 h/ H  iAJMP WAIT
& J  q1 ?% v& U3 x' W( nWAIT1: JBC RI,READ ;如果RI等于1,则清RI并转READ
# Y) g; D) H  s$ K8 ]2 FAJMP WAIT1
( n, Q  d- f3 o, V) h* q6 k  bREAD:
0 X7 ]( s$ ]% X  c  D2 \- I' B* XMOV A,SBUF ;将取得的数送P1口# N  [% \" G! \: y" k+ F" b% [  Q
MOV P1,A
, P7 f1 D0 [8 _' Z5 \/ vLJMP WAIT) R' C8 Z( L& c3 \
DELAY: ;延时子程序
. b& `6 }4 \+ O0 N! _4 hMOV R7,#0ffH5 ?/ \* H! V) o) Y, L1 H  P- N
DJNZ R7,$2 I8 c0 W( P1 |* }( ^7 }4 ^1 C3 A
RET! L$ D1 j$ d+ S& V' l# }& B; ^
END" r. N5 m3 b+ u1 O  E1 B
    将程序编译通过,写入芯片,插入实验板,用通读电缆将实验板与主机的串行口相连就能实验了。上面的程序功能很简单,就是每隔一段时间向主机轮流送数55H和AAH,并把主机送去的数送到P1口。能在PC端用串行口精灵来做实验。串行口精灵在我主页上有下载。运行串行口精灵后,按主界面上的“设置参数”按钮进入“设置参数”对话框,按下面的参数进行设置。注意,我的机器上用的是串行口2,如果你不是串行口2,请自行更改串行口的设置。4 X9 G+ g/ f2 \

8 O  r( Q0 }2 ]   设置完后,按确定返回主界面,注意右边有一个下拉列表,应当选中“按16进制”。然后按“开始发送”、“开始接收”就能了。按此设置,实验板上应当有两只灯亮,6只灯灭。大家能自行更改设置参数中的发送字符如55,00,FF等等,观察灯的亮灭,并分析原因,也能在主界面上更改下拉列表中的“按16进制”为“按10进制”或“按ASCII字符”来观察现象,并仔细分析。这对于大家理解16进制、10进制、ASCII字符也是很有好处的。程序本身很简单,又有注释,这里就不详加说明了。
$ J8 W$ }; r; \4 |9 _三、上述程序的中断版本
2 g. @, K& {$ L+ _org 0000H; M  X/ ]  p, ]
AJMP START
1 k# ]: X6 x1 F3 Norg 0023h
8 A& {- f+ V8 b6 y: [) dAJMP SERIAL ;
& C+ y5 E  G4 _, l! v1 c' IORG 30H, A2 C5 E2 O, j, B
START:   w( z0 ]$ D( ?+ j6 v+ i; M
mov SP,#5fh ;! D6 h0 w- l6 D6 E+ Z' l
mov TMOD,#20h ;T1: 工作模式2
" C- w  `! U. [; d/ kmov PCON,#80h ;SMOD=19 K* ]( @$ m+ M3 Y* h; i5 g
mov TH1,#0FDH ;初始化波特率(参见表)
5 ?: h, O9 t9 D% ^5 }& gmov SCON,#50h ;Standard UART settings% R' W, N) \# b0 Z! |) _
MOV R0,#0AAH ;准备送出的数2 B* `+ v' i9 c
SETB REN ;允许接收
) J* d9 J2 X! g/ ^SETB TR1 ;T1开始工作
2 x. g, n0 O+ hSETB EA ;开总中断  B% e0 I* u& i: ^& F7 P
SETB ES ;开串行口中断
7 M- g* |1 F, N' }& BSJMP $ * C8 h! x" B" Q  Q2 ~) e. q
SERIAL:+ i) h# Z, r4 i- b( e/ m# L
MOV A,SBUF
/ b3 r; t4 x4 W5 HMOV P1,A& i4 a% ^. ~! {
CLR RI ! X; h1 N' s( [  U9 ~
RETI
! _3 h' \6 q! l, |9 O, jEND& K6 F% t7 S. |' R* E( d& p7 R! y
本程序没有写入发送程序,大家能自行添加。
# j( O2 ?1 a8 b; n8 Z& p1 S  f" x/ X, f2 }" H

该用户从未签到

2#
发表于 2022-8-8 13:09 | 只看该作者
优秀的东西,必须得支持。学习学习

该用户从未签到

3#
发表于 2022-8-8 15:08 | 只看该作者
好东西,学习学习!谢谢分享!

该用户从未签到

4#
发表于 2022-8-8 16:32 | 只看该作者
在学习的道路上遇到的困难还有前辈大佬帮忙解决,真心感动。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-9 04:22 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表