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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1.串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。
9 _" g0 x  V1 M2 ~$ }. |2 U7 P( P! Z+ ]; m
<单片机串行口通信程序设计硬件连接图>" H  l, N( J/ ^% U! K
   例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON就能了。
% U4 K) Y! ~! f- d+ L$ F-----------------单片机串行口通信程序设计列子--------------------------
) m* d8 @7 g+ t  K9 PORG 2000H
( `1 S7 y6 R- Z! {START: MOV SCON,#00H ;置串行口工作方式0 6 M/ W1 c* ^- f* E/ Q  e' o
MOV A,#80H ;最高位灯先亮
5 C1 b9 h9 j7 \+ aCLR P1.0 ;关闭并行输出(避象传输过程中,各LED的"暗红"现象)
" g+ R3 i; R) A6 x# Z* J" lOUT0: MOV SBUF,A ;开始串行输出 - k/ M1 k. @1 s% {. T0 k( O$ w
OUT1: JNB TI,OUT1 ;输出完否 ) b" g8 ^; i+ G* ], {
CLR TI ;完了,清TI标志,以备下次发送
+ Z0 q2 m: W7 x* K% NSETB P1.0 ;打开并行口输出
8 ?" {8 r* J0 C* J& g/ SACALL DELAY ;延时一段时间 ) ^8 ]7 I' Y6 E" N6 L% Y
RR A ;循环右移 0 ^% U/ T2 i9 a1 j3 f* I) Q, W
CLR P1.0 ;关闭并行输出 ( S0 [7 L+ [6 e8 q2 a8 |4 C  e; X
JMP OUT0 ;循环 " v. ]5 e5 v$ P( k. y& X7 `
说明:DELAY延时子程序能用前面我们讲P1口流水灯时用的延时子程序,这里就不给出了。
  t! `; H7 ?* ^, u8 S二、串行口异步通信; W: c6 _1 ?; q. }
org 0000H
9 w! L9 x! J) \) ~AJMP START7 r" t2 {$ \; s
ORG 30H
/ A# y$ n) ^- C9 eSTART: 2 r' i+ o/ I7 ~% k' q, l
mov SP,#5fh ;
6 T8 i9 Y# q7 t. e4 E# D6 bmov TMOD,#20h ;T1: 工作模式24 v. d: D/ {$ g8 o
mov PCON,#80h ;SMOD=16 E$ u' s  Z4 M$ m% [7 `9 K9 W9 b2 K
mov TH1,#0FDH ;初始化波特率(参见表)3 N) P6 ?# H; c+ z, H! H9 @) ?
mov SCON,#50h ;Standard UART settings
8 _1 M4 {2 ~" C% y# \1 qMOV R0,#0AAH ;准备送出的数& ^( b$ P8 Z1 k/ G; [3 e9 X
SETB REN ;允许接收, p, f( k: f" z# X, P
SETB TR1 ;T1开始工作" ^& y  x9 `' S# h1 B; J" b5 R
WAIT:
2 U8 f- U/ S% w4 HMOV A,R0
1 @. a) g5 ~9 z# _CPL A
% I5 f6 v/ z$ B: I% _4 @' v3 |2 dMOV R0,A  b8 D8 q6 U7 x$ i# T
MOV SBUF,A
! y3 b# |7 @0 T/ N2 kLCALL DELAY / l4 G" q$ @  O
JBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1( h+ ]3 q6 b; y/ ~/ k
AJMP WAIT2 O7 ?0 p- O& h) Z' F+ W' U$ D8 E
WAIT1: JBC RI,READ ;如果RI等于1,则清RI并转READ
( S) [9 u5 {7 h! K. @2 ~+ DAJMP WAIT1
8 ?4 r/ A# y3 f6 {9 Z$ `READ:( y/ v+ n1 I( C+ q
MOV A,SBUF ;将取得的数送P1口
& C% [6 l8 b$ T4 a& e/ C- L2 eMOV P1,A
. X* B. a) o/ n' [1 TLJMP WAIT
( D# a  c% n& S9 rDELAY: ;延时子程序  f  P$ v. P2 C# K: e; y8 Q& z( ?" q
MOV R7,#0ffH
6 v7 Q9 @/ V3 G6 v  t4 F  _1 ?  d* R! q# |DJNZ R7,$
. p; K  Q4 [) t3 \4 b1 dRET
# g1 X5 c& `6 UEND4 D+ c( o3 M) H9 Y
    将程序编译通过,写入芯片,插入实验板,用通读电缆将实验板与主机的串行口相连就能实验了。上面的程序功能很简单,就是每隔一段时间向主机轮流送数55H和AAH,并把主机送去的数送到P1口。能在PC端用串行口精灵来做实验。串行口精灵在我主页上有下载。运行串行口精灵后,按主界面上的“设置参数”按钮进入“设置参数”对话框,按下面的参数进行设置。注意,我的机器上用的是串行口2,如果你不是串行口2,请自行更改串行口的设置。
5 g# S& L" t  I' V, g
! e0 _# U. `& G4 w" ~   设置完后,按确定返回主界面,注意右边有一个下拉列表,应当选中“按16进制”。然后按“开始发送”、“开始接收”就能了。按此设置,实验板上应当有两只灯亮,6只灯灭。大家能自行更改设置参数中的发送字符如55,00,FF等等,观察灯的亮灭,并分析原因,也能在主界面上更改下拉列表中的“按16进制”为“按10进制”或“按ASCII字符”来观察现象,并仔细分析。这对于大家理解16进制、10进制、ASCII字符也是很有好处的。程序本身很简单,又有注释,这里就不详加说明了。
7 J4 Z9 G: ~% i$ y; I三、上述程序的中断版本
. s' g4 F7 p: f% B2 d0 x, qorg 0000H
$ T7 K8 f- g7 S" d$ z5 }7 F9 \AJMP START" e4 r  e& y( N/ s- P
org 0023h/ E" F( f9 H$ b
AJMP SERIAL ;
# c. D# v2 `( Q5 aORG 30H  N; A+ O4 E: S$ w1 u' M0 ^  j7 M6 F
START:
9 y+ y% |! M% u9 z" Fmov SP,#5fh ;+ ?. f8 G+ t9 w, A& l! R
mov TMOD,#20h ;T1: 工作模式2
  ^$ c$ ^2 K: R; E5 dmov PCON,#80h ;SMOD=1. _4 F: n3 P/ K% {7 }" P4 I
mov TH1,#0FDH ;初始化波特率(参见表)3 e7 C4 [9 O8 p0 t6 K- C5 {
mov SCON,#50h ;Standard UART settings, y/ X  Y" e) a0 _
MOV R0,#0AAH ;准备送出的数
9 M0 E  p$ N3 m/ O. B. B: MSETB REN ;允许接收! v8 V* S. W6 L& z" \0 ]$ u
SETB TR1 ;T1开始工作
1 T1 D+ g5 l" n) pSETB EA ;开总中断
' o& m3 p" _; h2 O9 }3 i# v9 HSETB ES ;开串行口中断. K! n1 b# W7 u
SJMP $
! K: m3 p2 P6 F9 G7 y3 |  d4 ASERIAL:) u. s7 V  b0 k, m" D+ O0 K
MOV A,SBUF
) @  |: l: ^+ |3 K& t/ C# E9 ZMOV P1,A* O. q, ~  _1 B3 m# ^
CLR RI 4 j$ t6 r1 k5 O; E
RETI
# {& Q/ g9 X0 k* i+ EEND
" t" V% G7 T9 b2 V% \. g本程序没有写入发送程序,大家能自行添加。; j  G  b- t$ R/ Z6 [% r
9 ]7 f" y1 n' p; h" s! L& 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-6-4 23:22 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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