单片机课后习题答案 下载本文

MOV R4, #00H LK3: MOV DPTR, #7F01H

MOV A, R2 MOVX @DPTR, A INC DPTR INC DPTR MOVX A, @DPTR JB ACC.0, LONE MOV A, #00H AJMP LKP LONE: JB ACC.1, LTWO

MOV A, #08H AJMP LKP LKP: ADD A, R4

PUSH ACC LK4: ACALL DSP8155

ACALL KS1 JNZ LK4 POP ACC NEXT: INC R4

MOV A, R2 JNB ACC.7, KND RL A MOV R2, A AJMP LK3 KND: AJMP KEY1 KS1: MOV DPTR, #7F01H

MOV A, #00H MOVX @DPTR, A INC DPTR INC DPTR MOVX A, @DPTR CPL A ANL A, #0FH RET

DSP8155: MOV DPTR, #7F00H MOV A, #00000011B

MOVX @DPTR, A DISP1: MOV R0, #7EH MOV A, #80H LOOP: MOV R2, A

MOV DPTR, #7F01H MOVX @DPTR, A MOV A, @R0 MOV DPTR, #PTRN MOVC A, @A+DPTR MOV DPTR, #7F02H MOVX @DPTR, A CALL D1MS DEC R0 MOV A, R2 CLR C RRC A JC PASS AJMP LOOP PASS: RET D1MS: MOV R7, #02H DMS: MOV R6, #0FFH

46

; 指向8155命令寄存器

; 设定PA口、PB口为基本输出方式; 输出命令字

; 指向缓冲区末地址

; 扫描字,PA7为1,从左至右扫描 ; 暂存扫描字 ; 指向8155的PA ; 输出位选码

; 读显示缓冲区一字符 ; 指向段数据表首地址 ; 查表,得段数据 ; 指向8155的PB ; 输出段数据 ; 延时1ms ; 调整指针 ; 读回扫描 ; 清进位标志 ; 扫描字右移 ; 结束

; 继续显示 ; 返回

; 延时1ms子程序

PTRN:

DJNZ DJNZ RET DB DB DB …… END

R6, $

R7, DMS

0C0H, 0F9H, 0A4H, 0B0H, 99H …… ……

; 段数据表

17.设计一个用8155控制32个按键的键盘接口电路。编写程序实现以下功能:用8155定时器定时,每隔2s读一次键盘,并将读出的键值存入8155片内RAM以20H开始的单元中。 解:

硬件连接电路如图6.17所示。8155控制口的口地址为:7F00H;PA口地址:7F01H;PB口地址:7F02H;PC口地址:7F03H。片内RAM地址:7E00H~7EFFH。定时器低位地址:7F04H;定时器高位地址:7F05H。

图6.17 6.17题扩展键盘电路图

程序如下:

ORG 0000H LJMP MAIN ORG 0013H LJMP IEX1 ORG 0030H

MAIN: MOV SP,#60H

MOV R5,#200

MOV DPTR,#7FF8H MOV A,#11000001 MOVX @DPTR,A MOV DPTR,#7FFCH MOV A,#52H MOVX @DPTR,A INC DPTR MOV A,#27H MOVX @DPTR,A MOV DPTR,#7E40H SETB EX1 SETB EA SJMP $ ORG 0200H

IEX1: DJNZ R5,RETI_0

LCALL KEY1

MOVX @DPTR,A INC DPTR

RETI_0: RETI

;中断次数计数值

;8155初始化

;写定时器初值

;8155片内RAM地址

;调用键盘扫描及求键值子程序 ;存键值 ;修改地址 ;中断返回

47

AJMP KEY1 ;无键按下返回

LK1: ACALL T12MS ;调延时12 ms子程序

ACALL KS1 ;查有无键按下,若有则为键确实按下 JNZ LK2 ;键按下,(A)≠0,转逐列扫描 AJMP KEY1 ;不是键按下返回

LK2: MOV R4,#00H ;首列号入R4

MOV R2,#0FEH ;首列扫描字送R2

