6.89C52中SCON的SM2、TB8、RB8有何作用? 答:SM2:多机通信控制位。 TB8:发送数据的第9位。 RB8:接收数据的第9位。
7.设fsoc=11.059 2MHz,试编写一段程序,其功能为对串行口初始化,使之工作于方式1,波特率为1 200b/s;并用查询串行口状态的方法,读出接收缓冲区的数据并回送到发送缓冲区。 #include
void main() {
unsigned char temp; SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1;
while(RI==0); temp=SBUF; RI=0;
SBUF=temp; }
8.若晶振为11.059 2MHz,串行口工作于方式1,波特率为4 800b/s。写出用T1作为波特率发生器的方式字和计数初值。 答:SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8;
9.为什么定时器T1用作串行口波特率发生器时,常选用工作模式2?若已知系统时钟频率和通信用波特率,如何计算其初值? 答:工作模式2有自动重装入功能。
X=256-fosc?(SMOD?1)
384?波特率
10.若定时器T1设置成模式2作波特率发生器,已知fosc=6MHz,求可能产生的最高和最低的波特率。 答:最高波特率为8Mb/s。 最低波特率为15625b/s。
11.简述单片机多机通信的原理。
31
答:若置SM2=1,则允许多机通信。多机通信协议规定,第9位数据(D8)为1,说明本帧数据为地址帧;若第9位为0,则本帧为数据帧。当一片89C52(主机)与多片89C5l(从机)通信时,所有从机的SM2位都置l。主机首先发送的一帧数据为地址,即某从机机号,其中第9位为1,所有的从机接收到数据后,将其中第9位装入RB8中。各个从机根据收到的第9位数据(RB8中)的值来决定从机可否再接收主机的信息。若(RB8)=0,说明是数据帧,则使接收中断标志位RI=0,信息丢失;若(RB8)=1,说明是地址帧,数据装入SBUF并置RI=1,中断所有从机,被寻址的目标从机清除SM2,以接收主机发来的一帧数据。其他从机仍然保持SM2=1。 12.当89C52串行口按工作方式1进行串行数据通信时,假定波特率为1 200b/s,以中断方式传送数据,请编写全双工通信程序。 #include
unsigned char data txbuf; unsigned char data rebuf;
void main() {
unsigned char temp; SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; ES=1; EA=1; }
void comre() {
rebuf=SBUF; }
void comtx() {
SBUF=txbuf; }
void serial_server() interrupt 4 { if(TI) TI=0; else {
32
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
33
{ 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位发光二极管的开关控制和点亮。
34
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++)
35