《单片微型计算机与接口技术》思考题与习题解答01 下载本文

#inclde #include

#define da0832 XBYTE[0xf7ff] main(){

unsigned char i,j; while{

for(i=O;i<=153:i++) {da0832=i:

for(j=0;j<=100;j++); }

for(i=153;i>=0:i--) {da0832=i;

for(j=O;j<=100;j++); }}}

②方波4V对应的数字量为CCH MOV DPTR,#0F7FFH MOV A,#0

NEXT:MOVX @DPTR,A ACALL D2MS XRL A,#0CCH SJMP NEXT

#include #include

#define da0832 XBYTE[0xf7ff] main(){

unsingde a=O,j; while(1){ da0832=a;

for(j=0;j<=255;j++); a=a^Oxcc: - }} ③阶梯波

MOV DPTR,#OF7FFH NEC:MOV A,#O

NEXT:MOVX @DPTR,A ACALL D1MS ADD A,#33H

CJNE A,#OFFH,NEXTA NEXTA:MOVX @DPTR,A ACALL D5MS SJMP NEC

main(){ unsigued char i; unsigued int j; while(1){

41

for(i=0;i<=255:i+=51) {da0832=i;

for(j=O;j<=100;j++;); }}}

10.2 题目要求同题10.1,采用双缓冲方式。

lO.2 电路参考图10-4,增加一个地址.使用两条输出指令才能输出一个数据,其他同上。

10.3 设计89S51和DAC0832的接口,采用单缓冲方式,将内部RAM 20H~2FH单元的数据转换成模拟电压,每隔1ms输出一个数据。 10.3 电路参照图10-3,地址为7FFFH。 ORG 0000H

MOV DPTR,#7FFFH MOV R0,#20H

MOV A,@R0

NEXT:MOVX @DPTR,A ACALL D11MS INC R0

CJNE R0,#30H,NEXT SJMP$ END

#include #include

#define da0809 XBYTE[Ox7fff] main(){

unsigned char *p,i,j; p=0x20;

for(i=0;i<=16;i++) {da0832= *p;

p++;

for(i=0,j<=255;j++); }}

10.4 内部RAM的30H~3FH中存放着8个12位的二进制数,其中高4位放在高地址单元,低8位放在低地址单元,利用DACl210转换成模拟电压输出,要求用P2.0,P2.1,P2.2进行线选,编出程序,画出硬件电路。

10.4 电路参阅图10-6,不同的是将P2.5~P2.7改为P2.0~P2.2各地址分别为FEFFH、FDFFH、FBFFH。程序参照10.1节,注意修改RAM地址,循环执行该程序。

10.5 设计89S51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H~59H单元,画出电路图,编出:(1)延时方式;(2)查询方式;(3)中断方式的程序。

1O.5电路参阅图10-9,不同的是:①延时方式:EOC悬空;②查询方式:EOC经非门接单片机P1.0(见习题10.6图);③中断方式同原图。

下面仅编查询程序。IN2的地址为7FFAH,由于EOC经非门接单片机P1.0端口线,查询到P1.0为零,即转换结束。

ORG 0000H MOV R7,#OAH MOV R0,#50H

42

MOV DPTR,#7FFAH

NEXT:MOVX @DPTR,A ;启动转换 JB P1.0,$ ;查询等待 MOVX A.@DPTR ;渎人数据 MOV @R0,A INC R0 DJNZ NEXT SJMP $

#includc #include

#define uchar unslgnde char

#define IN2 xBYTE[ox7ffa] /*IN2地址*/ sbit adbusy=P1^0); /*EOC*/ void main(void)

{uchar idata ad[10]; uchar i;

for(i=O;i<=10;i++); /*采集10个数*/ {IN2=0; /*启动转换*/

while(adbusy==1); /*D3C等于O循环*/ ad[i]=IN2 /*存转换结果*/}}

10.6 设计89C51和ADC0809的接口,使用中断方式顺序采集8路模拟量。存入地址为20H~27H的内部RAM中。

10.6 ADC0809采集8路模拟信号,顺序采集一次,将采集结果存放于数组ad中。ADC0809模拟通道0~7的地址为7FF8H~7FFFH,以P1.0查询ADC0809的转换结束端EOC,电路如习题10-6图所示的查询方式。 程序如下:

#lnclude #include

#define uchar unsigned char

#define IN0 XBYTE[0x7ff8] /*IN0地址*/ sbit adbusy=P1^0; /*EOC*/

void ad0809(uchar idata*x) /*A/D*/ {uchar ii;

uchar xdata*ad_adr; ad_adr=&IN0;

for(i=0;i<8;i++) /*处理8个通道*/

{ *ad_adr=0; /*启动转换*/

while(adbusy==1); /*查EOC*/ x[i]=*ad_adr; /*存转换结果*/ ad_adr++; /*指向下一通道*/ }}

void main(void)

{uchar idata ad[10];

ad0809(ad); /*采样AD0809通道的值*/}

43

10.7 设计8XX51和8279的接口,使外接8个数码管和2×8矩阵键盘。 (1) 画出硬件电路;

(2) 最左边数码管显示“—”;

(3) 每一次按键,键值“O”~“F”从左到右顺次显示在数码管上。 10.7 参见4.6节例。

第11章 串行接口技术

11.1 在AT89S52上扩展两片AT24C04。 11.1 见习题11.1图

习题11.1图

11.2 完成将O~9写入AT24C04的O~9单元。 11.2 参阅11.L 5节

11.3 完成将AT24C04的O~9单元内容读出并分别存入内部RAM的20H~29H单元。 11.3 参阅11.1.5节

11.4 试用一片TLC5615设计一个51波形发生器,使能产生方波、锯齿波。 11.4 参阅第13章实验指导的实验7

11.5 使用一片TLC549设计一个基于51单片机测量的低频有效值的电压表。 11.5 参阅第13章实验指导的实验8

第12章 嵌入式系统的设计与调试

12.1 单片机的抗干扰措施有哪些?

44

12.1 参阅12.3节

12.2 设计一个电子数字钟,并接一个小喇叭,使 (1) 具有交替显示年、月、日、时、分、秒的功能; (2) 具备校正功能;

*(3) 具备设定闹钟和定时闹钟响功能; *(4) 具备整点报时功能; *(5) 具备生日提醒功能。 其中,*为选做的扩展功能。

12.2 提示:利用定时/计数器定时l00ms,中断10次达1s,满60s,分加1s清O;满60分,小时加1分清0,同时分、秒均有十位数和个位数,按十进制进位,并送显示,显示可采用6个数码管(或8个数码管),校对可用按键中断方式或按键的查询进行加1校对,用并行口接驱动器(非门或三极管)驱动扬声器进行闹钟,如果采用89C51/S51做,由于片内已有程序存储器,4个口用户均可使用。

12.3 用单片机的定时器设计一个音乐盒,使能用按键选择演奏两支小乐曲,已知乐谱和频率的关系如下: C调音符 频率(Hz) 5 392 6 440 7 494 1 524 2 588 3 660 4 698 5 784 6 880 7 988 12.3 提示:使用定时器产生不同频率的信号构成节拍,可以两个定时器联合使用。

12.4 设计一个模拟量采集系统,将所采集的模拟量显示在4个LED显示器或4个LCD显示器上。

12.4 提示:硬件由单片机、A/D转换、LED显示器或LCD显示器及必要的驱动、译码等电路构成。

12.5 题目题12.4,要求利用串行通信,使采集的数据或波形显示在PC的电脑屏幕上。 12.5 略

第13章 单片机实验(略)

45