LK3: MOV A,R2 ;第一次列扫描

MOV DPTR,#7FF9H ;列扫描字送至8155PA口 MOVX @DPTR,A ;使第0列线为0 INC DPTR ;指向8155PC口 INC DPTR MOVX A,@DPTR ;8155PC口读入行状态 JB ACC.0,LONE ;第0行无键按下,转查第1行 MOV A,#00H ;第0行有键按下,该行首键号#00→A AJMP LKP ;转求键号

LONE: JB ACC.1,LTWO ;第1行无键按下,转查第2行

MOV A,#08H ;第1行有键按下,该行首键号#08→A AJMP LKP

LTWO: JB ACC.2,LTHR ;第2行无键按下,转查第3行

MOV A,#10H ;第2行有键按下,该行首键号#10H→A LJMP LKP

LTHR: JB ACC.3,LOOP ;第3行无键按下,转查下一列

MOV A,#18H ;第3行有键按下,该行首键号#18H→A

LKP: ADD A,R4 ;键号=行首建号+列号

PUSH ACC ;键号进栈保护

LK4: ACALL KS1 ;等待键释放

JNZ LK4 ;未释放,等待 POP ACC ;键释放,键号→A RET ;键扫描结束,出口状态:(A)=键号

LOOP: INC R4 ;指向下一列,列号加1

MOV A,R2 ;判断8列扫描完没有 JNB ACC.7,KND ;8列扫描完,返回 RL A ;扫描字左移一位,转变为下一列扫描字 MOV R2,A ;扫描字入R2 AJMP LK3 ;转下一列扫描

KND: AJMP KEY1 KS1: MOV DPTR,#7FF9H ;指向PA口

MOV A,#00H ;全扫描字#00H=00000000B MOVX @DPTR,A ;全扫描字入PA口 INC DPTR ;指向PC口 INC DPTR MOVX A,@DPTR ;读入PC口行状态

CPL A

ANL A,#0FH RET ;出口状态:(A)≠0时有键按下 T12MS: MOV R7,#18H T12MS1: MOV R6,#0FFH

DJNZ R6,$ DJNZ R7,T12MS1

RET

END

ORG 0100H

KEY1: ACALL KS1

JNZ LK1

;调用判断有无键按下子程序 ;有键按下时,(A)≠0,转消抖动延

18.设计一个TPμP-40A的打印机接口,将打印缓冲区中从30H开始的10字节数据传输到打印机,编写程序。

48

解:打印机接口电路如图6.18所示。 程序如下:

0000H START 0100H R0,#30H R6,#10

DPTR,#7FFFH A,@DPTR ACC.7,LOOP ORG

LJMP ORG START: MOV MOV MOV LOOP: MOVX JB

图6.18 打印机接口电路

MOV A,@R0 MOVX @DPTR,A INC R0

DJNZ R6,LOOP RET END

习题7

1.简述单片机应用系统设计的一般方法及步骤。

解:

单片机应用系统设计的一般方法及步骤如图7.1所示。 (1)明确设计任务 (2)器件选择 (3)总体设计

49

图7.1 单片机应用系统设计过程流程图

2.简述单片机应用系统设计中软、硬件设计的原则。 解:

(1)硬件电路设计

在硬件设计时,要尽量应用最新单片机,采用新技术。要注意通用性的问题,尽可能选择典型电路,并符合单片机常规用法,为硬件系统的标准化、模块化打下良好的基础。系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。硬件系统设计应尽量朝“单片”(片上系统SOC)方向发展,以提高系统的稳定性。工艺设计时要考虑安装、调试、维修的方便。扩展接口的开发尽可能采用PSD等器件开发。

(2)软件设计

软件设计随单片机应用系统的不同而不同。图7.2给出了单片机软件设计的流程图。一般可分为以下几个方面。

① 总体规划

② 程序设计技术: 模块程序设计、自顶向下的程序设计。

③ 程序设计:建立数学模型、绘制程序流程图、程

图7.2 软件设计的流程图

50