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