串行口的应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、实例演练5:Mode3

连接电路
采用模式3
流程图

START:
ORG MOV
LOOP:
;程序从0地址开始 ;将Timer 1设置为mode 2 ;作为波特率产生 ANL PCON, #7FH ;将SMOD设置为0 MOV TH1, #FDH ;波特率设置为9600bps SETB TR1 ;启动Timer 1 MOV SCON, #11010000B ;设置为mode 3、REN=1、RI=0 ;====b7===b6===b5===b4===b3===b2===b1===b0=== ;===SM0==SM1==SM2==REN==TB8==RB8===TI===RI=== ;=====1====1====0====1====0====0====0====0=== MOV P2, #0FFH ;将P2设置为输入功能 MOV A, P2 ;读取拨码开关状态


MCS-51的串行口(mode 0接收)
MCS-51的串行口(mode 0传输)
MCS-51的串行口结构
MCS-51的串行口(mode 1传输)
MCS-51的串行口(mode 2/3数据格式

SCON串行口控制寄存器
串行口的工作方式
SM1 SM0 mode 功 能 简 介 波 特 率
0
0
0
移位寄存器
OSC/12
0
1 1
1
0 1
1
2 3
8位UART
9位UART 9位UART
可变
OSC/32或OSC/64 可变
8051串行口波特率设置


Mode 0:在mode 0下,波特率固定为OSC/12, 不必设置!完全由系统的时钟而定,非软件设计 所能改变的。 Mode 2:
2SMOD 波特率 OSC 64
认识串行转并行的IC 74164



Clear:清除引脚,高有效 A、B:串行数据输入引脚 Clock:时钟输入引脚,上升沿 触 发型

QA~QH:并行数据输出引脚
74164时序
认识并行转串行的IC 74165



Shift/load:数据加载与移位控 制引脚,0为并行数据加载,1 为移位控制 Clock inhibit:时钟脉冲禁止 引脚,0为输出引脚随时钟脉冲 进行变化移位式串行输出 Clock:时钟输入引脚,上升沿 触 发型 A~H:并行数据输入引脚 Serial input:串行输入引脚, 0为执行并行数据输入串行数据 输出的转换 Out:串行数据输出引脚
二、实例演练2 :移位式数据串行输出

连接电路
指拨开关状态经串行输出到164,再并行输出。

流程图
延时
START:
LOOP:
DELAY: D1:
ORG 0 ;程序从0地址开始 MOV SCON, #0H ;设置为mode 0 ;====b7===b6===b5===b4===b3===b2===b1===b0=== ;===SM0==SM1==SM2==REN==TB8==RB8===TI===RI=== ;=====0====0====0====0====0====0====0====0=== MOV P2, #0FFH ;将P2设置为输入功能 MOV A, P2 ;读取拨码开关状态 MOV SBUF, A ;将ACC的内容复制到SBUF JNB TI, $ ;等待TI串行输出中断 CLR TI ;清除TI ACALL DELAY JMP LOOP ;跳至LOOP形成一个循环 MOV R7, #200 MOV R6, #250 DJNZ R6, $ DJNZ R7, D1 RET END
DELAY: D1:
CLR RI MOV P0, SBUF CLR TI ACALL DELAY JMP LOOP MOV R7, #200 MOV R6, #250 DJNZ R6, $ DJNZ R7, D1 RET END
;清除RI ;将所接收的数据输出到Port 0 ;清除TI ;跳至LOOP形成一个循环
二、实例演练4:Mode2

连接电路
采用模式2

流程图
延时
START:
LOOP:
ORG 0 ;程序从0地址开始 ORL PCON, #80H ;将SMOD设置为1 MOV SCON, #10010000B ;设置为mode 2、REN=1、RI=0 ;====b7===b6===b5===b4===b3===b2===b1===b0=== ;===SM0==SM1==SM2==REN==TB8==RB8===TI===RI=== ;=====1====0====0====1====0====0====0====0=== MOV P2, #0FFH ;将P2设定为输入功能 MOV A, P2 ;读取指拨开关状态 MOV SBUF, A ;将ACC的内容复制到SBUF JNB RI, $ ;检查是否完成接收? ;完成接收,则RI串行输入中断 CLR RI ;清除RI MOV P0, SBUF ;将所接收的数据输出到Port 0 CLR TI ;清除TI ACALL DELAY JMP LOOP ;跳至LOOP形成一个循环 END
本章内容


硬件部分:介绍8051串行口、串行数据转并行 数据IC、并行数据转串行数据IC,以及MAX232 等。 程序与实例部分:Mode 0串行口的接收与发送、 其它工作方式的应用、两个8051最小系统的通 信应用等。
一、8051串行口
8051的数据传送方式


并行传输:一次传输8bit,传输线多,线路阻抗匹 配、干扰多,不适于长距离传输。 串行传输:只需两条线,适于长距离传输数据。 串行传输数据分单工和双工,双工又分为半双工 和全双工。
二、实例演练3:Mode1

连接电路
指拨开关状态控制灯的亮灭

流程图
延时
ORG START: MOV
0 TMOD, #20H
;程序从0地址开始
LOOP:
;将Timer 1设置mode 2 ;做为波特率产生 ANL PCON, #7FH ;将SMOD设定为0 MOV TH1, #0FDH ;波特率设置为9600bps SETB TR1 ;启动Timer 1 MOV SCON, #01010000B;设置为mode 1、REN=1、RI=0 ;====b7===b6===b5===b4===b3===b2===b1===b0=== ;===SM0==SM1==SM2==REN==TB8==RB8===TI===RI=== ;=====0====1====0====1====0====0====0====0=== MOV P2, #0FFH ;将P2设置为输入功能 MOV A, P2 ;读取拨码开关状态 MOV SBUF, A ;将ACC的内容复制到SBUF JNB RI, $ ;检查是否完成接收? ;完成接收,则RI串行输入中断
串行口4种工作模式



mode 0:8051为主机,其波特率为8051系统 时钟的12分之1,即OSC/12,以12MHz的系统为 例,则其波特率为1M bps。 mode 1或mode 3:此方式为可变波特率的 串行口,主要是为了配合所连接系统的时序, 以达到不同系统的数据传输。 mode 2:此方式提供两种不同波特率的选择, 即OSC/32或OSC/64,其中的OSC为8051系统时 钟。

Mode
1或Mode
3:
2SMOD OSC 波特率 32 12 (256- T H1 )
认识MAX232
RS232电路连接
多机数据通信
二、实例演练1:移位式数据串行输入

连接电路
指拨开关状态经165串行输入51,再送到P0口。

流程图
0
延时
ORG 0 ;程序从0地址开始 START: MOV SCON, #10H ;设置为 mode 0、REN=1、RI=1 ;====b7===b6===b5===b4===b3===b2===b1===b0=== ;===SM0==SM1==SM2==REN==TB8==RB8===TI===RI=== ;=====0====0====0====1====0====0====0====0=== LOOP: CLR P3.2 ;输出负脉冲 NOP ;让74165载入 NOP ; DIP SW并行数据 SETB P3.2 JNB RI, $ ;等待RI串行输入中断 MOV P0, SBUF;直到将串行输入数据输出到P0 ACALL DELAY JMP LOOP ;跳至LOOP形成一个循环 DELAY: MOV R7, #200 D1: MOV R6, #250 DJNZ R6, $ DJNZ R7, D1 RET END
DELAY: D1:
思考题

PC机和8051单片机怎样串行传输数据。 若希望指拨开关S1、S3、S5都on,要求前四 个LED亮; S2或S4或S6开关on,要求后四个 LED亮;S7及S8开关on,要求所有的LED亮。 程序应如何编写.
0 TMOD, #20H
MOV JNB CLR MOV CLR ACALL JMP MOV MOVБайду номын сангаасDJNZ DJNZ RET END
SBUF, A RI, $ RI P0, SBUF TI DELAY LOOP R7, #200 R6, #250 R6, $ R7, D1
;将ACC的内容复制到SBUF ;检查是否完成接收? ;完成接收,则RI串行输入中断 ;清除RI ;将所接收的数据输出到Port 0 ;清除TI ;跳至LOOP形成一个循环
相关文档
最新文档