1.什么叫串行通信和并行通信?各有什么特点?
并行通信是数据的各位同时传送,并由传输速度的位数决定传输线的数目。具有传送速度快,效率高的优点,但由于传输成本较高,通常只使用在小于30m的数据传输中,如集成电路的内部。串行通信下数据一位一位串行地顺序传送最少只需要一根传输线即可完成。
2.什么叫异步通信和同步通信?各有什么特点?
异步通信是通过以字符为单位组成字符帧传输的。字符帧由发射端一帧一帧地发送,每一帧数据均是低位在前,高位在后,通过传输线被接收端一帧一帧地接受。同步通信是按数据块传送的。把传送的字符顺序地连起来,组成数据块,在数据块前面加上特殊的同步字符,作为数据块的起始符号,由收,发一职的同步时钟在发送端发出。
3.通信波特率的定义是什么?串行通信对波特率有什么基本要求?
波特率是串行通信传输数据的速率。定义为每秒传输的数据位数,即:1波特=1位/秒(1bit/s)。串行通信对波特率的基本要求是互相通信的甲乙双方必须具有相同的波特率。
4.某异步通信接口方式按3传送,已知其每分钟传送3600个字符,计算其传送波特率。
当使用方式三进行传送,3600×11位/60秒=660位/秒=660bit/s
5.串行缓冲寄存器SBUF有什么作用?简述串行口接受和发送数据的过程。
串行缓冲寄存器SBUF有两个:一个是串行发送缓冲寄存器,另一个是串行接收缓冲寄存器,用同一特殊功能寄存器名SBUF和同一单元地址99H。接收缓冲寄存器还具有双缓冲结构,以避免在数据接收过程中出现帧重叠错误。在完成串行初始化后,发送时只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读取接收数据。
6.MCS-51串行口有几种工作方式?简述串行口接受和发送数据的过程。
MCS-51串行口4中工作方式。
7.波特率误差对异步串行通信有什么影响?有哪些因数影响波特率?
波特率误差会降低异步通信速率。波特率为每秒传送二进制数码的位数,字符的实际传输速率是每秒内所传送字符的帧数,和字符帧格式有关。
8.设有甲,乙两台单片机,编制两台单片机实现以下串行通信功能的程序。
甲机发送:将首地址为ADDRT的128个字节数据块顺序向乙机发送
乙机接受:将接受的128个字节的数据,顺序存放在首地址为ADDRR的数据缓冲区中
#include<reg51.h>
#define ADDRT 31H
void main(){
TMOD = 0x20;
TL1 = 0xF4;
TH1 = 0xF4;
TR1 = 0;
while(1){
SBUF = ADDRT;
do{}while(!T1);
T1 = 0;
do{}while(!R1);
R1 = 0;
k = SBUF;
if(k==ADDRT){ADDRT++}
else P1 = 0x0E;
}
}
#include<reg51.h>
#define ADDRR 31H
void main(){
TMOD = 0X20;
TL1 = 0xF4;
TH1 = 0xF4;
SCON = 0x50;
PCON = 0x00;
TR1 = 1;
while(1){
do{}while(!R1);
R1 = 0;
k = SBUF;
ADDRR = k;
ADDRR++;
SUBF = k;
do{}while(!T1);
T1 = 0;
}
}
9.为什么定时器1作为串行口波特率发生率发生器常采用工作方式2?
T1方式2时,因定时初值能自动恢复,不需要用指令重装,不占用T1运行时间,因而波特率精确。
10.什么叫多机通信?它与双机通信有什么区别?
双机通信时,两台单片机是平等的。而在多机通信中,有主机和从机之分,多机通信是指一台主机和多台从机之间的通信。主机发送的信息可传送到各个从机,而各从机发送的信息只能被主机接收。
11.设8051单片机串行口工作于方式1,晶振频率为12MHz,定时器T1工作于方式2作为波特率发生器,要求波特率为1200b/s,SMOD = 0,试计算T1的时间常数和波特率误差,并编写初始化程序。
1200=1/32*11059200/12/(256-X);
256-X=11059200/32/12/1200=26;
X = 230;
波特率误差为0.16
#include<reg51.h>
void main(){
TMOD = 0x20;
TL0 = 0xE6;
TH0 = 0xE6;
SCON = 0x50;
PCON = 0x50;
}
12.设以串行方式1进行数据传送,FOSC=6MHz,波特率为2400b/s(SMOD=1)。发送的8个数据依此存在外部RAM首址4000H单元中,先发送数据长度,后发送8个数据,试试编写发送子程序。
ORG 0000H
AJMP MAIN ;上电,转向主程序
ORG 0023H ;串行口的中断入口地址
AJMP SERVE ;转向中断服务程序
ORG 0040H ;主程序
MAIN: MOV SP,#60H ;设置堆栈指针
MOV SCON ,#50H
MOV PCON ,#00H
MOV TMOD,#20H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1
MOV R0 ,#20H ;置发送数据区首地址
MOV R1 ,#40H ;置接收数据区首地址
MOV R7 ,#10H ;置发送字节长度
MOV R6 ,#10H ;置接收字节长度
SETB ES ;允许串行口中断
SETB EA ;CPU允许中断
MOV A ,@R0 ;取第一个数据发送
MOV SBUF ,A ;发送第一个数据
SJMP $ ;等待中断
SERVE: JNB RI ,SEND ;TI=1,为发送中断
CLR RI
MOV A ,SBUF ;读出接收缓冲区内容
MOV @R1 ,A ;读入接收缓冲区
DJNZ R6 ,L1 ;判断数据块发送完否
SJMP L2 ;数据块接收完,转L2
L1:INC R1 ;修改数据区指针
L2:RETI ;中断返回
SEND:
CLR TI ;清除发送中断标志
DJNZ R7 ,L3 ;判断数据块发送完否
SJMP L4 ;数据块接收完,转L4
L3: MOV A ,@R0 ;取数据发送
MOV SBUF ,A ;发送数据
INC R0 ;修改数据地址
L4:
RETI ;中断返回
END