单片机课后习题答案[1]1 联系客服

发布时间 : 星期一 文章单片机课后习题答案[1]1更新完毕开始阅读552798096c85ec3a87c2c51f

答: TB8——发送数据位8

在方式2和方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示 主机发送的是地址还是数据。TB8 = 0为数据,TB8 = 1为地址。该位由软件置位或复位。 RB8——接收数据位8 在方式2或方式3时,RB8存放接收到的第9位数据,代表着接收的某种特征,故应根据其状态对接收数据进行操作。

18.什么是串行接口的异步数据传输和同步数据传输?80C51 UART中哪些方式是异步 传输?哪些方式是同步传输?

答: 异步数据传输的实质是指通信双方采用独立的时钟,每个数据均以起始位开始、停止位结束,起始位触发甲乙双方同步时钟。每个异步串行帧中的1位彼此严格同步,位周期相同。所谓异步是指发送、接收双方的数据帧与帧之间不要求同步,也不必同步。 同步数据传输,发送器和接收器由同一个时钟源控制。 80C51除了方式0是同步传输外,其余均为异步传输。

19.80C51单片机内部串行口工作方式工作于方式1、3时波特率与T1的溢出率有关, 什么是T1的溢出率?,如何计算定时器T1工作于方式1时的T1溢出率?

答: 计数器计满时(最后一个计数状态,对 16 位计数器一般为 65535) ,再来一个脉冲,会产生一个溢出信号,计数器复位至第一个状态(第一个计数状态,对16位计数器一般为0),从 0~65535 这是满量程计数的情况。如果想不想满量程,则需要设置初值,如设置初值为65536-1000=64536,则计数器输入1000个脉冲就会产生溢出信号。对T1而言,单位时间的溢出次数即T1的溢出率。

方式1和方式3的波特率是可变的,其波特率由定时器1的计数溢出(对80C52来说, 也可以使用定时器2的计数溢出)决定,公式为: BR = (2SMOD×Td) /32 式中,SMOD 为 PCON 寄存器最高位的值,SMOD = 1 表示波特率加倍。而定时器 1 溢 出率计算公式为: T = fosc/[12×(256-TH1)]

20.设置串行口工作于方式 3,波特率为 9600bps,系统主频为 11.0592MHz,允许接收 数据,串行口开中断,初始化编程,实现上述要求。若将串口改为方式 1,应如何修改初始 化程序? 答: 用公式 SMOD osc 2

Count 256 384 BR f × =? ×

计算TH1的初值。

设置串行口工作于方式3:

/********** 初始化串口波特率 ************/

void initUart(void)/*初始化串口波特率,使用定时器1*/ {

/* Setup the serial port for 9600 baud at 11.0592MHz */

SCON = 0xd0; //串口工作在方式3,此处SM0SM1=03 TMOD = 0x20;

PCON = 0x0; TH1 = 0xfd; TCON = 0x40; }

设置串行口工作于方式1:

/********** 初始化串口波特率 ************/

void initUart(void)/*初始化串口波特率,使用定时器1*/ {

/* Setup the serial port for 9600 baud at 11.0592MHz */

SCON = 0x50; //串口工作在方式1,此处SM0SM1=01 TMOD = 0x20; PCON = 0x0; TH1 = 0xfd; TCON = 0x40; } 21. 使用串行口方式3进行双机通信,系统主频为11.0592MHz, 设置波特率为19200bps, 定时器T1工作于方式2。 A机将地址为3000H~30FFH外部RAM中数据传送到B机地址为4000H~40FFH 外部 RAM 中。请编写程序:① 采用查询方式,进行偶校验,② 采用中断方式,不要校验。(答案不惟一,仅供参考! ) 解:① 采用查询方式,进行偶校验,

A-甲机,B-乙机使用一个程序,P1.0悬空,为发送方,P1.0接地,为接收方。 程序一:

#include /* special function register declarations */ #include /* prototype declarations for I/O functions */ #include #include #include #include

#define byte unsigned char #define uchar unsigned char #define word unsigned int #define uint unsigned int #define ulong unsigned long #define BYTE unsigned char #define WORD unsigned int #define TRUE 1 #define FALSE 0

void initUart(void);/*初始化串口*/

void time(unsigned int ucMs);//延时单位:ms

/* SEND_RECI_LINE=1,设置发送; SEND_RECI_LINE=0,设置接收*/ sbit SEND_RECI_CTRL = P1^0;

sbit CTRL_BUTTON = P1^7; /* CTRL_BUTTON=0,设置错误校验和 */ void initUart(void);/*初始化串口波特率,使用定时器2*/ void send(uchar *d); /*发送函数*/

void receive(uchar *d); /*接收函数*/ xdata uchar sbuf[0x100] _at_ 0x3000; xdata uchar rbuf[0x100] _at_ 0x4000; /******** main 函数 *********/ void main (void) {

time(1);/* 延时等待外围器件完成复位 */ initUart();/* 初始化串口 */

if(SEND_RECI_CTRL){ /*发送*/ send(sbuf); }

else{ /*接收*/ receive(rbuf); }

while(TRUE){} }

/********** 初始化串口波特率 ************/

void initUart(void)/*初始化串口波特率,使用定时器1*/ {

/* Setup the serial port for 19200 baud at 11.0592MHz */

SCON = 0xd0; //串口工作在方式3,此处SM0SM1=03 TMOD = 0x20;

PCON = 0x80; //波特率19200-0x80 波特率9600-0x00 TH1 = 0xfd; TCON = 0x40; }

void send(uchar *d) /*发送函数*/ {

uchar pf; uint i; do{

ACC=0xaa;TB8=P;

SBUF=0xaa; /*发送联络信号*/ while(TI==0){}TI=0; while(RI==0){}RI=0;

}while((SBUF^0xbb)!=0); /*乙机未准备好,继续联络*/ time(500);

do{ pf=0; /*清校验和*/ for(i=0;i<255;i++){ time(500); ACC=d[i];TB8=P;

SBUF=d[i]; /*发送一个数据*/ pf+=d[i]; /*求校验和*/ while(TI==0){}TI=0; }

if(!CTRL_BUTTON) pf++; /* CTRL_BUTTON=0,设置错误校验和 */ time(500); /*显示校验和*/ ACC=pf;TB8=P;

SBUF=pf; /*发送校验和*/ while(TI==0){}TI=0; while(RI==0){}RI=0; time(500);

}while(SBUF!=0); /*回答出错, 则重发*/ }

void receive(uchar *d)/*接收函数*/ {

uchar pf; uint i; do{

while(RI==0){}RI=0; time(500);

}while((SBUF^0xaa)!=0); /*判甲机请求否*/ time(500);

ACC=0xbb;TB8=P;

SBUF=0xbb; /*发应答信号*/ while(TI==0){}TI=0; while(1){

pf=0; /*清校验和*/ for(i=0; i<255; i++){ while(RI==0){}RI=0;

d[i]=SBUF; /*接收一个数据*/

ACC=d[i];if(P!=RB8) pf=0;//偶校验错误,置校验和=0 pf+=d[i]; /*求校验和*/ }

while(RI==0){}RI=0;

if((SBUF^pf)==0){/*比较校验和*/ time(500);

ACC=0x00;TB8=P;

SBUF=0x00;/*校验和相同发\ while(TI==0){}TI=0; } else{

time(500); ACC=0xff;TB8=P;

SBUF=0xff;while(TI==0){}TI=0; /*校验和不同发\重新接收*/ } } }

/*********************************************************