单片机原理及应用习题答案 联系客服

发布时间 : 星期六 文章单片机原理及应用习题答案更新完毕开始阅读05f89f130b4e767f5acfcebe

MOVX @DPTR,A ACALL DELY INC R1

MOV A,R2 RR A

;字段码送PB口 ;调用1ms延时

;未完,字位码右移一位

;指向下一字符

JB ACC.0,FINA ;判断8位显示完否 MOV R2,A SJMP LOOP RET

;转下一位显示

FINA:

TAB1: DB 6FH,5CH,5CBH,5EH ;good by的字段码表

DB 00H,7CH,2EH,00H

DELY: MOV R7,#02H ;延时子程序 DEL1: MOV R6,#0FFH DEL2: DJNZ R6,DEL2 并编程。

解:8031扩展的8255 I/O口,连接一个4行6列键盘电路如下图所示。

P0D0~D7ALEGCEQ0Q1Q7D0~D7A0A1CS

DJNZ R7,DEL1 RET

7.8.利用8031扩展的8255 I/O口,连接一个4行6列键盘,要求画出电路图和键盘管理程序流程图,

PA5PA4PA3PA2PA1PA0PB00PB1617283945+5V80518255A1011RDWRRSTRDWRRESETPB2121314151617PB31819202122238051单片机与8255A接口的键盘电路的连接程序流程图略,参考程序如下:

MAIN: MOV R0,#73H

MOV A,#82H MOVX

@R0,A

;8255控制口

;8255控制字(A口输出,B口输入)

在键扫描子程序中共调用另外两个子程序,分别是:DELY 12ms延时子程序,软件消抖动。 DECI 判断子程序,判断是否有键闭合。程序如下:

DECI:MOV R0,#70H ;PA口地址

MOV A,#00H MOVX @R0,A

INC R0 CPL A

;PB口地址

;A取反,无键按下则全0

MOVX A,@R0 ;读PB口

;PA口送00H

ANL A,#0FH RET

;屏蔽A高半字节

执行DECI子程序的结果是:有闭合键则(A)≠0,无闭合键则(A)=0。 键盘扫描程序: KEYB: ACALL DECI ;检查有键闭合否

LK1: LK2: LK4:

LONE: LTWO: LTHR: LKP : LK3:

