周国运版51单片机课后习题答案资料 下载本文

RI=0; comre(); } } 13.当89C52串行口按工作方式3进行串行数据通信时,假定波特率为1 200b/s,第9位数据作奇偶校验位,以中断方式传送数据,请编写通信程序。 #include

unsigned char data txbuf; unsigned char data rebuf;

void main() {

unsigned char temp; SCON=0xd0; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; ES=1; EA=1; }

void comre() {

ACC=SBUF; if(RB8==P) rebuf=ACC; else

error(); }

void comtx() {

ACC=txbuf;

SBUF=ACC; TB8=P; }

void serial_server() interrupt 4 { if(TI) TI=0; else

31

{ RI=0; comre(); } }

void error() {

F0=1; }

第8章 习题答案

1.假定一个存储器有4096个存储单元,其首地址为0,则末地址为多少? 答:末地址为4095。

2.6根地址线和11根地址线各可选多少个地址? 答:6根地址线可选26个地址。

11

11根地址线可选2个地址。

3.用2K×4位的数据存储器芯片扩展4K×8位的数据存储器需要多少片?地址总线是多少位?画出连线图。 答:需要4片,地址总线是12位。

89C52 数据总线D0~D3 数据总线D4~D7 2K*4b 2K*4b 2K*4b 2K*4b 地址总线A0~A10 地址总线A11

4.用两片74HC573芯片扩展89C52的P1端口实现6位发光二极管的开关控制和点亮。

32

74HC573 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 D0 Q0 D1 Q1 D2 Q2 D3 Q3 D4 Q4 D5 Q5 D6 Q6 D7 Q7 LE 74HC2573 89C52 Q0 D0 Q1 D1 Q2 D2 Q3 D3 Q4 D4 Q5 D5 Q6 D6 Q7 D7 LE + WR P2.0 RD +

5.用2K×8位的数据存储器芯片扩展64K×8位的数据存储器需要多少根地址线?

答:需要16根地址线。

6.I2C和SPI各有什么特点? 答:I2C总线是二线制,采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。I2C总线简单,结构紧凑,易于实现模块化和标准化。

SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线。有多个SPI接口的单片机时,应为一主多从,在某一时刻只能由一个单片机为主器件;在扩展多个SPI外围器件时,单片机应分别通过I/O口线来分时选通外围器件。

7.用P1口模拟SPI从外部先发送从片内RAM中30H开始的10个字节,再接收30个字节存放在40H开始的片内RAM中。引脚自定义。 unsigned char data txbuf[10] _at_ 0x30; unsigned char data rebuf[30] _at_ 0x40;

void main() {

unsigned char i; for(i=0;i<10;i++) spiout(txbuf[i]); for(i=0;i<30;i++)

33

rebuf[i]=spiin(); }

8.用P1口模拟I2C从外部接收一组数据,遇到“$”结束。引脚自定义。 unsigned char xdata buffer[100] ; void main() {

unsigned char temp=0; unsigned char i=0; temp=rxbyt();

while(temp!=’$’) {

buffer[i]=temp; i++; } }

第9章 习题答案

1.为什么要消除键盘的机械抖动?有哪些方法?

答: 键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。如果按键较多,常用软件方法去抖动,即检测出键闭合后执行一个延时程序,产生12~20 ms的延时,让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当确认有键按下或检测到按键释放后,才能转入该键的处理程序。

2.试说明非编码键盘的工作原理。如何判断按键释放?

答: 非编码键盘的单片机系统中,键盘处理程序首先执行有无键按下的程序段,当确认有按键按下后,下一步就要识别哪一个按键被按下。对键的识别常用逐行扫描查询法或行列反转法。在获取键号后,继续扫描端口,直到状态改变,去抖动后,再次确认状态改变,即可判断按键释放。

3.试述A/D转换器的种类和特点。

答: 模/数(A/D)转换电路的种类很多,例如,计数比较型、逐次逼近型、双积分型等等。逐次逼近型A/D转换器.在精度、速度和价格上都适中,是最常用的A/D转换器件。双积分A/D转换器,具有精度高、抗干扰性好、价格低廉等优点,但转换速度低。

4.设计一个2×2的行列式键盘(同在P1口)电路并编写键扫描程序。

34

+5V 89C52 P1.0 P1.1 P1.2 P1.3

#include

unsigned char key() {

unsigned char row,col=0,k =-1; P1=0xf0;

if((P1&0xf0)==0xf0) return(k);

delay20ms(); if((P1&0xf0)==0xf0) return(k);

for(row=0;row<2;row++) {

P1=~(1<

if(k!=0xf0) {

while(k&(1<<(col+2))) col++; k=row*2+col; P1=0xf0;

while((P1&0xf0)!=0xf0); break; } }

return(k); }

5.试设计一个LED显示器/键盘电路。

35