华工MCU与DSP专题四.docx
- 文档编号:7433209
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:29
- 大小:964.91KB
华工MCU与DSP专题四.docx
《华工MCU与DSP专题四.docx》由会员分享,可在线阅读,更多相关《华工MCU与DSP专题四.docx(29页珍藏版)》请在冰豆网上搜索。
华工MCU与DSP专题四
专题四.串行通信
一.串行通信简况
1.串行通信优缺点
优点:
只需一对传输线,传输距离远。
缺点:
传输速度比并行通信慢。
2.异步通信
数据以相同的帧格式传送。
(4-1)
起始位(低电平)
数据位(低位在前)
奇偶校验位(0/1)
停止位(高电平)
空闲位(高电平)
起始位的确定过程:
用16倍波特率的机内时钟,使每一位产生16个测试脉冲,在上升沿采样“接收线RXD”,在连续的第9个测试脉冲(或第7、8、9个脉冲,三中取
二)采样到仍为0,则可认为是一帧的起点。
如下图(4-2)所示:
续后9+16个测试脉冲采样到的是数据位(数据位中间点)。
技术上不要求时钟严格同步。
3.典型帧格式
4-3
二.MCS51单片机的串行接口
属全双工串行口,4种工作方式,一个共用的收/发缓冲器SBUF,两个特殊功能寄存器SCON和PCON。
1.数据缓冲寄存器SBUF
收/发共用地址99H,可位寻址。
如:
MOVSBUF,A;可完成一帧数据传送。
2.串行口控制寄存器SCON
SM0,SM1:
串行口工作方式选择。
SM2:
允许方式2和3多机通信控制。
(=1通信地址;=0通信数据)
REN:
允许串行接收控制位。
(=1允许接收;=0禁止接收)
TB8:
方式2和3作发送第9位数据。
RB8:
方式2和3接受到第9位数据。
TI:
发送中断标志(硬件置,软件清)
RI:
接收中断标志(硬件置,软件清)
*系统复位时SCON全部位清零。
3.
串行口特殊功能寄存器PCON
SMOD:
波特率选择位,为1时加倍。
4.串行口的工作方式(四种)
(1)方式0:
SM0=0,SM1=0
同步移位寄存器方式,扩展I/O口用。
原理:
以RXD脚完成收/发;
以TXD脚发出同步信号;
每个字符8位,收/发速率固定,
(fosc/12)。
例:
串行口扩展的显示器接口
74LS164:
4-6
串行输入、并行输出移位寄存器,每扩展一个芯片,则多一位显示器。
工作过程:
CP:
靠上升沿移位,
CP=0、/CR=1时数据保持,
/CR:
低电平使74LS164输出清零。
程序段例:
MOVA,#0FFH;8字段码
MOVSBUF,A;送至显示
STT:
JNBTI,STT;等发送完
CLRTI;清发送标志
ACALLDLY;延时保持显示
┇
*74LS165:
并行输入、串行输出移位寄存器。
(2)方式1:
SM0=0,SM1=1
10位异步通信,波特率可变。
帧格式:
1位起始位,
8位数据(低位在先),
1位停止位。
或ASCII:
1位起始位,
7位数据位,
1位奇偶校验位,
1位停止位。
(3)方式2:
SM0=1,SM1=0
11位异步通信,波特率固定。
(fosc/64或fosc/32)
帧格式:
1位起始位,
8位数据,
第9位数据(奇偶校验位),
1位停止位。
适用于:
机器码,16进制数,显示等通信。
(4)方式3:
SM0=1,SM1=1
11位异步通信,波特率可变(常用),取决于定时器溢出率。
帧格式同方式2。
5.异步通信中的奇偶校验位
常指数据第9位(方式2和3)。
发送时由SCON中的TB8提供。
接收时从SCON中的RB8取得。
*方式1中RB8取得的是停止位。
方式0中不用此位。
(1)奇偶标志(特征校验位)
PSW.0简写P,属累加器A的奇偶标志(自动形成,规则固定)。
如:
A中1的个数为偶,则P=0
A中1的个数为奇,则P=1
(2)偶校验
A发送字节中P=0,补第9位TB8=0
A发送字节中P=1,补第9位TB8=1
如:
A=00000011,P=0,TB8=0
A=00001011,P=1,TB8=1
(3)奇校验
A发送字节中P=0,补第9位TB8=1
A发送字节中P=1,补第9位TB8=0
如:
A=00000101,P=0,TB8=1
A=00000111,P=1,TB8=0
三.收发时序(方式2和3)
1.串行口功能示意图(4-7)
*方式1和3波特率与定时器1溢出率相关。
方式2波特率固定。
2.方式2和3的发送时序
4-8
(1)发送起始于执行写SBUF指令(实际是同步于机器周期的S1P1)。
(2)发送开始的同时,/SEND低有效,向TXD送出起始位。
(3)每隔一个TX时钟周期产生一个移位脉冲,TXD输出一位数据。
(4)当9位数据输出后,/SEND失效,置位TI标志(可引发中断),并置TXD=1作为停止位。
3.方式2和3的接收时序
4-9
(1)接收起始于REN=1之后,检验有效起始位(采样三中取二)。
(2)起始位有效,则每个RX时钟周期接收一位数据。
(3)第9位数据收满后,若下述两条件同时满足:
RI=0或RI=0
SM2=0SM2=1且第9位=1
(第9位是数据)(表示是地址帧)
则数据送SBUF和RB8,并在停止位中间置位RI标志(可引发中断)
(4)上述条件不满足,接受无效,重新检测RXD信号。
4.关于SCON中的SM2
(多机通信控制位)
(1)方式2、3中:
SM2=1时,接收到第9位RB8=0,因不是地址帧,RI不启动。
(2)方式1中:
SM2=1时,未收到有效停止位,RI不启动。
(3)方式0中:
永远SM2=0。
四.串行通信波特率设置
1.影响波特率的因素
(1)系统振荡频率fosc(6MHZ为例)。
(2)电源控制寄存器PCON(SMOD位)。
(3)定时器T1的溢出率设置。
2.定时器T1溢出计算
(1)T1溢出率=定时器溢出次数/秒。
(2)定时模式选择:
T1实际只有0、1、2三种模式(模式3时T1停止计数),选模式2。
(3)T1模式2:
八位自动重装,求预置值X
(28–X)×12/fosc→溢出一次的时间
溢出率(T1)=fosc/12/(28-X)次/秒
例:
X=F3H,(6MHZ)
溢出率(T1)=6×106/(28-F3H)/12
≈38461.5次/秒
3.波特率的设置(方式1、3)
波特率=(2SMOD/32)×(定时器T1溢出率)
=(2SMOD/32)×fosc/12/(28–X)
实际上是给出波特率,求预置值X:
X=256-2SMOD×fosc/(波特×32×12)
例:
fosc=6MHZ,SMOD=1,波特率2400
X=256-21×6×106/(2400×32×12)
=242.98≈243→F3H
4.串行口初始化举例
包括T1模式及启动,串行口方式,波特率设置等。
INT:
MOVTMOD,#20H
;定时器T1模式2,计数方式
MOVTH1,#0F3H
;8位自动重装,预置时间常数
MOVTL1,#0F3H
MOVPCON,#80H
;选SMOD=1,波特率加倍
MOVSCON,#0D0H
;串行口方式3
SETTR1
;启动定时器T1
┇
*若采用中断方式,初始化开头要设置串行口中断服务程序入口地址。
5.常用波特率及其它设置推荐
4-10
适用:
6MHZ或12MHZ,方式1或3
五.奇偶校验位TB8的编程操作
1.“补偶”发送
MOVA,@Ri;待发送的字节取入A
MOVC,P;奇偶标志送入进位位
MOVTB8,C;装入第9位TB8中
MOVSBUF,A;发送
2.“补奇”发送
MOVA,@Ri;待发送的字节取入A
MOVC,P;奇偶标志送入进位位
CPLC;取反,补奇
MOVTB8,C;装入第9位TB8中
MOVSBUF,A;发送
六.奇偶校验位RB8的编程操作
1.“偶校验”接收
编程依据:
读取SBUF数据后,比较P和RB8,若状态相异,表示出错。
MOVA,SBUF
MOVC,P;奇偶标志P取入C
JCJS1;属1,跳转判断
ORLC,RB8;标志与校验位比较
JC,ERR;状态相异出错处理
AJMPOK
JS1:
ANLC,RB8;标志与校验位比较
JC,OK
AJMPERR;状态相异出错处理
OK:
┇;正确运行分支
ERR:
┇;出错处理分支
2.“奇校验”接收
编程依据:
读取SBUF数据后,比较P和RB8,若状态相同,表示出错。
MOVA,SBUF
MOVC,P;奇偶标志P取入C
JCJS2;属1,跳转判断
ORLC,RB8;标志与校验位比较
JNC,ERR;状态相同出错处理
AJMPOK
JS2:
ANLC,RB8;标志与校验位比较
JNC,OK
AJMPERR;状态相同出错处理
OK:
┇;正确运行分支
ERR:
┇;出错处理分支
七.串行口的收/发操作
1.串行发送(连续发送)
原则:
查发送标志位TI置位后,才发后续帧。
┇
MOVSBUF,A;发出一帧数据
LOP:
MOVC,TI;查标志
JNCLOP;标志未置位等待
CLRTI;清标志
INCR0;指下一帧数据单元
┇
2.串行接收
原则:
硬件置位RI,表示接收SBUF满,清标志RI后才读取数据。
┇
LOP:
JNBRI,LOP;标志为1则收齐
CLRRI;清标志
MOVA,SBUF;取走数据
┇
3.不继续接收
只需清REN=0
4.自收自发
串行口或开发机的收/发线短接状态
(TXD→RXD)
5.收发控制
采用查询标志,或采用中断方式。
八.MCS51单片机的多机通信
讨论主机与从机之间的串行通信
4-11
原理:
利用多机通信控制位SM2状态
若:
SM2=1(表示通信地址),
接收到RB8=1,才引发RI=1
若:
SM2=0(表示通信数据),
接收到RB8=0或1,均RI=1
1.从机引发接收中断RI=1三条件
(1)设置SM2=1(待命状态)
(2)设置REN=1(允许接收状态)
(3)接收到RB8=1(第9位地址信息)
2.主从机通信协议
(1)帧格式11位,异步方式2或3。
(2)分配从机地址(站号)。
(3)主机先发地址帧(第9位=1),然后发数据字节数目和各个数据(第9位均=0)。
3.通信过程
(1)主机先发地址帧,中断所有从机。
(2)从机在各自中断服务程序中读取地址(站号),符合自身站号的从机改SM2=0,则其后主机发来的各帧数据均能使从机RI=1,引发中断。
(3)其它地址不符的从机,仍保持SM2=1,对数据帧不会产生中断响应。
(4)地址符合的从机,在收齐规定的数据个数后,应置SM2=1,以恢复待命状态。
九.串行通信编程举例
1a.主机串行方式2发送
波特率固定,只发不收,用中断控制
ORG0000H
LJMPMAIN
ORG0023H;串行中断入口
LJMPINTS
ORG0030H
MAIN:
MOVSP,#60H
MOVPCON,#80H;波特率加倍
MOVSCON,#80H
;方式2,主机只发不收
MOVDPTR,#ADDR;数据存放地址
MOVR7,#0AH;数据字节个数
MOVR2,#ADDR1;从机地址
SETBEA;允许总中断
SETBES;开串行口中断
SETBTB8;第9位置1,地址标志
MOVA,R2;装入站号
MOVSBUF,A;发送站号
AJMP$;等待中断
INTS:
CLRTI;中服程序,清除标志
CLRTB8;第9位清零,数据标志
MOVXA,@DPTR;外RAM取数
MOVSBUF,A;发送数据
INCDPTR;指向下一数据
DJNZR7,LOOP;查字节数目
CLRES;发送完关中断
LOOP:
RETI;中断返回
1b.从机串行方式2接收
波特率固定,采用中断控制
ORG0000H
LJMPMAIN
ORG0023H;串行中断入口
LJMPINTR
ORG0030H
MAIN:
MOVPCON,#80H;波特率加倍
MOVSCON,#0B0H;从机待命
MOVDPTR,#ADDR;存数地址
MOVR0,#0AH;数据个数
MOVIE,#90H;串行口开中断
AJMP$;等待中断接收
INTR:
CLRRI;中服程序,清接收标志
MOVA,SBUF;收取数据
MOVC,RB8;读取第9位
JNCKEEP;0为收到数据
XRLA,ADDR1;判断站号
JZLOP1;属自身站号跳转
AJMPLOP2;站号不符,中断返回
LOP1:
CLRSM2;作接收数据准备
AJMPLOP2;中断返回等待接收
KEEP:
MOVX@DPTR,A;数据外部存放
INCDPTR;指向下一数据
DJNZR0,LOP2;未收齐,继续
SETBSM2;收齐,置从机待命
LOP2:
RETI;中断返回
2a.主机串行方式1查询发送
波特率1200(6MHZ),用奇校验。
要求:
把30H~39H中10个ASCII码以查询方式向从机发出,高位用作校验位,有错便向响应单元送0FFH。
ORG0000H
MOVSP,#60H
MOVPCON,#80H;波特率加倍
MOVTMOD,#20H
;定时器1,模式2(自动重装)
MOVTH1,#0E6H;定时常数
MOVTL1,#0E6H
MOVSCON,#40H
;方式1,8位(包奇校验),禁止接收
SETBTR1;启动定时器
MOVR0,#30H;数据首址
MOVR7,#0AH;数据个数
LOOP:
MOVA,@R0
;取数据(ASCII码,高位为0)
MOVC,P
CPLC;补奇
MOVACC.7,C;送校验位于高位
MOVSBUF,A;发送
JNBTI,$;查询发送标志
CLRTI;清发送标志
INCR0;指向下一数据
DJNZR7,LOOP;字节未发完,继续
AJMP$
2b.从机串行方式1查询接收
波特率1200(6MHZ),用奇校验。
ORG0000H
MOVSP,#60H
MOVPCON,#80H;波特率加倍
MOVTMOD,#20H
;定时器1,模式2(自动重装)
MOVTH1,#0E6H;定时常数
MOVTL1,#0E6H
MOVR0,#30H;数据首址
MOVR7,#0AH;数据个数
MOVSCON,#50H
;方式1,REN=1允许接收
SETBTR1;启动定时器
LOOP:
JNBRI,$;查询至收齐一帧
CLRRI
MOVA,SBUF;读取数据
MOVC,ACC.7;分离最高位
ANLA,#7FH;屏蔽最高位
JNCRAD1;奇校验,C≠1跳转
JBP,ERR;P=1出错
AJMPLOP;正确,取数
RAD1:
JBP,LOP;正确,取数
AJMPERR;P=0出错
LOP:
MOV@R0,A;存数据
LOP1:
INCR0;指向下一数据
DJNZR7,LOOP;未收完,继续
AJMPOUT;接收完
ERR:
MOV@R0,#0FFH;出错赋标志
AJMPLOP1;循环
OUT:
┇;完成
串行通信方式归纳
模式1SM0SM1SM2
(波特可变)0108位数据停止位
或0107位,校验停止位
模式2,3SM0SM1SM2数据N0.9
(双机通信)1008校验停止位
1108校验停止位
模式2,3(波特前者固定,后者可变)
(多机通信)
发方2:
SM0SM1SM2数据N0.9
101/081地址停止位
0数据
发方3:
111/081地址停止位
0数据
收方2:
SM0SM1SM2数据N0.9
10181地址停止位
10080数据
收方3:
11181地址停止位
11080数据
*多机通信的校验:
1.采取“校验和”
2.采用“握手”方式
多机通信归纳
1.主机:
SM2=1/0时,
发地址帧给从机(TB8=1),
然后发数据帧(TB8=0)
2.从机:
SM2=1时,
收主机地址帧后(RB8=1),
均产生中断,各自比较地址
3.地址符合的从机,置SM2=0
可收后续数据帧(RB8=0)
4.地址不符的从机,保持SM2=1
不理采后续数据帧.
总结:
从机接收的中断条件为
SM2=1且RB8=1(只收地址帧)
SM2=0且RB8=0(只收数据帧)
十.IBM微机的异步通信适配器8250
*(RS232C接口包括:
8250核心,附加I/O地址译码,电平变换电路)
1.8250寄存器的口地址
10个寄存器仅用7个I/O地址,有共用地址情况。
例如:
3F8H,3F9H为共用地址。
4-12
如下操作用以区分“共用地址”:
*线控制寄存器(3FBH),D7=0的编址。
+线控制寄存器(3FBH),D7=1的编址。
因此,初始化时应首先把(3FBH)的D7置入1,以设置波特率。
ο者,初始化时用OUT指令一次设定初值,以后很少更新。
△者,在通信传输过程中使用。
2.8250的初始化
(1)波特率设置
1)
向线控制寄存器(3FBH)置入D7=1的任意字节。
(4-13)
2)预置波特率分频器3F8H,3F9H。
(2)对线控制寄存器初始化
在波特率设置之后进行,即3FBH的D7=0,设置的帧格式如(4-14):
4-15
(3)对MODEM控制寄存器初始化(4-16)
MODEM的结构成份:
接收线路信号检测
用户定义输出1和2
4-17
(4)对中断允许寄存器初始化
4种中断功能,需结合Modem控制寄存器(3FCH)的D3=1来编程。
4-18
3.收发通信编程
(1)接收操作:
对接收数据寄存器3F8H执行IN指令,数据送至CPU(8088)的AL寄存器。
(2)发送操作:
对发送保持寄存器3F8H执行OUT指令,送出CPU(8088)中AL寄存器的数据。
(3)由状态信息实现控制功能
1)线状态寄存器提供如下信息
4-19
接收时:
测D0=1,用IN指令读接收数据寄存器3F8H的数据入CPU,使D0=0。
发送时:
测D5=1,用OUT指令向发送保持寄存器3F8H输出代码,然后使D5=0。
2)Modem状态寄存器的状态信息
在接有Modem状态下:
读入或发送字符之前,先对状态进行测试。
(4)编程举例
要求:
初始化8250为波特率2400,8个数据位,1个停止位,无校验,查询方式收发。
┇
MOVDX,3FBH;线控制寄存器D7=1
MOVAL,80H
OUTDX,AL;D7=1送到3FBH中
MOVDX,3F8H;波特率分配器低位
MOVAL,30H
OUTDX,AL
MOVDX,3F9H;波特率分配器高位
MOVAL,0
OUTDX,AL
MOVDX,3FBH;8个数据位,1个
MOVAL,03H停止位,无校验
OUTDX,AL
MOVDX,3FCH;Moden控制信号,
MOVAL,03H外接方式
OUTDX,AL
MOVDX,3F9H;禁止四种中断
MOVAL,0
OUTDX,AL
FOR:
MOVDX,3FDH;查发送保持寄存器空
INAL,DX
TESTAL,20H;“与”测试真Z=1JZFOR;不空(Z=0)等待
┇;发送空,往下
4.PCDOS层I/O子程序的调用
调用均用INT21H指令(入口)。
调用前先在寄存器AH中置入功能码、入口参数或出口参数。
标准输入设备指键盘,标准输出设备指显示器。
例:
MOVAL,‘?
’
MOVDL,AL;字符编码送DL
MOVAH,02H;功能码
INT21H;显示所收字符
*上述调用显示出字符‘?
’。
5.PCBIOS层子程序的调用
可从INT10H到INT1CH指令(入口)。
功能码置入AH中,并说明入口参数和出口参数。
例:
MOVAL,‘?
’;字符编码送AL
MOVBX,0;页号(BH),前景色号(BL)
MOVAH,14;功能码
INT10H;显示字符‘?
’
*见《汇编语言教程》朱慧真编著,
国防工业出版社1988
6.MCS51与IBM微机电平转换接口
(1)
传统用:
4-20
MC1488,需正负12V供电。
输入TTL电平,输出RS-232C电平;
MC1489,用正5V供电。
输入RS-232C电平,输出TTL电平。
(2)现在用:
MAX232,单5V供电,实现上述双路功能。
4-21
*外配电容祥见附录MAXIMMAX232
7.收发程序例
(1)IBM微机发送“0~9”程序
FORE:
MOVDX,3FDH;线状态寄存器
INAL,DX
TESTAL,20H;发送保持寄存器空?
JZFORE;“与比较”Z=0不空,跳转
WAIT:
MOVAH,1;判键盘空?
INT16H;调BIOS层子程序
JZWAIT;“与比较”Z=0不空,跳转
MOVAH,0;读入键盘ASCII码
INT16H;调BIOS层子程序
MOVDL,AL;显示该字符
MOVAH,02H
INT21H;调DOS层子程序
SUBAL,30H;ASCII变为0~9
SENR:
MOVDX,3F8H;发送字符
OUTDX,AL
MOVAH,4CH;返回DOS
INT21H;调DOS层子程序
┇
(2)IBM微机接收“0~9”程序
┇
M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华工 MCU DSP 专题
![提示](https://static.bdocx.com/images/bang_tan.gif)