NEXT:`

KND: DELY: DEL1:

JNZ LK1

;A≠0则转移

AJMP KEYB

ACALL DELY ;共12ms去抖动 ACALL DECI ;再检查有键闭合否 JNZ LK2

;有键闭合,转LK2

AJMP KEYB ;无键闭合,延时6ms后转KEYB MOV R2,#FEH ;扫描处值送R2

MOV R4,#00H ;扫描列号送R4 MOV R0,#70H ;建立PA口地址 MOV A,R2

MOVX @R0,A ;扫描初值送PA口 INC R0

;指向PB口

MOVX

A,@R0 ;读PB口

JB ACC.0,LONE ;ACC.0=1第1行无键闭合,转LONE MOV A,#00H ;装第1行行值 AJMP

LKP

JB ACC.1,LTWO ;ACC.1=1第2行无键闭合,转LTWO

MOV A,#06H ;装第2行行值

AJMP

LKP

JB ACC.2,LTHR ;ACC.2=1,第3行无闭合键,转LTHR

MOV A,#0CH ;装第3行行值

AJMP

LKP

JB ACC.3,NEXT ;ACC.3=1,第4行无键闭合则转NEXT

MOV A,#12H ;装第4行行值 ADD A,R4 ;计算键码 PUSH ACC

;保护键码

ACALL DECI

;查键是否继续闭合,若闭合再延时 JNZ LK3 POP ACC ;若键起,则键码送A RET INC R4

;扫描列号加1

MOV A,R2

JNB ACC.5,KND ;第5位为0,已扫完最高位则转KND RL A MOV R2,A AJMP LK4

;进行下一列扫描 AJMP KEYB ;扫描完毕,开始新的一次

MOV R7,#18H ;延时12ms子程序(晶振12MHZ)

DJNZ R6,DEL1

DJNZ RET

R7,DELY

键盘扫描程序的运行结果,是把闭合键的键码放在累加器A中。然后再根据键码进行其它处理。 7.9.以DAC0832为例说明D/A转换器单缓冲接口方式的实现。

解:所谓单缓冲方式就是使0832的两个寄存器中有一个处于直通方式,而另一个处于

受控的锁存方式。在实际应用中,如果只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出的情况下,就可采用单缓冲方式。单缓冲方式如图7.30所示,DAC0832的ILE接高电平,允许输入数据锁存,WR1和WR2都与8051的WR相接,CS和XFER与8051的P2.7(A15)相连,假设无关地址线为1,则0832的口地址为7FFFH。这种连接方法是把0832看作8051的一个带有数据锁存功能的输出设备。CPU把一个8位数据#data写入DAC寄存器,也就实现了一次D/A转换,输出一个与#data对应的模拟量。转换过程的程序如下:

DAC0832VccILEVrefDI0~DI7RfbCSIout1XFERIout2WR1AGNDWR2DGND+5VP0ALE8051P2.7WR74LS373G-A+Vout图7.30 DAC0832单缓冲方式接口

MOV DPTR,#7FFFH ;指向0832的口地址

MOV A,#data ;取将要转换的8位数据量送A MOVX @DPTR,A ;写入0832,进行一次D/A转换并输出

7.10.以DAC0832为例说明D/A转换器双缓冲接口方式的实现。

解:所谓双缓冲方式,就是把DAC0832的两个锁存器都接成受控锁存方式。双缓冲方式DAC0832的连接如图7.35示。

为了实现寄存器的可控,应当给寄存器分配一个地址,以便能按地址进行操作。图中是使用地址译码

图7.35 DAC0832的双缓冲方式的连接

输出分别接CS和XFER实现的。然后再给WR1和WR2提供写选通信号。这样就完成了两个锁存器都可控的双缓冲接口方式。

由于两个锁存器占据两个地址,因此在程序中需要使用两条传送指令,才能完成一个数字量的模拟转换。假定输入寄存器地址为FEH,DAC寄存器地址为FFH。则完成一次数/模转换的程序如下:

MOV R0,#FEH

MOVX @R0,A INC R0

MOVX @R0,A

;装入输入寄存器地址 ;转换数据送输入寄存器 ;产生DAC寄存器地址 ;数据通过DAC寄存器

7.11.A/D转换器转换数据的传送有几种方式? 答:A/D转换器转换数据的传送有3种方式: 1.定时传送方式

对于一种A/D转换器来说,转换时间作为一项技术指标是已知和固定的。例如ADC0809转换时间为128μs,相当于6MHZ的MCS-51单片机共64个机器周期。

2.查询方式

A/D转换芯片有表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,软件测试EOC的状态,即可确知转换是否完成,并接着进行数据传送。

3.中断方式

把表明转换完成的状态信号EOC作为中断请求信号,以中断方式进行数据传送。 7.12.简述逐次逼近式A/D转换的原理。 答:略

7.13.多片D/A转换器为什么必须采用双缓冲接口方式?

答:双缓冲方式多用于多路数/模转换系统,以实现多路模拟信号同步输出的目的。

第14题图 第15题图

7.14.使用D/A转换器产生梯形波,梯形底部在0V,梯形顶部在+2.5V,平顶宽度自定,请编程实现。 解:采用图7.30 DAC0832单缓冲方式接口,参考程序如下:

MOV MOV MOVX INC CJNZ LCALL MOV DEC JNZ LCALL MOV DJNZ DJNZ RET

DPTR,#7FFFH;输入寄存器地址 A,#00H @DPTR,A A

;转换初值 ;D/A转换 ;转换值增量 ;调延时程序

UP:

A,#80H,UP;80H为+2.5V输出对应的数字量 DELAY A,#7FH @DPTR,A A

A,DOWN DELAY R7,#2 R6,#0FFH R6,DL1 R7,DL2

DOWN: MOVX

DELAY: MOV DL2: DL1:

7.15.使用D/A转换器产生如图所示的三角波,请编程实现 解:根据图7.30,参考程序如下:

MOV

DPTR,#7FFFH