精品文档
西安电子科技大学
实验报告
课程名称 实验学时 微机系统上机实验 28学时 成 绩 评语: 指导教师:吴文华 2016年 12月 26 日
1欢迎下载
。
精品文档
实验一 汇编语言编程实验
一、 实验目的
(1)掌握 汇编语言的编程方法 (2)掌握 DOS 功能调用的使用方法 (3)掌握 汇编语言程序的调试运行过程
二、 实验设备
PC 机一台。
三、 实验内容
1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成
必要提示信息的显示。
2. 在屏幕上显示自己的学号姓名信息。
3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
4. 自主设计输入显示信息,完成编程与调试,演示实验结果。
四、 实验源码
DATA SEGMENT
DISCHA DB'WangHan 14030188004',0AH,0DH,'$' TAB DB' ',0AH,0DH,'$' BLANK DB' $' DATA ENDS
STACK SEGMENT
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START:
MOV AX,SEG DISCHA MOV DS,AX
MOV DX,OFFSET DISCHA MOV AH,09H INT 21H
NEXT:
MOV AH,01H INT 21H CMP AL,'Q' JE ENDSS
2欢迎下载
。
精品文档
CMP AL,'q' JE ENDSS MOV BL,AL
MOV AX,SEG BLANK MOV DS,AX
MOV DX,OFFSET BLANK MOV AH,09H INT 21H
MOV BH,0AH MOV DL,BL MOV CL,04H SHR DL,CL CMP DL,BH JNL Q3 JMP Q2 Q1:
ADD DL,07H Q2:
ADD DL,30H MOV AH,02H INT 21H
MOV DL,BL MOV DH,0FH AND DL,DH CMP DL,BH JNL Q3 JMP Q4 Q3:
ADD DL,07H Q4:
ADD DL,30H MOV AH,02H INT 21H
MOV AX,SEG TAB MOV DS,AX
MOV DX,OFFSET TAB MOV AH,09H INT 21H
MOV CX,0009H LOOP NEXT
3欢迎下载。
精品文档
ENDSS:
MOV AH,4CH INT 21H
CODE ENDS
END START
五、 程序流程图
如下图1.2所示
图1.2程序流程图
4欢迎下载
。
精品文档
实验二 数码转换实验
一、实验目的
1. 掌握不同进制数及编码相互转换的程序设计方法。 2. 掌握运算类指令编程及调试方法。 3. 掌握循环程序的设计方法。
二、 实验设备
PC 机一台。
三、 实验内容
1. 重复从键盘输入不超过5位的十进制数,按回车键结束输入;
2. 将该十进制数转换成二进制数;结果以2进制数的形式显示在屏幕上; 3. 如果输入非数字字符,则报告出错信息,重新输入; 4. 直到输入“Q”或‘q’时程序运行结束。
5. 键盘输入一字符串,以空格结束,统计其中数字字符的个数,在屏幕显示
四、实验原理
十进制数可以表示为:Dn*10n+Dn-1*10n-1+…+D0*100=? Di*10i 其中Di代表十进制数1、2、3、…、9、0。 上式可以转换为:? Di*10i=(((Dn*10+Dn-1)*10+ Dn-2)*10+…+ D1)*10+ D0
由上式可归纳出十进制数转换为二进制数的方法:从十进制数的最高位Dn开始做乘10加次位的操作,依此类推,则可求出二进制数结果。
表2.1 数码转换关系对应表
五、实验源码
1、数制转换
assume cs:code
data segment
5欢迎下载
。
精品文档
est db \data ends
stack segment
stk db 64 dup (0) stack ends
code segment start:
mov ax,stack mov ss,ax
mov sp,offset stk mov ax,data mov ds,ax rf:
mov cx,5 mov ax,0 mov dx,0 mov si,0 mov di,0 rr:
mov ah,01h int 21h cmp al,0dh je rend cmp al,'q' je qt
cmp al,'Q' je qt
cmp al,'0' jl err cmp al,'9' jg err jmp cnt err:
call perr cnt:
sub al,'0' mov bh,0 mov bl,al mov ax,di push bx mov bx,10 mul bx
6欢迎下载。
精品文档
pop bx add ax,bx adc dx,0 mov si,dx mov di,ax loop rr rend:
call newline mov bx,si call itb mov bx,di call itb call newline jmp rf qt:
mov ax,4c00h int 21h itb:
mov cx,16 rs: mov ax,bx and ax,01h mov dl,al add dl,'0' push dx shr bx,1 loop rs mov cx,16 r: pop dx mov ah,02h int 21h loop r ret newline:
mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h ret perr:
mov dx,offset est mov ah,09h int 21h jmp rf
7欢迎下载。
精品文档
ret code ends end start
、数字统计
assume cs:code
stack segment
stk db 16 dup (0) stack ends
code segment
start: mov ax,stack mov ss,ax
mov sp,0 mov bx,0 rc: mov ah,01h int 21h cmp al,' ' je brk cmp al,'0' jl n
cmp al,'9' jg n inc bx n: jmp rc
brk:call show_num mov ax,4c00h int 21h show_num:
mov si,0 rs: mov ax,bx mov cl,10 div cl add ah,'0' mov dl,ah push dx mov ah,0 inc si cmp ax,0 je rt jmp rs rt:
mov cx,si s: pop dx
8欢迎下载。
2
精品文档
mov ah,02h int 21h loop s ret code ends end start
六、程序流程图
如下图2.2所示
2.2 十进制ASCII码转换为二进制数流程图9欢迎下载。
图
精品文档
实验三 基本IO扩展口实验
一、 实验目的
1. 了解TTL芯片扩展简单I/O口的方法。 2. 掌握数据输入输出程序编制的方法。
二、 实验设备
PC 机一台,实验箱
三、实验内容
本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连到发光二
极管显示。具体实验内容如下:
1.开关Yi为低电平时对应的发光二极管亮,Yi为高电平时对应的发光二极管灭。 2.当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。 3.当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
四、实验原理
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态;
74LS273是一种带清除功能的8D触发器, 1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
五、实验步骤
10欢迎下载
。
精品文档
1.按照实验连线图连接:
244的CS接到ISA总线接口模块的0000H,Y7—Y0——开关K1—K8。
273的CS接到ISA总线接口模块的0020H,Q7—Q0——发光二极管L1—L8。 该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0~AD7)连到ISA总线接口模块的数据(LD0~LD7)。 2.编写实验程序,编译链接,运行程序 3. 拨动开关,观察发光二极管的变化。
六、实验源码
MY_STACK SEGMENT PARA 'STACK' DB 100 DUP(?) MY_STACK ENDS
MY_DATA SEGMENT PARA 'DATA'
IO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间 IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间
pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$' LS244 DW 00000H LS273 DW 00020H RA DB ? LB DB ?
DELAY_SET EQU 0FFFH ;延时常数 MY_DATA ENDs
MY_CODE SEGMENT PARA 'CODE' MY_PROC PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK MAIN:
.386 ;386模式编译
MOV AX,MY_DATA MOV DS,AX MOV ES,AX
MOV AX,MY_STACK MOV SS,AX
CALL FINDPCI ;自动查找PCI卡资源及IO口基址 MOV CX,word ptr IO_base_address
; MOV CX,0E800H ;直接加入(E800:本机PCI卡IO口基址) ADD LS244,CX ;PCI卡IO基址+偏移 ADD LS273,CX MOV RA,7FH MOV LB,0FEH
READ1: MOV DX,LS244 ;读取开关状态 IN AL,DX
CMP AL,0FFH JE READ2
11欢迎下载
。
精品文档
CMP AL,000H JE READ3
NOT AL ;取反 JMP READ4
READ2: CALL RIGHT JMP READ4
READ3: CALL LEFT READ4: MOV DX,LS273
OUT DX,AL ;送LED显示 CALL DELAY CALL BREAK JMP READ1 MY_PROC ENDp
RIGHT PROC NEAR MOV AL,RA ROR AL,1 MOV RA,AL RET RIGHT ENDP
LEFT PROC NEAR MOV AL,LB ROL AL,1 MOV LB,AL RET LEFT ENDP
;***************************************************************************** ; /*按任意键退出*/
;***************************************************************************** BREAK PROC NEAR ;按任意键退出 PUSHF
PUSH AX PUSH DX MOV AH,06H MOV DL,0FFH INT 21H JE RETURN MOV AX,4C00H INT 21H RETURN: POP DX POP AX POPF RET BREAK ENDP
;*****************************************************************************
12欢迎下载
。
精品文档
; /*延时程序*/
;***************************************************************************** DELAY PROC NEAR ;延时程序 PUSHF
PUSH PUSH MOV D1: MOV D2: DEC JNZ DEC JNZ POP POP POPF RET DELAY ENDp DX CX
DX,DELAY_SET CX,-1 CX D2 DX D1 CX DX
13欢迎下载。
精品文档
实验四 可编程并行接口实验
一、实验目的
1. 了解可编程并行接口8255的内部结构, 2. 掌握工作方式、初始化编程及应用。
二、实验设备
PC机一台,实验箱
三、实验内容
1.流水灯实验:利用8255的A口、B口循环点亮发光二极管。 2.交通灯实验:利用8255的A口模拟交通信号灯。
3.I/O输入输出实验:利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示。
四、实验原理
8255是一个通用可编程并行接口电路。它具有A、B、C三个8位并行口。其中C口也可用作A、B口的联络信号及中断申请信号。通过编程,它可以被设置为基本输入输出、选通输入输出以及双向传送方式。对于C口还具有按位置0、1的功能。
图4.1 可编程并行接口8255芯片接口电路
14欢迎下载
。
精品文档
D7 1 (特征位) D6 D5 D4 D3 C口高4位 0=输出 1=输入 位选择 D2 D1 D0 C口低4位 0=输出 1=输入 0=复位 1=置位 A组方式 1X=方式2 A口 1=输入 B组方式 B口 0=方式0 0=输出 1=方式1 1=输入 00=方式0 01=方式1 0=输出 0 (特征位) 不用 000=C口0位……111=C口7位 表4.1 8255 控制字
五、实验步骤
1.流水灯实验
图4.2 流水灯实验连线图
模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。 模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0~PA7连到发光二极管的L0~L7;8255的PB0~PB7连到发光二极管的L8~L15。 运行程序,观察发光二极管。
2.交通灯实验
模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。 模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0-L7、PA1-L6、PA2-L5、PA3-L3、PA4-L2、PA5-L1。
15欢迎下载
。
精品文档
运行程序,观察发光二极管。
图4.3 交通灯实验连线图
六、实验源码
1 流水灯
MY_STACK ; MY_DATA
SEGMENT PARA 'DATA'
;PCI卡9054芯片I/O基地址暂存空间 ;PCI卡I/O基地址暂存空间
IO_9054base_address DB 4 DUP(0) IO_base_address DB 4 DUP(0) pcicardnotfind GOOD LA LB
DB DB
MY_STACK
SEGMENT PARA 'STACK' DB ENDS
100 DUP(?)
DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$' ? ?
0000H 0001H 0002H 0003H
P8255_A DW P8255_B DW P8255_C DW P8255_MODE DW
DELAY_SET EQU 1FFFH MES2
16欢迎下载
。
DB ' ENDs
PCI CONFIG READ ERROR! $'
MY_DATA
精品文档
MY_CODE MY_PROC
SEGMENT PARA 'CODE' PROC
FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
START: .386 ;386模式编译 MOV MOV MOV MOV MOV CALL
MOV ; MOV
ADD ADD ADD ADD MOV MOV OUT
MOV
MOV OUT MOV MOV MOV OUT MOV CALL A1: MOV
ROR
AX,MY_DATA DS,AX ES,AX AX,MY_STACK SS,AX FINDPCI
;自动查找PCI卡资源及IO口基址 CX,word ptr IO_base_address CX,0E800H ;直接加入(E800:本机PCI卡IO口基址) P8255_A,CX
;PCI卡IO基址+偏移
P8255_B,CX P8255_C,CX P8255_MODE,CX
DX,P8255_MODE ;8255初始化,三个口全为输出 AL,80H DX,AL
DX,P8255_A
;PA口赋初值
AL,7FH DX,AL LA,AL DX,P8255_B ;PB口赋初值
AL,0FEH DX,AL LB,AL DELAY AL,LA ;PA 口数据右移一位
AL,1
17欢迎下载。
精品文档
MY_PROC ;
MOV MOV OUT MOV ROL MOV MOV OUT CALL JMP ENDp
LA,AL DX,P8255_A DX,AL AL,LB AL,1 LB,AL DX,P8255_B DX,AL DELAY A1
;延时 ;按任意键退出
;PB口数据右移一位
CALL BREAK
;***************************************************************************** ; ; DELAY
PROC NEAR PUSHF PUSH PUSH MOV DEC JNZ DEC JNZ POP POP POPF RET ENDp
DX CX
DX,DELAY_SET CX,-1 CX D2 DX D1 CX DX
;延时程序
/* 延时子程序 */
;*****************************************************************************
D1: MOV
D2: DELAY ;
;***************************************************************************** ;
/* 按任意键退出子程序 */
18欢迎下载
。
精品文档
;***************************************************************************** ; BREAK RETURN: BREAK ;
PROC NEAR MOV MOV INT JE MOV INT RET ENDP
AH,06H DL,0FFH 21H RETURN AX,4C00H 21H
2 交通灯
MY_STACK MY_DATA
SEGMENT PARA 'DATA'
;PCI卡9054芯片I/O基地址暂存空间 ;PCI卡I/O基地址暂存空间
IO_9054base_address DB 4 DUP(0) IO_base_address DB 4 DUP(0) pcicardnotfind GOOD
P8255_A DW P8255_B DW P8255_C DW P8255_MODE DW
0000H 0001H 0002H 0003H
MY_STACK
SEGMENT PARA 'STACK' DB ENDS
100 DUP(?)
DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'
DELAY_SET EQU 0FfffH DELAY_SET1 EQU 08ffH MES2 MY_DATA MY_CODE MY_PROC
PROC
FAR
19欢迎下载
。
DB ' PCI CONFIG READ ERROR! $'
ENDs
SEGMENT PARA 'CODE'
精品文档
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK MOV MOV MOV MOV MOV CALL MOV MOV ADD ADD ADD ADD MOV MOV OUT MOV
DX,P8255_A
;全为红灯
;南北为绿灯,东西为红灯 ;南北黄灯闪烁,东西为红灯 ;南北为红灯,东西为绿灯 ;南北为红灯,东西黄灯闪烁
ST1 ST2 ST3 ST4 BREAK TRAFFIC1
;CALL ST0 ;CALL DELAY CALL CALL CALL CALL JMP ENDp
;CALL DELAY ;CALL DELAY
DX,P8255_MODE AL,80H DX,AL
;3个口全部为输出
P8255_A,CX P8255_B,CX P8255_C,CX P8255_MODE,CX
;PCI卡IO基址+偏移
AX,MY_DATA DS,AX ES,AX AX,MY_STACK SS,AX FINDPCI
;自动查找PCI卡资源及IO口基址 ;直接加入(E800:本机PCI卡IO口基址)
CX,word ptr IO_base_address CX,0E800H
START: .386
;386模式编译
;
;
TRAFFIC1: CALL
MY_PROC
;***************************************************************************** ;
/*初始状态全为红灯*/
;*****************************************************************************
20欢迎下载
。
精品文档
; ST0
PROC NEAR MOV OUT CALL RET ENDp
AL,1BH DX,AL DELAY
ST0 ; ; ; ST1
;*****************************************************************************
/*南北为绿灯,东西为红灯子程序*/
;*****************************************************************************
PROC NEAR MOV MOV OUT CALL RET ENDp
DX,P8255_A AL,33H DX,AL DELAY DELAY
; CALL
ST1 ; ; ; ST2
;*****************************************************************************
/*南北黄灯闪烁,东西为红灯子程序*/
;*****************************************************************************
PROC NEAR MOV MOV OUT CALL MOV OUT CALL LOOP RET ENDp
CX,5H AL,2BH DX,AL DELAY AL,3BH DX,Al DELAY ST20
ST20:
ST2 ;
;*****************************************************************************
21欢迎下载
。
精品文档
; ; ST3
/*南北为红灯,东西为绿灯子程序*/
;*****************************************************************************
PROC NEAR MOV OUT CALL RET ENDp
AL,1EH DX,AL DELAY
;CALL DELAY
ST3 ; ; ; ST4 ;
;*****************************************************************************
/*南北为红灯,东西黄灯闪烁子程序*/
;*****************************************************************************
PROC NEAR MOV MOV OUT CALL MOV OUT CALL LOOP RET ENDp
AL,1DH DX,AL DELAY AL,1FH DX,AL DELAY ST40
CX,5H
ST40:
ST4
;***************************************************************************** ; ; DELAY
PROC NEAR PUSHF PUSH PUSH MOV
DX CX
DX,DELAY_SET CX,-1
22欢迎下载
。
/* 延时子程序 */
;*****************************************************************************
;延时程序
D1: MOV
精品文档
D2: DELAY DELAY1
DEC JNZ DEC JNZ POP POP POPF RET ENDp
CX D2 DX D1 CX DX
PROC NEAR PUSHF PUSH PUSH MOV DEC JNZ DEC JNZ POP POP POPF RET ENDp
DX CX
;延时程序
DX,DELAY_SET1 CX,-1 CX D4 DX D3 CX DX
D3: MOV
D4: DELAY1 ;
;***************************************************************************** ; ; BREAK
PROC NEAR PUSHF PUSH PUSH MOV MOV INT JE
AX DX AH,06H DL,0FFH 21H RETURN
23欢迎下载
。
/* 按任意键退出子程序 */
;*****************************************************************************
;按任意键退出
精品文档
MOV AX,4C00H INT 21H RETURN: POP DX POP AX
POPF
RET
BREAK ENDP
;
24欢迎下载。
精品文档
实验五 可编程定时器/计数器实验
一、实验目的
1. 掌握8254定时/计数器的编程方法。 2. 学习8254的几种工作方式。
3. 了解计数器的硬件连接及时序关系。
二、实验设备
PC机一台,实验箱
三、实验内容
1. 将32Hz的晶振频率作为8254 的时钟输入,利用定时器 8254 产生 1Hz 的方波,用发光二极管显示输出结果(发光二极管闪烁)。
2 .用开关控制结束程序执行,发光二极管熄灭。
四、实验原理
8254是一种可编程的定时器/计数器芯片,它具有3个独立的16位计数器通道,每个计数器都有6种工作方式,6种工作方式主要有5点不同:一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出的波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器是否恢复计数初值并自动重复计数过程的不同。
图5.1 可编程定时器/计数器8254管脚图
对8254的编程分两部分:
首先向控制字寄存器写入方式控制字,然后向指定的通道写入计数值。 方式控制字格式如下:
25欢迎下载
。
精品文档
D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD 其中:
SC1、SC0用来选择计数器通道; M2、M1、M0用来选择工作方式;
RL1、RL0用来选择读计数值及向计数器送入数据的方式;
BCD用来选择二进制计数或十进制计数。当此位为0时,为二进制计数;当此位为1时,为BCD码十进制计数。
五、实验步骤
1.按照实验内容设计实验连线图,正确连接线路。 2.编写实验程序,调试运行程序。
3.观察发光二极管闪烁情况,修改程序使8254输出不同频率的方波信号。
图5.2 8254定时器/计数器实验连线图
六、实验源码
; 8254 接74244 输入02H结束程序 ;POWERD BY ZLW MY_STACK
26欢迎下载
。
SEGMENT PARA 'STACK' DB ENDS
100 DUP(?)
MY_STACK
精品文档
MY_DATA SEGMENT PARA 'DATA'
;PCI卡9054芯片I/O基地址暂存空间 ;PCI卡I/O基地址暂存空间
IO_9054base_address DB 4 DUP(0) IO_base_address DB 4 DUP(0) pcicardnotfind GOOD
P8254_T0 DW 0000H P8254_T1 DW 0001H P8254_T2 DW 0002H P8254_MODE DW 0003H LS244 DW 0020H MY_DATA MY_CODE MY_PROC
SEGMENT PARA 'CODE' PROC MOV MOV MOV MOV MOV CALL MOV MOV ADD ADD ADD ADD ADD MOV MOV OUT MOV
AX,MY_DATA DS,AX ES,AX AX,MY_STACK SS,AX FINDPCI
FAR
ENDs
DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
MAIN: .386
;386模式编译
;自动查找PCI卡资源及IO口基址 ;直接加入(E800:本机PCI卡IO口基址) ;PCI卡IO基址+偏移
CX,word ptr IO_base_address CX,0E800H P8254_T0,CX P8254_T1,CX P8254_T2,CX P8254_MODE,CX LS244,CX DX,P8254_MODE AL,37H DX,AL
27欢迎下载
。
;
;写入方式控制字
;计数器0,先读写低位,后读写高位, ;方式3,BCD码计数
DX,P8254_T0
精品文档
;
MOV OUT MOV OUT CALL JMP ENDp
AL,20H DX,AL AL,00H DX,AL BREAK NEXT
;初值低8位 ;初值高8位
NEXT: MY_PROC
;***************************************************************************** ; ; BREAK
PROC NEAR PUSHF PUSH PUSH
AX DX
;按任意键退出
/*按任意键退出*/
;*****************************************************************************
;MOV AH,06H ;MOV DL,0FFH ;INT 21H ;JE RETURN MOV IN CMP JE JMP MOV OUT MOV INT POP POP POPF RET
DX,LS244 AL,DX AL,0020H EXEC_EXIT RETURN
DX,P8254_MODE AL,31H DX,AL AX,4C00H 21H DX AX
;写入方式控制字
;计数器0,先读写低位,后读写高位,
;读取开关状态
EXEC_EXIT: MOV
RETURN: ;
BREAK ENDP
28欢迎下载
。
精品文档
实验六 键盘显示实验
一、实验目的
1. 熟悉并掌握系统中扩展键盘与显示接口的方法。 2. 掌握键盘显示的工作原理和编程的方法。
二、实验设备
PC机一台,实验箱
三、实验内容
1. 编写键盘扫描程序,当有某一键按下时,将该键按照定义的字符(‘0’-’F’)显示在计算机屏幕上。
2. 编写LED驱动程序,在四个LED上循环显示数字 ’0’ - ’9’。
四、实验原理
1.键盘接口
独立式键盘每个按键各接一根输入线,通过检测输入线的电平状态可以很容易判断哪个按键被按下了。因此编程简单,但输入口多,电路结构繁杂。适用于按键较少或操作速度较高的场合。
矩阵式键盘由行线和列线组成,按键位于行、列的交叉点上,一个4*4的行、列结构可以构成一个含有16个按键的键盘。节省I/O口。行、列线分别接到按键的两端。行线通过上拉电阻接到+5V上。按键的识别一般采用扫描法。让所有的列线处于低电平,当有键按下时,按键所在的行电平将被拉成低电平,进一步判定哪一列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线处于高电平。 2.七段数码管显示方法
静态显示方法:当显示器显示某一字符时,相应的发光二极管恒定地导通或截止。这种显示方式的各位相互独立,公共端恒定接地(共阴极)或接+5V(共阳极)。每位的8段(a~dp)分别与一个8位I/O口地址相连,I/O只要有段码输出相应的字符即显示出来,并保持不变,直到I/O输出新的数码。采用静态显示方式,较小的电流就能得到较高的亮度,但占用的口线较多,适合于显示器位数较少的场合,当显示位数较多时一般采用动态显示。 动态显示方法:就是一位一位轮流点亮各位显示器(位扫描)。通常各位显示器的段选码相应并联在一起,由一个8位的I/O口控制。而各位的位选线(共阴或共阳极)分别由相应的I/O口线的不同位控制,分时选通。采用动态扫描即在同一时刻只选通一个显示器,并送出相应的段码,而在下一时刻再选通另一个显示器,并送出相应的段码,如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符在不同时刻分别显示的,但由于人眼有视觉暂留现象,只要每位显示间隔足够短,就可以给人同时显示的感觉。
五、实验步骤
1.按照键盘与显示实验连线图连接电路
8255模块的WR、RD分别连到ISA总线接口的IOWR、IORD。
8255模块的数据线(AD0~AD7)地址线(A0~A7)分别连到ISA总线接口的数据(LD0~LD7)、地址线(LA0~LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
29欢迎下载
。
精品文档
8255的PA0~PA7连到键盘显示模块的KD0~KD7;8255的PB0~PB3连到键盘显示模块的KL1~KL4;PC0~PC3连到键盘显示模块的KH1~KH4。 2.运行程序1,观察计算机屏幕显示结果。 3.运行程序2,观察数码管的变化。
4.运行程序3,按动4*4键盘,观察数码管显示结果。
图6.1键盘与显示电路 图6.2键盘与显示实验连线图
六、实验源码
MY_STACK SEGMENT PARA 'STACK' DB 100 DUP(?) MY_STACK ENDS
MY_DATA SEGMENT PARA 'DATA'
IO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间 IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间
pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'
P8255_A DW 0000H P8255_B DW 0001H P8255_C DW 0002H P8255_MODE DW 0003H
KVL DB 2 DUP(?) ;击键次数备份,键值 PT DB ? ;显示缓冲区指针 DSBUF DB 4 DUP(?) ;显示缓冲区 KD DB ? ;数码管数据信号 KH DB ? ;键盘行信号
KL DB ? ;键盘列信号、数码管位选信号 KVA DB ? ;键值备份
KVB DB ? ;在闪烁子程序中保存显示器原有的数据
30欢迎下载
。
精品文档
COUNT2 DB ? ;击键次数 COUNT4 DB ? ;连续击键次数
KTB DB 48H ;0 键码 DB 44H ;1 DB 34H ;2 DB 24H ;3 DB 42H ;4 DB 32H ;5 DB 22H ;6 DB 41H ;7 DB 31H ;8 DB 21H ;9 DB 11H ;A DB 12H ;B DB 14H ;C DB 18H ;D DB 28H ;E DB 38H ;F DB 00H ;10
SGTB DB 0C0H,0F9H,0A4H,0B0H,099H,92H,82H DB 0F8H,080H,90H,88H,83H,0C6H,0A1H DB 86H,8EH,0FFH,8CH,89H,8EH,0BFH,0F7H MY_DATA ENDs
MY_CODE SEGMENT PARA 'CODE'
MY_PROC PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK START:
.386 ;386模式编译
MOV AX,MY_DATA MOV DS,AX MOV ES,AX
MOV AX,MY_STACK MOV SS,AX
CALL FINDPCI ;自动查找PCI卡资源及IO口基址 MOV CX,word ptr IO_base_address
; MOV CX,0E800H ;直接加入(E800:本机PCI卡IO口基址)
ADD P8255_A,CX ;PCI卡IO基址+偏移 ADD P8255_B,CX
31欢迎下载
。
精品文档
SSS: START1: ;
START2: START3: MY_PROC
CHAG CHAG1: CHAG CHAG2: BLINK BLINK1:
ADD P8255_C,CX ADD P8255_MODE,CX
MOV DX,P8255_MODE
MOV AL,81H OUT DX,AL MOV BX,OFFSET DSBUF MOV PT,BL
MOV DSBUF,15H MOV DSBUF+1,10H MOV DSBUF+2,10H MOV DSBUF+3,10H CALL BLINK3 CALL CHAG JMP START2
ENDp
PROC NEAR MOV BH,00H MOV BL,PT
MOV AL,COUNT4
MOV [BX],AL CMP BX,OFFSET [DSBUF+3] JNZ CHAG2
mov BX,OFFSET DSBUF MOV PT,BL RET ENDp
INC BL MOV PT,BL
JMP CHAG1 PROC NEAR MOV CX,100H MOV BH,00H MOV BL,PT MOV Al,[BX] MOV KVB,AL MOV AL,10H MOV [BX],AL CALL
DSKS
;写8255控制字A、B输出,C输入
;_ ;空格
;键盘扫描、显示子程序、光标闪动 ;转数字键处理程序
;转下一轮处理程序
;键值送到显示缓冲区中 ;键值送到显示缓冲区中
;熄灭显示器时间常数
;保存原显示器数据 ;填入熄灭显示器的码 ;键盘扫描
32欢迎下载。
精品文档
BLINK2: CMP COUNT4,10H
JNZ BLINK6 ;键按下返回
LOOP BLINK1 ;没键按下继续循环 MOV AL,KVB
MOV BL,PT
MOV [BX],AL
BLINK3: MOV CX,150H ;点亮显示器时间常数 BLINK4: CALL DSKS
BLINK5: CMP COUNT4,10H
JNZ BLINK7 ;键按下返回
LOOP BLINK4 ;没键按下继续循环 JMP BLINK
BLINK6: MOV AL,KVB ;恢复原显示器中的数据 MOV BL,PT MOV [BX],AL BLINK7: RET BLINK ENDp ;
;***************************************************************************** ; /*键盘扫描处理程*/
;***************************************************************************** ;
DSKS PROC NEAR ;键盘扫描处理程序 PUSH CX
CALL DSUP ;显示 CALL KBS ;键盘扫描
MOV AL,KVL+1 ;取上次按键键值 CMP KVA,AL ;与本次键值相比 MOV AL,KVL ;按键次数 MOV COUNT2,AL MOV AL,KVL
MOV COUNT4,AL JZ DSKS1
MOV COUNT2,0FFH ;不相等,重新赋值 MOV COUNT4,0FFH DSKS1: DEC COUNT4
CMP COUNT4,0E0H ;为E0? JZ DSKS3
CMP COUNT4,0EH ;为0E? JZ DSKS3
CMP COUNT4,00H ;为00? JZ DSKS2
MOV COUNT4,10H ;赋值 DEC COUNT2
33欢迎下载
。
精品文档
JMP DSKS4
DSKS2: MOV COUNT4,0FH ;按下键时间足够长则为连续击键 DSKS3: MOV AL,COUNT4 MOV COUNT2,AL MOV AL,KVA
MOV COUNT4,AL DSKS4: MOV AL,COUNT2 MOV KVL,AL MOV AL,KVA
MOV KVL+1,AL ;备份键值 MOV AL,COUNT4 POP CX
RET DSKS ENDp ;
;***************************************************************************** ; /*显示程序*/
;***************************************************************************** ;
DSUP PROC NEAR PUSH CX
MOV CX,04H ;显示器个数 MOV KL,01H ;选中的显示器 MOV BX,OFFSET DSBUF DSUP2: MOV AL,00H
MOV DX,P8255_B ;关闭显示器 OUT DX,AL
MOV AL,[BX] ;取显示缓冲区中的数据 PUSH BX MOV AH,00H MOV DI,AX
MOV BX,OFFSET SGTB ;编码 MOV AX,[BX+DI] MOV AH,00H
POP BX
MOV DX,P8255_A ;送显示器显示 OUT DX,AL
INC BX MOV AL,KL
MOV DX,P8255_B ;送位选信号 OUT DX,AL SAL AL,1
MOV KL,AL ;下一位 PUSH CX
34欢迎下载
。
精品文档
MOV CX,-1 LOOP $
POP CX LOOP DSUP2 POP CX MOV AL,00H
MOV DX,P8255_B ;关闭显示器 OUT DX,AL RET DSUP ENDp ;
;***************************************************************************** ; /*键盘扫描程序*/
;***************************************************************************** ;
KBS PROC NEAR ;键盘扫描程序 MOV DX,P8255_A ;清显示器 MOV AL,0FFH OUT DX,AL
MOV CX,04H ;送列数
MOV KL,0FEH ;扫描列初始值 KBS1: MOV AL,KL
MOV DX,P8255_B ;逐列清零 OUT DX,AL SAL AL,1 MOV KL,AL
MOV DX,P8255_C ;读行信号 IN AL,DX NOT AL AND AL,0FH
CMP AL,00H ;是否有键按下 JNZ KBS2
LOOP KBS1 ;没键扫描下一列 KBS2: MOV BX,CX
MOV CX,04H ;拼装键号 SAL BX,CL MOV CX,BX OR AL,CL MOV KVA,AL
MOV DI,10H ;键盘个数 MOV BX,OFFSET KTB KBS3: MOV AL,[BX+DI]
CMP AL, KVA ;计算键值,无键按下返回00H JNZ KBS5
35欢迎下载
。
精品文档
KBS4: MOV AX,DI
MOV KVA,AL ;保存键值 CALL BREAK RET KBS5: DEC DI MOV AX,DI CMP AL,00H JNZ KBS3 JMP KBS4 KBS ENDp ;
;***************************************************************************** ; /*按任意键退出*/
;***************************************************************************** ;
BREAK PROC NEAR ;按任意键退出 PUSHF
PUSH AX PUSH DX MOV AH,06H MOV DL,0FFH INT 21H JE RETURN MOV AX,4C00H INT 21H RETURN: POP DX POP AX POPF RET BREAK ENDP ;
36欢迎下载
。
精品文档
实验七 A/D转换实验
一、实验目的
掌握0809A/D转换芯片的硬件电路和软件编程。
二、实验设备
PC机一台,实验箱
三、实验内容
1.本实验利用实验板上的ADC0809做A/D转换实验,将电位器模拟信号通过IN0输入,然后转换成数字信号并在屏幕上显示,调节电位器观察屏幕上显示的变化。
2.将开关K0作为模拟信号通过IN1输入,然后转换成数字信号并在屏幕上显示,拨动开关观察屏幕上显示的变化。
3.两个通道同时输入,编程分时采样两个通道的数据,实时在屏幕上显示。
四、实验原理
1.ADC0809的主要性能:
ADC0809是CMOS的8位逐次逼近型模/数转换器,可对8路0~5V的输入模拟电压信号分时进行转换。输出具有三态锁存功能。主要性能:
分辨率:8位,转换时间:100μs。不可调误差:±1LBS,功耗:15mW。工作电压:+5V,参考电压标准值+5V。ADC0809片内无时钟,一般需外加640KHz以下且不低于100KHz的时钟信号。
2.ADC0809转换时序:
首先输入地址选择信号,在ALE信号作用下,地址信号被锁存,产生译码信号,选中一路模拟量输入。然后输入启动转换控制信号START(不小于100ns ),启动A/D转换。转换结束,数据送三态门锁存,同时发出EOC信号,在允许输出信号控制下,再将转换结果输出到外部数据总线。
图7.1 ADC0809转换时序图
37欢迎下载
。
精品文档
五、实验步骤
1.按照A/D转换实验连线图连接电路
图7.2 A/D转换实验连线图
信号源模块短路262.14KHz,CLK0连到AD0809模块的时钟输入端ADCLK。 AD0809模块的ADWR、ADRD连到分别连到ISA总线接口模块的IOWR、IORD。 AD0809模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
AD0809模块选通线ADCS连到ISA总线接口模块的0020H。 AD0809模块IN0接到电位器的DCOUT。
2.编写并运行程序,调节电位器观察屏幕的变化。
六、实验源码
MY_STACK MY_DATA
SEGMENT PARA 'DATA'
;PCI卡9054芯片I/O基地址暂存空间 ;PCI卡I/O基地址暂存空间
IO_9054base_address DB 4 DUP(0) IO_base_address DB 4 DUP(0) pcicardnotfind GOOD MESS
MY_STACK
SEGMENT PARA 'STACK' DB ENDS
100 DUP(?)
DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$' DB 0DH,0AH,'The AD result is ',0DH,0AH,'$' DW
0020H
38欢迎下载
。
AD0809
精品文档
DELAY_SET DIDATA MY_DATA MY_CODE MY_PROC MAIN: .386
EQU 0FFH DB
;延时常数 ;要显示的数据
?
ENDs
SEGMENT PARA 'CODE' PROC
FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
;386模式编译
MOV MOV MOV MOV MOV CALL MOV MOV ADD MOV MOV INT MOV
DIDATA,00H
MOV DX,AD0809 MOV AL,00H OUT CALL IN CMP CALL JZ CALL JMP ENDP
DX,AL DELAY AL,DX BREAK STARTAD DSUP
;显示
STARTAD
;转换结束读取结果
;如果是原来的数据不刷新显示
AL,DIDATA
;启动AD转换
AD0809,CX AH,09H 21H
;PCI卡IO基址+偏移 ;显示提示信息
DX,offset MESS AX,MY_DATA DS,AX ES,AX AX,MY_STACK SS,AX FINDPCI
;自动查找PCI卡资源及IO口基址 ;直接加入(E800:本机PCI卡IO口基址)
CX,word ptr IO_base_address CX,0E800H
;
STARTAD:
MY_PROC ;
;*****************************************************************************
39欢迎下载
。
精品文档
; ; DSUP
/*显示子程序*/
;*****************************************************************************
PROC PUSH MOV MOV SHR CALL MOV AND CALL CALL POP POPF RET ENDP PROC CMP JG ADD JMP ADD MOV INT RET ENDP PROC MOV MOV INT RET ENDP
NEAR DL,0DH AH,02H 21H
;回车
NEAR AL,09H SEND1 AL,30H SEND2 AL,37H AH,0EH 10H
NEAR CX DIDATA,AL CX,04 AL,CL SEND AL,DIDATA AL,0FH SEND CR CX
;低位
;取高位
PUSHF
DSUP SEND
SEND1: SEND2: CR ;
SEND
CR
;*************************************************************** ;
/*延时子程序*/
*
40欢迎下载
。
精品文档
;*************************************************************** ; DELAY
PROC NEAR PUSHF PUSH PUSH MOV DEC JNZ DEC JNZ POP POP POPF RET ENDp
DX CX
DX,DELAY_SET CX,-1 CX D2 DX D1 CX DX
;延时程序
D1: MOV
D2: DELAY ;
;***************************************************************************** ; ; BREAK
PROC NEAR PUSHF PUSH PUSH MOV MOV INT JE INT POP POP POPF RET
AX DX AH,06H DL,0FFH 21H RETURN AX,4C00H 21H DX AX
;按任意键退出
/*按任意键退出*/
;*****************************************************************************
RETURN: ;
EXEC_EXIT: MOV
BREAK ENDP
41欢迎下载
。
精品文档
42欢迎下载
。
精品文档
欢迎您的下载, 资料仅供参考!
打造全网一站式需求
43欢迎下载。
致力为企业和个人提供合同协议,策划案计划书,学习资料等等