单片机习题8答案 下载本文

习题8

1. 异步通信和同步通信的主要区别是什么,8051单片机串行口有没有同步通信的功能?

2. 在异步通信中,接收方是如何知道发送方发送数据的?

3. 为什么80C51单片机串行口的方式0帧格式没有起始位0和停止位1?

4. 为什么定时器/计数器T1用作串行口波特率发生器时,常采用方式2?若已知时钟频率、串行通信的波特率,如何计算装入的T1的初值?

5. 直接以TTL电平串行传输数据的方式有什么缺点?为什么在串行传输距离较远时,常采用RS-232C、RS-422A、RS-485标准串行接口来进行串行数据传输?比较RS-232C、RS-422A、RS-485标准串行接口各自优缺点。

6. 假定串行口串行发送的字符格式为1位起始位,8位数据位,1位校验位,1位停止位,请画出传送字符“B”的帧格式。

7. 某AT89C51单片机串行口,传送数据的帧格式由1个起始位(0),7个数据位,1个偶校验位和1个停止位(1)组成。当该串行口每分钟传送1800个字符时,试计算它的波特率。

8. 若晶体振荡器为11.0592MHz,串行口工作于方式1,波特率为4800b/s,写出用T1作为波特率发生器的方式控制字和计数初值。

9. 使用AT89C51的串行口按工作方式1进行串行数据通信,假定波特率为2400b/s,以查询方式传送数据,请编写发送程序。

10. 请用中断法编写串行口方式1下的接收程序。设80C51单片机主频为11.0592MHz,波特率为1200b/s,接收数据缓冲区在片外RAM起始地址为BLACK单元,接收数据长度为30,采用偶校验(数据长度不发送)。

#include #define uint unsigned int #define uchar unsigned char uchar xdata BLACK[30]; void InitUART(void) {

1

uchar i;

EA=0; //暂时关闭中断

TMOD=0x20; //定时器1工作在模式2,自动重装模式 SCON=0x40; //串口工作在模式1 TH1=0xcc; //定时器重装值 TL1=0xcc;

PCON=0x80; //串口波特率加倍 ES=1; //串行中断允许 TR1=1; //启动定时器1 REN=1; //允许接收 EA=1; //允许中断 for(i=0;i<30;i++) BLACK[i]=i; }

uint8 sending;

void UartPutChar(uint8 d) {

SBUF=d; //将数据写入到串口缓冲 Sending=1; //设置发送标志 while(Sending); //等待发送完毕 }

void UartISR(void) interrupt 4 {

if(RI) //收到数据 {

RI=0; //清中断请求 }

else //发送完一字节数据 {

TI=0;

Sending=0; //清正在发送标志 } }

11. 请用中断法编写串行口方式2下的发送程序。设80C51单片机主频为11.0592MHz波特率为9600,发送数据缓冲区在片外RAM起始地址为BLACK单元,接收数据长度为30,采用偶校验,放在发送数据第9位上(数据长度不发送)。

2

3