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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1.串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。
- {1 a: Y1 h; k: J  J2 ?. C3 Q2 H( M- [1 ]4 H
<单片机串行口通信程序设计硬件连接图>1 f& [& s4 L6 m7 K9 A
   例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON就能了。
0 [$ ]; c8 u* d2 v4 Z0 T-----------------单片机串行口通信程序设计列子--------------------------* L9 @+ ^8 |# d, Y5 p9 ]2 k
ORG 2000H
" ?5 r2 X$ {$ O- b% L5 J2 `9 mSTART: MOV SCON,#00H ;置串行口工作方式0
1 ^7 F0 P# j& i7 X4 j/ T2 jMOV A,#80H ;最高位灯先亮 . L) _% M8 `& \# R* Y
CLR P1.0 ;关闭并行输出(避象传输过程中,各LED的"暗红"现象)/ R9 T# i3 P& a8 \, {8 V
OUT0: MOV SBUF,A ;开始串行输出
+ d  s0 Z' ~. j! Z, _+ m/ DOUT1: JNB TI,OUT1 ;输出完否
+ m4 g; ^# e& }# P2 bCLR TI ;完了,清TI标志,以备下次发送
3 e9 ]1 k+ H: E6 WSETB P1.0 ;打开并行口输出 % p% x, @* ?0 S3 m' Z
ACALL DELAY ;延时一段时间
2 q2 u; h- u% l# P- [+ IRR A ;循环右移 ( o: X7 n+ M: q% p: T
CLR P1.0 ;关闭并行输出 * G8 `! x( `" k8 ~  r- R) c+ X
JMP OUT0 ;循环
5 t" d9 {, Q5 p' p( }6 R7 |$ Q说明:DELAY延时子程序能用前面我们讲P1口流水灯时用的延时子程序,这里就不给出了。
' u' _! W& n- ^; X7 V$ |# h二、串行口异步通信
4 H7 o% A5 Y9 s3 G" z+ j8 b  Xorg 0000H$ v# w: ?6 D- J1 u7 g$ g
AJMP START
  ^$ J# @) U/ \( m- j7 U1 N/ eORG 30H
/ X0 J8 o! Q% v( x( N) ]START: / c' g4 j+ {4 R* w! }% ~& T4 o
mov SP,#5fh ;, c4 r) x+ L9 I7 i% ^: e3 P
mov TMOD,#20h ;T1: 工作模式2
, |8 b6 F- O# H, imov PCON,#80h ;SMOD=1
+ P/ }6 \; ~; p  A; Umov TH1,#0FDH ;初始化波特率(参见表)$ q/ w3 I! o1 }. b
mov SCON,#50h ;Standard UART settings
: V$ C5 k  [' H3 ]MOV R0,#0AAH ;准备送出的数
7 u2 z9 O) i3 U9 iSETB REN ;允许接收
5 E% n3 r# p$ E& HSETB TR1 ;T1开始工作
3 A# [1 [4 }6 p* q* O/ u1 R1 [WAIT:7 J8 a# J* V1 r2 z! Y
MOV A,R0 % `' @' p' h% U* M( u
CPL A
- m! u& u% w! B6 YMOV R0,A# j. }8 V: R5 t$ W3 |$ y2 j
MOV SBUF,A
: T- f- b  C8 f9 y2 J& L2 Y) mLCALL DELAY
; F$ Y# p0 Y# V8 g7 J1 A! q! nJBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1
0 Z, ~& z. Z# F( k6 GAJMP WAIT
$ b# n' [) T2 ]9 TWAIT1: JBC RI,READ ;如果RI等于1,则清RI并转READ) \" R; `/ B1 O) {$ f3 t. a
AJMP WAIT1; v! I; t( x$ i  x5 T% h0 g
READ:
! @* ?, }5 h2 T- k/ d& a( jMOV A,SBUF ;将取得的数送P1口
5 t9 L( m! P5 m8 P% M, N# U- [MOV P1,A
, c& T1 c: L+ u; C+ Q* ~( `! mLJMP WAIT
" G+ q2 |0 b$ f) kDELAY: ;延时子程序7 d( L! O. d1 J0 r+ J. `9 _
MOV R7,#0ffH" I/ N0 ?+ H" A' U6 U9 V1 r+ b
DJNZ R7,$
7 g( V. \1 P/ HRET
' f; I- h# H) D! r) [9 j. {" {END8 x3 d& M$ `0 l) b( o# q
    将程序编译通过,写入芯片,插入实验板,用通读电缆将实验板与主机的串行口相连就能实验了。上面的程序功能很简单,就是每隔一段时间向主机轮流送数55H和AAH,并把主机送去的数送到P1口。能在PC端用串行口精灵来做实验。串行口精灵在我主页上有下载。运行串行口精灵后,按主界面上的“设置参数”按钮进入“设置参数”对话框,按下面的参数进行设置。注意,我的机器上用的是串行口2,如果你不是串行口2,请自行更改串行口的设置。
0 W1 k1 g" c1 Q, ]2 \9 k3 z. _; W+ A& Y+ c' W. N0 k
   设置完后,按确定返回主界面,注意右边有一个下拉列表,应当选中“按16进制”。然后按“开始发送”、“开始接收”就能了。按此设置,实验板上应当有两只灯亮,6只灯灭。大家能自行更改设置参数中的发送字符如55,00,FF等等,观察灯的亮灭,并分析原因,也能在主界面上更改下拉列表中的“按16进制”为“按10进制”或“按ASCII字符”来观察现象,并仔细分析。这对于大家理解16进制、10进制、ASCII字符也是很有好处的。程序本身很简单,又有注释,这里就不详加说明了。
! U' n. n  _4 b9 M/ ^" X; `三、上述程序的中断版本
4 s5 g* j. E7 s& R7 ]org 0000H& P' d  V: [* @1 O* n
AJMP START
$ R9 \1 D5 R7 U* W% o4 V0 I0 rorg 0023h
0 }9 v3 ^- F7 [/ \# HAJMP SERIAL ;, ]% C$ Y$ B8 x' }! T# A4 S7 L( H
ORG 30H
3 A0 ^0 ]# o  C5 u! ?- G, YSTART: , h6 J* C9 K( J/ M4 M; Z
mov SP,#5fh ;% H3 _$ B  c. X" A
mov TMOD,#20h ;T1: 工作模式2
4 E% Y7 c- T% Emov PCON,#80h ;SMOD=1
8 V  t6 }* n0 w! S- Wmov TH1,#0FDH ;初始化波特率(参见表)7 l% q* b0 r/ b4 o
mov SCON,#50h ;Standard UART settings+ C  Y) k) a6 V# U
MOV R0,#0AAH ;准备送出的数9 s2 {( n/ r. ]0 s+ d
SETB REN ;允许接收% ^9 W5 b* O2 F& V3 K8 C# {
SETB TR1 ;T1开始工作  A6 e) k! v+ G$ Y
SETB EA ;开总中断2 T5 @- T& A$ z. B  X9 l+ M
SETB ES ;开串行口中断
, |& M3 w$ Z3 S- F* FSJMP $
1 R3 i( t' @3 V5 z/ J5 b9 p8 RSERIAL:$ L5 l( v+ N' W; s
MOV A,SBUF ) M2 h# l+ ~  p& y; h. k, \
MOV P1,A
+ b% R( i, n, u! e8 l- xCLR RI
; u% y" [  {# X& c2 Y: ERETI5 c! x% a$ [0 A( u4 {4 m0 S& D* p
END
4 ?6 \4 r- c1 J  L) K6 Q' t6 u) F: w本程序没有写入发送程序,大家能自行添加。
* Z1 y4 p& M* G: R* J' K- Y* q; X8 i! D" U0 z! |5 `  g# g

该用户从未签到

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-9-11 04:34 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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