实验一 熟悉汇编语言程序开发过程
一、实验目的
1.熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试器等)的使用。
2.在程序调试过程中,学习及掌握调试器CodeView的各种操作命令,掌握程序的调试方法及技巧。
二、实验内容
用查表法求0~9之间某个整数的平方,设该数x及结果y均存放在内存中,在数据段定义一个平方表table。
1.建立源程序asm文件
用Windows的记事本输入以下源程序:
data segment
table db 0,1,4,9,16,25,36,49,64,81
x db ?
y db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea bx,table
mov al,x
mov ah,0
add bx,ax
mov al,[bx]
mov y,al
mov ah,4ch
int 21h
code ends
end start
2.BUFFER单元有一字节数据,将它拆开,低四位送L单元,高四位送H单元,编写程序实现以上功能,调试通过。
data segnment
buffer db 0f8h
l db ?
h db ?
data ends
code segnment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov al,buffer
and al,0fh
mov l,al
mov al,buffer
mov cl,4
shr al,cl
mov h,al
mov ah,4ch
int 21h
code ends
end start
二、实验总结:
1.用汇编程序masm对源文件汇编产生目标文件obj
masm demo.asm
Microsoft (R) MASM Compatibility Driver
Copyright (R) Microsoft Corp 1991. All rights reserved
Invoking: ML.EXE/I. /Zm /C /Ta demo.asm
Microsoft (R) Macro Assembler Version 6.00
Copyright (R) Microsoft Corp 1981-1991. All rights reserved
Assembling: demo.asm
2.用连接程序link产生执行文件exe
link demo
Microsoft (R) Segmented-Executalle Linker Version 5.13
Copyright (R) Microsoft Corp 1984-1991. All rights reserved
Run File [demo.exe]: ↙
List File [NUL.MAP]: ↙
Libraries [.LIB]: ↙
Definitions File [NUL.DEF]: ↙
LINK: warning L4021: no stack segment
↙表示按Enter键,得到可执行程序demo.exe。
也可用汇编器ML,它可以自动调用LINK。应用命令:
ML demo.asm
依次进行汇编和连接,生成demo.obj和demo.exe。但源文件一定要是扩展名.asm,命令中不能省略扩展名.asm。
注意:用Windows记事本保存的源程序的扩展名若为.txt,使用ML进行汇编和连接前,先要在DOS下,用ren命令将源文件的扩展名改为.asm。
ren demo.txt demo.asm
3.执行程序
只要在DOS命令提示符下键入文件名即可执行程序。
四、总结调试器CodeView调试的方法
用调试器CodeView调试程序
(1) 进入CodeView
先执行mouse驱动程序,这样进入调试程序后可以使用鼠标操作。
cv demo
此时已将执行程序装入内存,进入CodeView,屏幕显示CodeView的菜单、窗口、帮助/状态条,CodeView能记住上一次运行时打开的窗口,按下Alt_W键将打开 Windows菜单,可选择表示窗口的菜单,以激活相应的窗口。一般同时打开“Source”(源程序)、“Memory”(内存)、“Register”(寄存器)、“Command”(命令)等窗口,必要时,可以同时打开两个“Memory”(Memory 1和Memory2)。
可用CodeView命令进行程序调试。
(2) 在“Source”(源程序) 窗口查看源程序和对应的机器码,注意查看第一条指令mov ax,xxxx (data),xxxx即为当前数据段段地址DS的值。白底行为CS:IP所指的指令行。
(3) 在“Register”(寄存器) 窗口查看或修改各寄存器的值,也可以用寄存器命令R显示或修改。
(4) 在“Memory”(内存)窗口查看数据段的数据,鼠标移至段地址处按左键,光标在该字符下闪烁,键入新的值修改段地址值,使它指向当前DS(源程序窗口查看到的值xxxx),从而查看数据段指定内存单元的值。
(5) 在“Memory”(内存)窗口直接修改内存单元的值,只要将光标移到相应字节处,键入新的十六进制值即可,输入变量x(地址应为DS:000a)的值,如送入05。
(6) 程序运行
实验三 循环程序设计
一、实验目的
1.进一步熟悉调试器CodeView的各种操作命令,掌握程序的调试方法及技巧。
2.加深对循环结构的理解。
3.掌握循环结构程序设计和调试的方法。
二、实验内容
1.用计数器控制循环
统计某数据区内负数的个数,设数据区的第一个单元存放数据区内单元数据的个数,从第二个单元开始存放数据,结果存入NUMB单元。为统计数据区内负数的个数,需要逐个判断数据区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得数据区内所包含负数的个数。
实验程序如下: DATA SEGMENT
BUFF DB 10,10H,88H,78H,9AH,24H,5H,0D8H,0FAH,38H,9H
NUMB DB ?
DATA ENDS
STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA 。
MOV DS,AX
MOV ES,AX
LEA DI,BUFF
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A1: MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2: INC DI
LOOP A1
MOV [DI],BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
图3-1 程序流程图
2.按问题的条件控制循环
编制程序,使S=1+2×3+3×4+4×5+?N(N+1),直到N(N+1)项大于200为止,实验程序流程如图3-2所示
程序如下:
code segment
assume cs:code
start: mov dx,1
mov bl,2
a: mov al,bl
inc bl
mul bl
add dx,ax
cmp ax,200
jna a
mov ah,4ch
int 21h
code ends
end start
三:实验总结:总结循环程序中控制循环的方法
实验十一 存储器接口实验
一、实验目的 1.了解62256 RAM特性。 2.掌握存储器扩展和存储器读/写方法,通过硬件电路的分析,掌握地址译码的方法。 3.熟悉EAT598实验教学系统的基本操作。
二、实验内容
利用62256扩充RAM,地址为00000-07FFFH,编写一个程式,将62256的前十个存储单元依次送入数据0~9,再对其进行读操作校验。
程序如下:
code segment
assume cs:code
start: mov ax,0
mov ds,ax
mov si,0
mov cx,10
a2: mov [si],al
mov ah,[si]
cmp al,ah
jne a1
inc si
inc al
loop a2
mov bl,0
jmp a3
a1: mov bl,0eh
a3:jmp a3
code ends
end start
三、实验总结
EAT598实验教学系统的9芯仿真机通讯口与PC机的串行口用串行通讯电缆相连,仿真实验板上的拨动开关SB1,拨到下端,切换到88实验模式(后面的硬件接口实验同)。
(1) 打开实验教学系统电源(实验箱右边的开关),将实验箱中央的电源开关切向ON,在PC机桌面上点击LCA88图标,启动LCA88调试软件。
(2) 连机:选择“设置——实验机/仿真机”菜单项,在弹出的对话框中,设置实验机/仿真机加载的段地址和偏移地址。选择“设置——通讯口”菜单项,在弹出的对话框中,选择相应的通讯串口和通讯波特率。点击测试串口按钮,检查通讯口是否可用。当通讯正常,
实验箱的LED显示为AedK- 86。
(3) 程序编辑:选择“文件——新文件”菜单项,将新建一个空的编辑窗口。在编辑窗口中输入程序,输入完毕,选择“文件——另存为”菜单项,把该文件保存为ram.asm。也可以直接选择“文件——打开”菜单项打开该文件。
(4) 汇编和连接:选择“编译——编译并连接”菜单项,将编译并连接当前活动窗口中的源文件,编译结果的信息显示在输出窗口中,可以根据输出窗口中错误信息直接定位到源文件的相应位置。编译连接成功后生成EXE文件。
(5) 选择“调试——加载调试”菜单项,加载当前活动窗口中的源文件所产生的目标文件到实验教学系统(加载空间从8100:0开始)。“设置——实验机/仿真机”菜单项中若选择了“编译连接成功后自动加载到实验机”,则上步编译连接成功后自动将EXE文件加载到实验教学系统。
(6) 选择“调试/对话窗口”菜单项,打开一个与AEDK 8688实验教学系统直接对话的窗口,可以使用实
验机/仿真机监控命令和实验教学系统对话。显示提示符“#”, 以表示监控程序正等待接收命令进来。
(7) 在“调试”菜单选项中,断点调试、全速运行等功能调试程序。
1) 断点调试
有以下方法来设置断点达到中止程序执行目的:
·执行到光标所在行 热键F4
·按暂停按钮
LCA88ET调试软件提供一次性断点:执行到光标所在行。按热键F4,调试程序继续执行程序代码,直到它到达光标行处。
2) 全速运行 热键F9
(8) 查看结果
移动鼠标到源程序窗中相应的寄存器上,将出现一个提示窗口,显示这寄存器的当前值。 在对话窗口,用DW0000:0000命令显示存储器前80H个单元内容,检查写入是否正确。
实验十三 8255A并行接口实验
一、实验目的 1.学习并掌握8255A的各种工作方式及其应用。 2.学习在接口实验单元上构造实验电路。 3.掌握8255A 工作于中断方式的应用。
二、实验内容
编写程序,使8255A端口B工作在方式0并作为输入口,端口A工作在方式0并作为输出口。 sy13
code segment
assume cs:code
start: mov al,82h
mov dx,213h
out dx,al
a1: mov dx,211h
in al,dx
mov dx,210h
out dx,al
jmp a1
code ends
end start
三、记录实验中观察到的现象,并加以解释。
四、实验总结:总结8255A可编程并行接口芯片的编程方法。
实验十五 8253定时器/计数器应用编程
一、实验目的
1.熟悉8253在系统中的典型接法。
2.掌握8253的工作方式及应用编程。
二、实验内容
编程将8253的计数器0设置为方式2(分频),计数器1设置为方式2(分频),计数器2设置为方式3(方波),输出频率为0.5Hz。
code segment
assume cs:code
start: mov al,35h;计数器0设置
mov dx,22bh
out dx,al
mov al,72h;计0装初值
mov dx,228h
out dx,al
mov al,30h
out dx,al
mov al,55h
mov dx,22bh
out dx,al
mov al,10h
mov dx,229h
out dx,al
mov al,97h
mov dx,22bh
out dx,al
mov al,10h
mov dx,22ah
out dx,al
a1:jmp a1
code ends
end start
三、记录实验中观察到的现象,并加以解释。
四、总结8253可编程计数器/定时器芯片的编程方法。
第二篇:微机原理及接口技术 实验报告 9200字
微机原理及接口技术
实验报告
学 院: 信息工程学院 专业班级: 通 信 0801 姓 名:学 号:
实验一 多位十进制数相加实验
一.实验目的
1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.掌握数据传送和算术运算指令的用法。
二.实验内容
将两个多位十制数28056,47193相加,并显示加数,被加数,和。要求加数和被加数均以ASCII码形式各自顺序存放在DATAl和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。
三.程序流程图
四.参考程序
SHOW MACRO B
MOV DL,B
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
DATA3 DB ‘__’, 0DH,0AH,’$’
DATA ENDS
STACK SEGMENT STACK
STA DB 20 DUP (?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2
MOV BX,05
SHOW 20H
CALL DISPL
SHOW 0DH
SHOW 0AH
MOV SI,OFFSET DATA1
MOV BX,05
SHOW 2BH
CALL DISPL
SHOW 0DH
SHOW 0AH
MOV CL,7
S1: SHOW 2DH
LOOP S1
SHOW 0DH
SHOW 0AH
MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL ADDA
MOV SI,OFFSET DATA1 MOV BX,05
SHOW 20H
CALL DISPL
MOV AX,4C00H
INT 21H
DISPL PROC NEAR
DS1: SHOW [SI+BX-1]
DEC BX
JNZ DS1
RET
DISPL ENDP
ADDA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,05
AD1: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30H DEC BX
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,05
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL
AAA
MOV [SI],AL
INC SI
INC DI
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,05
AD3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H DEC BX
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
四.实验过程
进入DOS环境,进入E盘MASM子目录,键入:
E: 回车
CD: MASM 回车
EDIT *.ASM 回车(*为程序名)
打开编辑窗口将汇编语言源程序输入
对源程序进行汇编链接,执行并调试可执行文件
六.思考题
不改变数据段DATA1和DATA2的内容,如何将加数与被加数分别由28056和47193变成65082和39174,并且相加
答:源程序不变将
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
后加上
DATA4 DB 37H,34H,31H,39H,33H
DATA5 DB 32H,38H,30H,35H,36H
并将全部DATA1和DATA2全部改成DATA4和DATA5
就可以实现
七、实验感想:
通过本实验,基本学会了数据传送和算术运算指令的用法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。
实验二 统计数据个数实验
一.实验目的
掌握将多位十六进制数转换成多位十进制数ASCII码的方法
二.实验内容
统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数
三.程序流程图
四.参考程序
DATA SEGMENT
ARY DB 1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3 DB -4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4 DB 2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7 N=$-ARY
LRESULT DW 0
HRESULT DW 0
TJJG DB ‘STATISTICS RESULT:’,0DH,0AH,’$’ DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS, AX
MOV ES, AX
SHOW MACRO B
PUSH DX
PUSH AX
MOV AH,02H
INT 21H
POP AX
POP DX
ENDM
XOR CX,CX
MOV CX,N
LEA SI,ARY
LOP: MOV AL,[SI]
CMP AL,0
JNS PLUS
INC LRESULT
JMP CONT
PLUS: INC HRESULT
CONT: INC SI
LOOP LOP
LEA DX,TJJG
MOV AH,09H
INT 21H
SHOW ‘+’
MOV AX,HRESULT
CALL DISPL
SHOW 0DH
SHOW 0AH
SHOW ‘-‘
MOV AX,LRESULT
CALL DISPL
MOV AX,4C00H
INT 21H
DISPL PROC
PUSH DX
PUSH AX
MOV CX,10
MOV DX,00H
MOV BX,00H
DIV CX
MOV BX,DX
ADD AL,30H
DISPL1: MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
POP AX
POP DX
RET
DISPL ENDP
CODE ENDS
END START
五.实验过程
进入E盘的MASM子目录,打开编辑窗口将汇编语言源程序输入,对源程序进行汇编链接,执行并调试可执行文件
六.思考题
试分析程序中语句“MOV CX,N”执行后,赋给CX寄存器的值是多少?
答:赋给CX的值是63
七、实验感想:
通过本实验,基本学会了数据传送和算术运算指令的用法及将多位十六进制数转换为多位十进制数ASCII码得方法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。
实验三 直流电机测速实验
一. 实验目的:
1.掌握8254的工作原理和编程方法
2.了解光电开关的使用方法,掌握用光电传感器测量电机转速的方法
二. 实验内容
光电测速的基本电路由光电传感器、计数器和定时器组成。测量时在被测电机主轴上固定一个圆盘,圆盘的边缘上打上小孔。传感器的红外发射端和接收端装在圆盘的两测,电机带动圆盘转到有孔的位置时,红外光通过,红外接收管导通,输出低电平。红外光被挡住时接收管截止,输出高电平。用计数器记录在一定时间内传感器发出的脉冲个数就可以计算出电机转速。
三. 线路连接
接线方法:8254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0接1MHZ脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。GATE0、GATE2均接+5V,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端相连,GATE1与8255的PC0相连。电机DJ端与+5V~0V模拟开关SW1相连。
四. 编程提示
8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成10~60秒定时器,测量脉冲个数,算出电机每分钟的转速并显示在屏幕上。
8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。
五. 流程图
六. 参考程序
DATA SEGMENT
IOPORT EQU 0D880H-0280H
IO8255K EQU IOPORT+283H
IO8255A EQU IOPORT+280H
IO8255C EQU IOPORT+282H
IO8254K EQU IOPORT+28BH
IO82542 EQU IOPORT+28AH
IO82541 EQU IOPORT+289H
IO82540 EQU IOPORT+288H
MESS DB ‘STRIKEANY KEY,RETURN TO DOS!’,0AH,0DH,’$’ COU DB 0
COU1 DB 0
COUNT1 DB 0
COUNT2 DB 0
COUNT3 DB 0
COUNT4 DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,09H INT 21H
MOV DX,IO8254K MOV AL,36H OUT DX,AL
MOV DX,IO82540 MOV AX,50000 OUT DX,AL NOP
NOP
MOV AL,AH OUT DX,AL
MOV DX,IO8255K MOV AL,90H OUT DX,AL
MOV DX,IO8255C MOV AL,00 OUT DX,AL LL: MOV AH,01H INT 16H JNZ QUIT1
MOV DX,IO8254K MOV AL,70H OUT DX,AL
MOV DX,IO82541 MOV AL,0FFH OUT DX,AL NOP
NOP
OUT DX,AL
MOV DX,IO8254K MOV AL,90H OUT DX,AL
MOV DX,IO82542 MOV AL,100 OUT DX,AL
MOV DX,IO8255C MOV AL,01H OUT DX,AL JMP A0 QUIT1: JMP QUIT
A0: MOV DX,IO8255A A1: IN AL,DX AND AL,01H
JZ A1
MOV DX,IO8255C MOV AL,00H OUT DX,AL
MOV DX,IO8254K MOV AL,70H OUT DX,AL
MOV DX,IO82541 IN AL,DX MOV BL,AL IN AL,DX MOV BH,AL
MOV AX,0FFFFH SUB AX,BX CALL DISP MOV DL,0DH MOV AH,02 INT 21H
MOV DL,0AH MOV AH,02 INT 21H JMP LL
DISP PROC NEAR MOV DX,0000H MOV CX,03E8H DIV CX
MOV COUNT1,AL MOV AX,DX MOV CL,64H DIV CL
MOV COUNT2,AL MOV AL,AH MOV AH,00H MOV CL,10 DIV CL
MOV COUNT3,AL MOV COUNT4,AH MOV AL,COUNT1 CALL DISP1
MOV AL,COUNT2 CALL DISP1
MOV AL,COUNT3 CALL DISP1
MOV AL,COUNT4
CALL DISP1
RET
DISP ENDP
DISP1 PROC NEAR
AND AL,0FH
CMP AL,09H
JLE NUM
ADD AL,07H
NUM: ADD AL,30H
MOV DL,AL
MOV AH,02
INT 21H
RET
DISP1 ENDP
QUIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
七. 实验结果
八. 思考题
关闭电机后,为什么8254计数不为0?
答:关闭电机后,但主机未断电,计数值锁存在锁存器中,所以读数会一直为锁存器的值,8254计数不会显示0
九.实验感想
通过本实验,基本掌握了8254的工作原理和编程方法,了解了光电开关,掌握了用光电传感器测量电机转速的方法。同时,也进一步提高了自己实践动手的能力,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。
实验四 十字路口红绿灯闪烁实验
一.实验目的
通过对红、绿、黄灯的控制,熟练掌握8255A接口芯片的编程方法。
二.实验内容
对8255A接口芯片进行编程,使红,黄,绿发光二极管按照十字路口交通灯的形式点亮或熄灭。
三.线路连接
南
图2交通十字路口及信号
发光二极管共8个,其中两组绿,黄,红灯用6个,L2、L3、L4为一组,L5、L6、L7为一组;实验台连接如图4.3所示。高电平“1”时,点亮。
四.流程图
五.参考程序
DATA SEGMENT
IOPORT EQU 0D880H-280H
IO8255C EQU IOPORT+282H
IO8255T EQU IOPORT+283H
PB DB ?
MESS DB ‘ENTER ANY KEY CAN EXIT TO DOS!’,0DH,0AH,’$’ DATA ENDS
STACK SEGMENT STACK
STA DW 50 DUP(?)
TOP EQU LENGTHSTA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,09H
MOV DX,OFFSET MESS INT 21H
MOV DX,IO8255T MOV AL,81H OUT DX,AL
MOV DX,IO8255C IN AL,DX
MOV PB,AL
MOV DX,IO8255T MOV AL,80H OUT DX,AL
MOV DX,IO8255C MOV AL,PB
OR AL,0CH OUT DX,AL
MOV AL,30H OUT DX,AL
CALL DELAY10 LLL: MOV DX,IO8255C MOV AL,12H OUT DX,AL
CALL DELAY10 CALL DELAY10 CALL DELAY10 CALL DELAY10 MOV AL,10H OUT DX,AL
MOV CX,0040H TTT: MOV AL,0CH OUT DX,AL
PUSH CX
MOV CX,80H LOP1: CALL DELAY1 LOOP LOP1
MOV AL,00H OUT DX,AL
MOV CX,80H LOP2: CALL DELAY1 LOOP LOP2
POP CX
LOOP TTT
MOV AL,30H
OUT DX,AL CALL DELAY10 MOV AL,21H OUT DX,AL CALL DELAY10 CALL DELAY10 CALL DELAY10 CALL DELAY10 MOV AL,20H OUT DX,AL MOV CX,0040H GGG: MOV AL,0CH OUT DX,AL PUSH CX MOV CX,80H LOP3: CALL DELAY1 LOOP LOP3 MOV AL,00H OUT DX,AL MOV CX,80H LOP4: CALL DELAY1 LOOP LOP4 POP CX LOOP GGG MOV AL,30H OUT DX,AL CALL DELAY10 MOV AH,06H MOV DL,0FFH INT 21H JNZ PPP JMP LLL
PPP: MOV AX,4C00H INT 21H
DELAY1 PROC NEAR PUSH CX
MOV CX,0FFFFH CCC: LOOP CCC POP CX RET
DELAY1 ENDP
DELAY10 PROC NEAR PUSH AX PUSH CX
MOV CX,0F00H UUU: CALL DELAY1 LOOP UUU
POP CX
POP AX+*+* RET
DELAY10 ENDP
CODE ENDS
END START
六. 实验结果
1、汇编成功
2、 经测试灯是按照指定规律变化
七. 实验现象
红黄绿变化的规律为:两个路口红灯全亮;南北路口绿灯亮,东西路口红灯亮;南北路口绿灯灭,东西路口红灯亮;两个路口黄灯闪烁;两个路口红灯全亮;东西路口绿灯亮,南北路口红灯亮;东西路口绿灯灭,南北路口红灯亮;两个路口黄灯闪烁;依次从头到尾循环出现
八. 思考题 :程序中红,绿,黄灯点亮和熄灭的延时时间是如何设
定的?
答:通过用延时子程序CALL DELAY 10的次数来设定
九. 实验感想
通过本实验,基本掌握了8255A接口芯片的编程方法,熟悉了DOS环境,同时,也进一步提高了自己的实践动手能力,并且对微机原理及接口技术这门课程有了更深的了解和认识。