在双机通信中作为奇偶校验位,也可在多机通信中作为发送地址帧或数据帧的标志位。一般约定,发送地址帧时设置 TB8=1;发送数据帧时设置TB8=0。在方式0和方式1中,该位未用。
3,RB8 接收数据的第9位
在方式2、方式3中,RB8是接收的第9位数据,在多机通信中为地址、数据标志位;方式0中RB8未用;在方式1中,若SM2=0,则接收的停止位自动存入RB8中。
设fosc=6 MHz,试编写一段对串行口初始化程序,使之工作在方式1,波特率为1200 b/s;并用查询串行口状态的方式,读出接收缓冲器的数据并回送到发送缓冲器。
答:串行方式1波特率取决于T1溢出率,若设SMOD=1,T1工作在方式2,则T1的计数初值为:
X=256-(2/32)6000000/121200=230=0E6H ORG 0000H LJMP MAIN ORG 100H
MAIN: MOV SP, #60H
MOV TMOD, #20H ;设T1工作方式2 MOV TL1, #0E6H ;置T1计数初值 MOV TH1, #0E6H
CLR ET1 ;禁止T1中断 SETB TR1 ;启动T1
MOV SCON,#40H ;置串口方式1 MOV PCON,#00H ;置SMOD=0 CLR ES ;禁止串行中断
MOV A, SBUF ;读接收缓冲器 MOV SBUF, A ;回送到发送缓冲器 LP: JNB TI, LP ;等待一帧数据发送完 CLR TI ;清发送标志位
SJMP $
7.7 设晶振频率为11.0592 MHz,串行口工作在方式1,波特率为4800 b/s。写出用T1作为波特率发生器的方式字并计算T1的计数初值。
答:串行方式1波特率取决于T1溢出率,设SMOD=0, 即PCON=00H T1工作在定时方式2,则T1的计数初值为: X=256-(1/32)11059200/124800=250=0FAH
用T1作为波特率发生器的方式字 TMOD=20H,
7.8 为什么定时器T1用作串行口波特率发生器时,常选用工作方式2,若已知系统时钟频率和通信的波特率,则如何计算其初值?
答:因工作方式2可以自动装入初值,避免由程序装入初值带来波特率的误差 波特率= 定时器T1的溢出率
7.9 简述MCS-51单片机多机通信的原理。
答:多机通讯工作过程如下:
(1)从机串行口编程为方式2或方式3接收,且置“1”SM2和REN位,使从机只处于多机通讯且接收地址帧的状态。
(2)在主机先将从机地址(即准备接收数据的从机地址)发送给各从机,然后再传送数据或命令,主机发出的地址信息的第9位为1,数据(包括命令)信息的第9位为0。当主机向
各从机发送地址时,各从机的串行口接收到的第9位信息RB8为1,且由于SM2=1,则置“1”中断标志位RI,各从机响应中断执行中断服务程序。在中断服务子程序中,判断主机送来的地址是否与本机地址相符合,若为本机地址,则该从机清“0”SM2位,准备接收主机的数据或命令;若于本机地址不相符,则保持SM2=1状态。
(3)接着主机发送数据帧,此时各从机串行口接收到的RB8=0,只有与前面地址相符合的从机(即已清“0”SM2位的从机)才能激活中断标志位RI,从而产生中断,进入中断服务程序,在中断服务程序中接收主机的数据(或命令);其它的从机因SM2保持为1,而RB8=0不激活中断标志RI,不能进入中断,将所接收的数据丢弃不作处理,从而保证主机和从机间通讯的正确性。图7-22所示的多机系统是主从式,由主机控制多机之间的通讯,从机和从机的通讯只能经主机才能实现。
7.10设计一个单片机的双机通信系统,串行口工作在方式1,编写通信程序将甲机内部RAM 30H~3FH存储区的数据块通过串行口传送到乙机内部RAM 40H~4FH存储区中去。 答:假设甲、乙双方均采用6MHz晶振,波特率为2400。 若设SMOD=1,T1工作在方式2,则T1的计数初值为: X=256-(2/32)6000000/122400=122=7AH 甲机发送程序: ORG 0000H LJMP MAIN ORG 0100H
MAIN: MOV SP, #60H
MOV TMOD, #20H ;设T1工作方式2 MOV TL1, #7AH ;置T1计数初值 MOV TH1, #7AH
CLR ET1 ;禁止T1中断 SETB TR1 ;启动T1
MOV SCON,#40H ;置串口方式1 MOV PCON,#00H ;置SMOD=0 CLR ES ;禁止串行中断
MOV R0, #30H ;置发送数据区首地址 MOV R2, #16 ;置发送数据长度
TRSA: MOV A, @R0 ;读一个缓冲器数据 MOV SBUF, A ;发送
JNB TI, $ ;等待一帧数据发送完 CLR TI ;清发送标志位
INC R0 ;指向下一个单元
DJNZ R2, TRSA ;未发送完,继续 SJMP $
乙机接收程序: ORG 0000H LJMP MAIN ORG 0100H
MAIN: MOV SP, #60H
MOV TMOD, #20H ;设T1工作方式2 MOV TL1, #7AH ;置T1计数初值
MOV TH1, #7AH
CLR ET1 ;禁止T1中断 SETB TR1 ;启动T1
MOV SCON,#40H ;置串口方式1 MOV PCON,#00H ;置SMOD=0 CLR ES ;禁止串行中断
MOV R0, #40H ;置发送数据区首地址 MOV R2, #16 ;置发送数据长度 SETB REN ;启动接收
RESV: MOV A, SBUF ;读接收数据 MOV @R0 , A, ;存接收数据 JNB RI, $ ;等待一帧数据接收完 CLR TI ;清接收标志位 INC R0 ;指向下一个单元 DJNZ R2, RESV ;未完,继续
SJMP $ 习题 8
8.1 简述51系列单片机系统扩展时总线形成电路的基本原理,并说明各控制信号的作用。 ● ① ALE作为地址锁存的选通信号,以实现低8位地址的锁存。 ② 信号作为扩展程序存储器的读选通信号。 ③ 信号作为内、外程序存储器的选择信号。
④ 和作为扩展数据存储器和I/O端口的读,写选通信号。执行MOVX指令时,这两个信号分别自动有效。
8.2 简述全地址译码、部分地址译码和线选法的特点及应用场合。 1)线性选择法
直接以系统空闲的高位地址线作为芯片的片选信号。当存储器对应的片选地址线输出有效电平时,该芯片被选通。优点是简单明了,无须另外增加电路;缺点是寻址范围不唯一,地址空间没有被充分利用,可外扩芯片的个数较少。线性选择法适用于小规模单片机应用系统中片选信号的产生。 2)全地址译码法
利用译码器对系统地址总线中未被外扩芯片用到的高位地址线进行译码,以译码器的输出作为外围芯片的片选信号。常用的译码器有:74LS138,74LS139,74LS154等。优点是存储器的每个存储单元有惟一的一个系统空间地址,不存在地址重叠现象,对存储空间的使用是连续的,能有效地利用系统的存储空间。缺点是所需的地址译码电路较多。全地址译码法是单片机应用系统设计中经常采用的方法。 3)部分地址译码法
单片机未被外扩芯片用到的高位地址线中,只有一部分参与地址译码,其余部分是悬空的。优点是可以减少所用地址译码器的数量。缺点是存储器每个存储单元的地址不是惟一的,存在地址重叠现象。因此,采用部分地址译码法时必须把程序和数据存放在基本地址范围内,以避免因地址重叠引起程序运行的错误。
8.3 利用全地址译码为MCS-51扩展16 KB的外部数据存储器,存储器芯片选用SRAM 6264。要求6264占用从A000H开始的连续地址空间,画出电路图。
8.4 利用全译码为MCS-51扩展8 KB的外部程序存储器,存储器芯片选用EPROM 2764,要求2764占用从2000H开始的连续地址空间,画出电路图。
8.5 使用74LS244和74LS273,采用全地址译码方法为MCS-51扩展一个输入口和一个输出口,口地址分别为FF00H和FF01H,画出电路图。编写程序,从输入口输入一个字节的数据存入片内RAM 60H单元,同时把输入的数据送住输出口。 答:此题取消电路图,程序如下: ● ●
● ORG 0000H ● AJMP MAIN
● ● ORG 0040H ● MAIN:● MOV DPTR,#FF00H ● ● ● ● ●
● MOVX A,@DPTR ● MOV 60H, A;
● MOV DPTR,# FF01H ● MOVX @DPTR,A ● SJMP MAIN
● ● END
8.6 采用全地址译码方法为MCS-51扩展8位并行输入口和8位并行输出口,口地址自定,画出电路图(要求使用74LSl38译码器)。 8.6题不作
8.7 8255A共有几种工作方式?各适用于哪些场合?
● 8255A有三种工作方式,方式0为基本输入/输出方式;方式1为选通输入/输出方式;方式2为双向传送方式。
方式0是一种基本的输入/输出方式,这种工作方式不需要应答联络信号,A口、B口及C口的高半口和低半口都可以由编程设置为输入或输出。
方式1是一种选通输入/输出方式。A口和B口可独立地设置为这种工作方式。在这种方式下,A口和B口通常用于传送它们与外设之间的I/O数据,C口用作A口和B口的应答联络信号线,以实现中断方式传送I/O数据。
方式2是一种选通的双向传送方式。只有A口才能设定为这种工作方式,在方式2下,A口为8位双向数据I/O口,C口的PC7~PC3用来作为A口输入/输出的控制和同步信号。此时,B口及C口的低3位(PC0~PC2)可以工作在方式0或方式1。
8.8 若对8255A作如下设置:A口以方式0输出,B口以方式0输入,C口高4位为输入,低4位为输出,控制寄存器地址为0003H。试对8255A初始化,用位操作方式使8255A的PC4置位,使PC3复位。
● 答:在C口按位置位/复位控制字中,设无关位取0,源程序如下: ORG 0100H MOV DPTR, #0003H MOV A, #8AH MOVX @DPTR, A MOV A, #09H
MOVX @DPTR, A MOV A,#06H MOVX @DPTR, A END 习题 9