汇编语言与接口技术实验_第1页
汇编语言与接口技术实验_第2页
汇编语言与接口技术实验_第3页
汇编语言与接口技术实验_第4页
汇编语言与接口技术实验_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言与接口技术实验课件第1页,课件共79页,创作于2023年2月汇编语言调试环境使用说明

利用Editplus和汇编相关软件建立起基于Windows-XP平台的汇编语言集成调试环境,对我们学习汇编语言、开发汇编软件将十分方便,它将我们学习汇编程序时的编辑、编译、调试等工具集成于一体。一、Editplus的安装和必要设置:

1、将压缩软件“EDITPLUS.RAR”解压到c:\EDitPLUS目录下

2、用鼠标点击图标:

安装EDITPLUS到C:\EDITPLUS目录下。

3、用鼠标点击图标:

完成注册码的输入。

4、将压缩软件“MASM615.RAR”解压到c:\EDitPLUS目录下,即完成安装。

5、用鼠标双击桌面上的图标:

或选

开始

程序

EDITPLUS

EDITPLUS2,出现如下界面:第2页,课件共79页,创作于2023年2月文件夹下的源程序列表(汇编程序文件的后缀为ASM或SRC)选择用户编程文件夹用户程序编辑区输出窗口文件列表中文件名后缀第3页,课件共79页,创作于2023年2月每个窗口的大小可由鼠标进行缩放输出窗口可由鼠标控制进行缩放,其他窗口同样第4页,课件共79页,创作于2023年2月安装Editplus主要菜单的设置第一次安装Editplus必须进行必要的设置第5页,课件共79页,创作于2023年2月首先对“文件”中的“设置与语法”规则进行设置汇编程序文件名的后缀一般为“asm”或“src”为“汇编语言”添加文件类型第6页,课件共79页,创作于2023年2月其次对“文件”中的“模板”进行设置为“汇编语言”添加模板汇编语言模板的文件名第7页,课件共79页,创作于2023年2月设置用户工具用户工具应添加:编译(汇编)工具调试工具帮助文件(可选)请记住:编译(汇编)工具的参数设置第8页,课件共79页,创作于2023年2月请记住:调试工具的参数设置第9页,课件共79页,创作于2023年2月帮助文件根据需要颗可选第10页,课件共79页,创作于2023年2月以上设置完成后关闭Editplus,重新启动Editplus,即可以对汇编语言程序进行编辑、编译、调试及运行第11页,课件共79页,创作于2023年2月从源程序列表中打开要编辑、调试的文件第12页,课件共79页,创作于2023年2月主要菜单的使用对源程序的编译和连接对目标程序的调试帮助文件第13页,课件共79页,创作于2023年2月源程序调试软件的使用

源程序窗口寄存器窗口命令行窗口第14页,课件共79页,创作于2023年2月源程序调试工具常用命令介绍窗口介绍:源程序调试工具的窗口共有十个:

0.HelpALT+01.LocalsALT+12.WatchALT+23.Source1ALT+3(★★★★★)

4.Source2ALT+45.Memory1ALT+5(★★★

6.Memory2ALT+67.RegisterALT+7(★★★★★)

8.8087ALT+89.CommandALT+9(★★★★★)用鼠标点击Windows菜单可看到这10个窗口,要打开某个窗口,用鼠标选择对应项即可。激活窗口:将鼠标移动到当前窗口并点击鼠标左键,此时该窗口边框变亮,表明当前窗口被激活。移动窗口:将鼠标放在被激活窗口左边框线或上边框线上,并按住鼠标左键移动鼠标,则可移动当前窗口的位置。关闭窗口:将鼠标放在被激活窗口的左上方边框“◙”处,单击鼠标左键则关闭当前窗口。第15页,课件共79页,创作于2023年2月功能键:F2:寄存器窗口的开/关F3:在源程序方式和汇编方式之间切换F4:切换到输出屏幕F5:执行到下一个断点或到程序结束(没断点)F6:激活各调试窗口F7:在光标所在行设置一个临时断点,并执行到该行F8:执行跟踪命令F9:在光标所在行设置或清除一个断点(双击鼠标左键功能相同)F10:执行ProgramStep命令PgUp:上卷一页PgDn:下卷一页Home:上卷到文件或命令缓冲区顶部End:下卷到文件或命令缓冲区底部命令行常用命令的使用:T:相当于F8

P:相当于F10G:相当于F5

D[type]:显示内存内容E[type]:修改内存内容R[寄存器名]:显示并修改寄存器内容Q:退出调试工具第16页,课件共79页,创作于2023年2月实验一

BCD码的运算

一.实验目的

1.熟悉在Ediplus集成环境下编辑、编译、调试编语言程序的全过程。

2.掌握汇编语言程序结构中数据段、堆栈段、代码段定义及内存分配方法。

3.学会源程序调试工具主要命令的使用方法。

4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。二.实验内容

1.多位十进制数加法。

2.两位十进制数乘法。三.实验要求

1.多位十进制数加法:在内存中以DATA1和DATA2为首址,各分配5个字节单元,分别存入两个8位组合BCD码数据(低位在前),将两数相加,结果送回到DATA2处。

2.两位十进制数乘法:将被乘数和乘数以组合BCD码形式分别存放于DATA1和DATA2定义的字节单元中,经乘法运算,乘积存入DATA3定义的两个内存单元中。

3.用汇编调试工具查看运算结果,进行手工验证;并且用汇编调试工具中的相关修改DATA1和DATA2,并重新执行。第17页,课件共79页,创作于2023年2月关于BCD码扩充知识Intel助记符使用术语“ASCII”

称作不压缩的BCD码,而使用“十进制数”则称为压缩BCD码。不压缩的BCD码不压缩的BCD码由在每一个字节的低四位包含一个十进制数字的字节组成,Intel系列处理器提供了调整不压缩值的四种算术操作指令:加法操作后调整———AAA;AsciiAdjustforAddition减法操作后调整———AAS;AsciiAdjustforSubtraction乘法操作后调整———AAM;AsciiAdjustforMultiply除法操作后调整———AAD;AsciiAdjustforDivision压缩的BCD码压缩的BCD码由包含两个十进制数字的字节组成:一个在高四位,另一个在低四位,Intel系列处理器提供了对进行加和运算的压缩BCD数调整指令:加法操作后调整———DAA;DecimalAdjustforAddition减法操作后调整———DAS;DecimalAdjustforSubtraction今天实验所讲的“BCD码的运算”是指压缩BCD码的运算。搞清计算机中压缩BCD码、十六进制码的概念举例:在内存中定义了两个数据,分别为data1=78H、data2=78H,其中data1为组合的BCD码,data2为16进制数,则有:

data1的十进制、十六进制为:78(十进制),4EH(十六进制)

data2的十进制、十六进制为:120(十进制),78H(十六进制)第18页,课件共79页,创作于2023年2月多位十进制数加法

.modelsmall.datadata1db11h,22h,33h,44h,00hdata2db99h,88h,77h,66h,00h.code.startupmovsi,offsetdata1;设指针

movdi,offsetdata2 clc ;清进位

movcx,5 ;设加法次数lop: moval,[si] ;取第一加数

adcal,[di] ;取第二加数

daa ;十进制调整

mov[di],al;结果存入指定单元

incsi ;指针加1incdi looplop ;循环

.exitend

流程图:开始SIData1首址DIData2首址清进位设加法次数十进制调整;部分和回送指向下单元数AL第一加数ALAL+第二加数CX-1=0?结束YN第19页,课件共79页,创作于2023年2月两位十进制数乘法:如34*56=?

编程思路:1.把56循环叠加34次;每叠加一次进行一次BCD

码的加法调整;

2.34为组合的BCD码,在计算机中的存放形式

为:00110100b

3.必须将组合BCD码34H转换成十六进制才可进

行循环叠加:

34H(BCD码)

30H+4

30H/10H*0AH+4

34(d)

22H

第20页,课件共79页,创作于2023年2月两位十进制数乘法流程图:开始BL第一乘数BH第一乘数分离出第一乘数的“个位”分离出第一乘数的“十位”第一乘数的“十位”移到“个位”后,再乘10合成得到16进制的第一乘数CX16进制的第一乘数BCD码转换成16进制数11AX0清进位BL第二乘数第二乘数做加法次数十进制调整AL与AH内容交换ALAL+0+CFALAL+BLAL与AH内容交换十进制调整CX-1=0?NY存储结果结束第21页,课件共79页,创作于2023年2月

一、实验目的

掌握循环结构程序的设计、调试。二、实验内容1.多字节无符号数加法。2.设计一软件延时器,并在屏幕上显示软件延时倒计时及正计时过程。3.试编写一个程序,延时大约1秒,在屏幕上按99、98、97、96、……、00的顺序显示倒计时的全过程。(可选作)

实验三循环结构程序第22页,课件共79页,创作于2023年2月三、实验要求1.多字节无符号加法:在DATAS中存放10个双字节无符号数,用循环结构设计程序,通过程序运算,把这10个双字节无符号数相加,其和存入RESULT定义的四个字节单元当中,要求用16位寄存器完成编程(范例为用32寄存器实现)。2.设计一软件延时器,并在屏幕上显示16进制(F—0)倒计时及正计时及(0—F)过程。(范例:做一延时约1秒的软件延时器,在屏幕上按9、8、…0顺序显示软件延时倒计时过程。)对于“学号”为奇数的同学在计算机屏幕上的显示如图1所示。对于“学号”为偶数的同学在计算机屏幕上的显示如图2所示。3.可参考实验2的编程完成编程。FEDCBA98765432100123456789ABCDEF0FEDCBA9876A5B4C3D2E1F0图1图2第23页,课件共79页,创作于2023年2月补充知识:关于循环语句的高级语法目前的MASM中引入了一系列的伪指令,涉及条件测试、分支和循环语句,有了它们,汇编语言有了和高级语言一样的结构。关于循环语句的伪指令有:

.while条件测试表达式指令

[.break[.if退出.while条件]][.continue].endw;-----------------------------------.repeat

指令

[.break[.if退出.while条件]][.continue].until条件测试表达式(或.untilcxz[条件测试表达式])第24页,课件共79页,创作于2023年2月通过今天的实验应顺便掌握子程(过程)序的编写及调用子程序结构:

procedure_namePROC[距离][USES寄存器列表]LOCAL局部变量列表

·

·

汇编语言指令

·RET;子程序的返回

procedure_nameENDP

;子程序的结束距离:NEAR,FAR,NEAR16,NEAR32,FAR16,FAR32。缺省为NEAR

USES寄存器列表:由编译器在子程序指令开始前自动安排PUSH这些寄存器的指令,并在RET前自动安排POP指令,用于保护执行环境。注意在子程序中也可用80386以后的指令PUSHA、POPA、PUSHAD、POPAD也十分方便。

LOCAL局部变量列表:局部变量列表必须放到子程序中所有汇编语句的最前面。常用的局部变量类型有:byte、word、dword等。

}第25页,课件共79页,创作于2023年2月扩充知识关于空操作(NOP)指令空操作(NOP)是所有指令中最简单的,正如它的名字所暗示的那样:无论在情况下它什么也不操作。NOP不影响标志、寄存器及存储单元,它仅仅让指令指针(IP)增加。

NOP有许多用途,如,在你不想重新汇编程序而删除一条指令时,可以用90H(NOP)来填充相应的单元;又如我们本实验所用到的,在你要测试程序的最后一条指令后加入一条NOP指令,然后在此设置一条断点,以次方便用户程序的调试。当然随着编程水平的提高,还有其他用途,这里不做深入讲解。了解DOS下的系统功能调用系统功能调用:系统功能调用是DOS为方便汇编语言编写而提供的一组约80个功能调用的常用子程序,它分为设备管理、文件管理和目录管理等几类。DOS规定用软中断指令INT21H进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号,以便进入相应各用子程序的入口。系统功能调用的使用方法:指定的寄存器入口参数AH调用功能的功能号INT21H第26页,课件共79页,创作于2023年2月EX1:从键盘输入单字符

MOVAH,01H;1号功能调用

INT21H将键盘输入字符的ASCII码送到AL。EX2:从键盘输入字符串

BUFDB10DUP(?)

LEADX,BUFMOVAH,0AH;0A号功能调用

INT21H将键盘输入的字符串写到RAM中去,击回车键表示字符串结束。字符数与予留空间的关系为:少补零多丢失。EX3:输出单字符

MOVDL,’M’MOVAH,02H;2号功能调用

INT21H将DL中字符从屏幕上显示出来。EX4:输出字符串

BUFDB‘Thankyou$’

MOVDX,OFFSETBUFMOVAH,09H;9号功能调用

INT21H将指定RAM缓冲区中的字符串从屏幕上显示出来。‘$’为字符串结束符。EX5:直接控制台输入/输出单字符

MOVDL,0FFH;DL=0FFH时,

MOVAH,06H;6号功能调用

INT21H;将键盘输入字符送到AL中。

MOVDL,’M’;DL≠0FFH时,

MOVAH,06H;6号功能调用

INT21H;将DL中字符送到屏幕上显示。…………第27页,课件共79页,创作于2023年2月多字节无符号数加法

.MODELSMALL.586.DATADATASDW1111H,2222H,3333H,4444H,5555HDW6666H,7777H,8888H,9999H,0AAAAHRESULTDD?.CODE.STARTUPMOVSI,OFFSETDATAS ;设指针

MOVCX,10 ;累加次数

MOVEAX,0 ;清累加器

CLC

;清进位LOP:MOVBX,[SI]

;取加数到BX

MOVZXEBX,BX ;将BX扩展成32位

ADCEAX,EBX ;带进位加

INCSI ;改指针

INCSI

LOOPLOP ;循环加

MOVRESULT,EAX ;存结果

.EXIT

END开始SIDATAS的首址CX累加次数EAX0清进位BXSI所指加数将BX扩展为32位EAXEAX+EBX+CFSI指向下一加数CX-1=0?NY存结果

结束第28页,课件共79页,创作于2023年2月软件延时器.modelsmall.datamydatadb10dup(20h)numdb39h,0dh,0ah,'$'.code.startup movcx,0ah ;设循环次数lop: movah,09h ;显示功能调用

leadx,mydata int21h callnearptrdelay;调用延时子程序

decnum ;修改显示数字

looplopnop .exitnopDelayprocnearusescx;延时子程序

movbx,06ffh;设第二时常数Delay1:movcx,0h loop$ ;自身循环CX次

decbx ;第二时常数减1 jnzdelay1 ;不为零循环

retDelayendpend开始CX循环次数字符串显示功能调用延时子程序调用显示数字修改CX-1=0?NY结束主程序流程:延时子程序流程:延时子程序定义BX第二时常数CX第一时常数CX-1=0?NYBX-1BX=0?NY子程序返回子程序结束关键词第29页,课件共79页,创作于2023年2月实验四

排序程序

一.实验目的

1.学习无符号数比较大小指令;

2.掌握多重循环编程方法;

3.掌握汇编语言编写排序程序的思路和方法。二.实验内容

1.单字节无符号数排序。

2.去极值滤波。三.实验要求

1.单字节无符号数排序:在DATANUM单元存放双字节无符号数,表示要排序数据的个数,而从DATAS单元开始存放要排序的单字节无符号数据,数据个数至少10个。程序运行之后,这些数据按照由大到小的顺序仍然存放于DATAS单元开始的单元。

2.去极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连续6个A/D采样值(12位——双字节,低12位),要求去掉最大值和最小值,将余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完成这个滤波过程。第30页,课件共79页,创作于2023年2月单字节无符号数排序流程图:开始数据指针SI置0累加器前数

前数与后数比较前数≤后数?前、后数交换数据指针SI指向下一数YNCX-1=0?NYYBX-1=0?N结束CXBXBX数据个数-1第31页,课件共79页,创作于2023年2月.modelsmall.datadatanumdw10datasdb21h,13h,4h,5h,7h,6h,0F9h,20h,9h,11h.code.startupmovbx,datanum;取数据的个数到BXdecbx;BX-1为循环次数lop0:movcx,bx;设内循环次数movsi,0;设置寻址的偏移量SI=0lop: moval,datas[si];取一个数Acmpal,datas[si+1];取下一个数B,比较A和Bjbejh;若A≤B,转到JHxchgal,datas[si+1];若A>B,交换A,Bmovdatas[si],aljh:incsi;偏移量SI+1looplop;CX-1≠0,继续内循环decbx;CX-1=0,内循环结束,外循环次数BX-1jnzlop0;BX≠0,继续外循环.exit;BX=0,排序结束end

第32页,课件共79页,创作于2023年2月去极值滤波注意与前面程序排序笔筒的地方:此排序为字的排序(16位),所以比较为16位数据比较,指针的移动为两个字节。开始调排序子程序对数据进行排序对排完序的数据掐头去尾求和求均值保存结果结束第33页,课件共79页,创作于2023年2月.modelsmall.586.datadatanumdb6datas dw0123h,0abch,0234hdw0345h,0456h,0567h.code .startup callpx ;排序

movsi,offsetdatas+2;掐头去尾送指针

movcx,4 ;送累加次数

clc ;清进位

movax,0 ;取首数qh: adcax,[si] ;累加

incsi incsi loopqh shrax,2;除4 mov[datas],ax;存结果到DATAS首位

nop.exitnoppx procnearmovbl,datanum;取字长

decblmovbh,0lop0:movcx,bx ;送比较次数

movsi,0lop: movax,datas[si];送前数

cmpax,datas[si+2];与后数比较

jbejh;若大于则跳转到jhxchgax,datas[si+2];交换

movdatas[si],axjh:incsi incsilooplopnext:decbl;修改比较次数

jzfinish jmplop0finish:nop;结束

ret pxendpend第34页,课件共79页,创作于2023年2月实验五分支程序一、实验目的掌握分支程序编程方法,复杂分支程序的查表法等。二、实验内容

1、

学生课程成绩分段统计。

2、

键盘及屏幕显示功能调用。三、实验要求

1、

学生课程成绩分段统计:用一个字节表示每个学生的学号,另一个字节存放压缩BCD码,表示学生的课程成绩(最低0分,最高99分),规定当课程成绩为0F0H表示作弊,当课程成绩为0F1H表示缺考,当学生的学号为0FFH时表示学生成绩统计的结束符。学生成绩在内存的存放形式为“学号,成绩”,每个学生占两个字节,从内存SCORE为首址开始存放。要求学生人数不少于10个,试编程序,按0~9、10~19、20~29、……、80~89、90~99及作弊、缺考等12种情况把学生的课程成绩进行分段统计,将统计结果存入以COUNT为首址的12个单元中。

2、试编一程序扫描键盘,当B键按下时,在屏幕上显示0~9循环计数;S键按下时停止计数;再按B键继续计数过程。E键按下时退出程序。

3、定义三个字节的正数(A、B、C),判断是否能构成三角形,如能,则显示“Yes!”,不能,则“No!”。(要构成三角形,必须满足两边之和大于第三边,即:B+C>A或A+C>B或A+B>C)*定义三组字节的正数(A1、B1、C1),(A2、B2、C2),(A3、B3、C3),请编程序判断这三组数据能否构成三个三角形,将三组数据判断的结果用“Yes!”或“No!”显示出来,用来表示能否构成三角形。

4、用DEBUG调试程序预置数据和查看程序运行结果,以验证程序正确性。

第35页,课件共79页,创作于2023年2月分支程序常由比较指令(CMP)和条件转移指令共同实现。

条件转移分带符号转移和不带符号转移。

转移指令的记忆技巧:

字母含义

J转移

G大于(带符号比较)

L小于(带符号比较)

A高于(无符号比较)

B低于(无符号比较)

E等于

N不

应注意的问题:

条件转移的跳转范围为:+128~

-127。

选择合适的转移指令,否则不能转移到一定的程序分支,特别要注意区分有符号数和无符号数的使用条件。

要为每个分支安排的出口,否则导致程序运行混乱。

在分支较多时,编程时各个分支的先后次序应与流程图一致,以减少编程出错的机会并便于检查。

在调试分支程序时,要假设各种可能的输入数据,并沿每个分支走一边,以检查程序的正确性。

第36页,课件共79页,创作于2023年2月学生课程成绩分段统计开始设置学号、成绩指针取学号取成绩是结束标志?取十分位,并将十分值扩展为16位送DI,对DI所指统计区段统计值加1是作弊?是缺考?修改指针CX-1=0?CX统计上限作弊统计区段统计值加1缺考统计区段统计值加1结束YYYYNNNN第37页,课件共79页,创作于2023年2月

.modelsmall.586.datascoredb1,10h,2,20h,3,30h,4,40h,5,50h,6,77h,7,70h db8,80h,9,90h,10h,08,11h,0f0h,12h,0f1h,0ffhcountdb12dup(?).code.startupmovcx,20 ;送统计上限

movsi,0 ;SCORE统计指针statistic:moval,score[si];取学号

cmpal,0ffh;判是否为结束

jesta_end ;转统计结束

movbl,score[si+1];取成绩

cmpbl,0f0h ;是否作弊

jefake ;是,转作弊处理

cmpbl,0f1h ;是否缺考

jemiss ;是,转缺考处理

shrbl,4 ;取十分位

movzxdi,bl;将十分值扩展为16位送DIinccount[di];相应区段统计值加1down:incsi;改指针

incsiloopstatistic ;循环sta_end:nop ;结束

.exitfake:inccount[10] ;作弊处理

jmpdown miss:inccount[11] ;缺考处理

jmpdown end第38页,课件共79页,创作于2023年2月键盘及屏幕显示功能调用开始显示提示信息置处理指针为“停止”调延时、键盘扫描程序有键动?转处理指针处B键?S键?E键?转处理指针处结束置处理指针为“计数”置处理指针为“停止”NYYYYNNN处理指针为“计数”处理指针为“停止”计数显示第39页,课件共79页,创作于2023年2月延时、键盘扫描程序子程序定义BX第二时常数CX第一时常数CX-1=0?NYBX-1BX=0?NY子程序返回监测键动有键动?做键动标志bx=1NY第40页,课件共79页,创作于2023年2月.modelsmall.dataMess1db'pressbbutton---count',0dh,0ahmess2db'presssbutton---stop',0dh,0ahMess3db'pressebutton---exit',0dh,0ah,'$'countdb20h,20h,20h,20h,20h,30h,0dh,'$'.code.startup movah,09h ;显示提示信息

movdx,offsetmess1 int21h leasi,stop ;设处理指针scan:callnearptrdelay;调延时、键扫程序

orbx,bx ;判有无键动

jnzscan1 ;有键动,转键处理

jmpsi ;无键动,转当前处理程序scan1:cmpal,'b‘;键处理程序

jeb_proc cmpal,'s' jes_proc cmpal,'e' jee_proc calldelay jmpsib_proc:leasi,count_ ;B键处理

jmpscans_proc:leasi,stop ;S键处理

jmpscane_proc:nop ;E键处理

nop.exitcount_:inccount+5 ;修改显示数字

moval,3ah ;比较超限

cmpal,count+5 jadown ;若不超限,调显示

movcount+5,30h ;超限,设启始值down:movah,09h ;显示功能调用

leadx,count int21h jmpscanstop:jmpscan nopDelayprocnearusescx ;延时子程序

movbx,380h ;设第二时常数delay1:movcx,0h loop$ ;自身循环CX次

movdl,0ffh ;监测键动

movah,06h int21h jnzkey_ret;若有键动,延时终止,转键处理

decbx ;第二时常数减1 jnzdelay1 ;不为零循环

jmpdelay_retkey_ret:movbx,1 ;做键动标志delay_ret:retDelay endpend第41页,课件共79页,创作于2023年2月硬件实验部分本部分共进行3次实验,实验内容如下:1实验六

并行接口技术实验

2实验七8254定时/计数器实验3实验九

A/D转换实验

(下面根据实验台实物介绍实验台)第42页,课件共79页,创作于2023年2月特别说明:为了方便实验,实验台设计时已将除片选信号线(CS)外的所有相关总线全部连好,并在每一个实验电路附近予留有实验内容要求的连线插孔。实验时只要将相应插孔用单股导线对应相连即可组成完整的实验电路。在给出的实验电路图中,线路所带小圆圈即表示连线插孔。硬件实验注意事项:1.在实验台确保断电的条件下,方可连接电路;2.线路连接完成、检查确认没有错误后,再开通实验台电源;3.用单股导线连接电路时,要将单股导线线头整直,并确认线头没有断裂,以防单股导线端头断裂在插孔内,影响下次试验的进行;4.实验完成后,首先关断实验台电源,再用手捏住导线的根部,一根一根拔出,并把导线整好放入实验箱右边的线盒内并盖好实验箱才可离开。5.实验报告必须画出原理框图,并概述其工作原理。第43页,课件共79页,创作于2023年2月实验六

并行接口技术实验

一.实验目的

1.掌握8255A并行接口的基本使用方法。

2.理解数码管扫描显示原理,学习数码管扫描显示方法。二.实验内容

1.用8255A作为并行接口,从8255A的A口的PA4—PA7输入四个开关量,B口通过74HC573与数码管的段位相连(a、b、c、d、e、f、g、dp分别对应B口的PB0、PB1、PB2、PB3、PB4、PB5、PB6、PB7)。试编写一个程序,从8255A的A口读入将这四个开关量的值,并根据其值的大小,通过8255A的B口连接的数码管显示出相应的十六进制值,即当A口输入为“0000xxxx”时,B口输出所数码管显示“0”,·

·

·

·

·

·,当A口输入为“1111xxxx”时,B口输出所数码管显示“F”

2.设8255A的A口B口均为输出方式,A口通过ULN2003驱动器接数码管的位选端;B口通过74HC573与数码管的段位相连(a、b、c、d、e、f、g、dp分别对应B口的PB0、PB1、PB2、PB3、PB4、PB5、PB6、PB7)。试编一动态扫描程序,让6个数码管“同时”点亮,显示每位学生自己的学号。(参考程序显示“123456”)3.参考程序2,编写一个倒计时程序(延时约1秒-2秒)的软件延时器,用两位LED动态显示出2F、2E、…00倒计时过程。三.实验电路及设计

1.实验电路图第44页,课件共79页,创作于2023年2月第45页,课件共79页,创作于2023年2月第46页,课件共79页,创作于2023年2月2.实验连线(1)逻辑电平开关输出孔K1~K6对应连接到8255A的PA0~PA5;(2)8255A的PB0~PB5对应连接到数码管的位选端JM1~JM6;(3)数据总线D0、D1、D2、D3、D4、D5、D6、D7对应连接到数码管的字划端a、b、c、d、e、f、g、dp;(4)8255A的片选端CS8255连到译码控制单元的0E200H--

0E203H;3.8255A的端口地址

PA口:0E200H

,PB口:0E201H,PC口:0E202H,控制寄存器:0E203H4.数码管编码表

“0”-3FH“1”-06H“2”-5BH“3”-4FH

“4”-66H“5”-6DH“6”-7DH“7”-07H

“8”-7FH“9”-6FH“A”-77H“B”-7CH

“C”-39H“D”-5EH“E”-79H“F”-71H

第47页,课件共79页,创作于2023年2月有关问题的说明数码管(共阴):ABCDEFGDPABCDEFGDP共阴地K数字DPGFEDCBA字型码0001111113FH10000011006H2010110115BH……K不闭合,数码管就点不亮第48页,课件共79页,创作于2023年2月多个数码管扫描显示:第49页,课件共79页,创作于2023年2月多个数码管扫描显示:限流电阻锁存器JM3、JM2、JM1谁为‘1’,谁连接的数码管就显示锁存器当前锁存的值所谓扫描显示是:对N个数码管:1.给锁存器送第1个数码管显示内容,而后第1个数码管公共端接低,延时2.给锁存器送第2个数码管显示内容,而后第2个数码管公共端接低,延时…N.给锁存器送第N个数码管显示内容,而后第N个数码管公共端接低,延时第N步后,再从1开始,周而复始。那么,JM3、JM2、JM1是互斥的了!连接数据总线D7~D0驱动器第50页,课件共79页,创作于2023年2月实验6-1电路示意图B口8255PA3PA2PA1PA0SK4SK3SK2SK1开关74HC573锁存器限流电阻D-busD7…D0SMGLTCS8255PB0-PB7KCPU第51页,课件共79页,创作于2023年2月开始初始化8255点亮一位数码管读键盘有键按下否?读8255A的A口数据,屏蔽高4位查表,得到相应的字型码通过8255A的B口输出字型码到LED显示结束YN第52页,课件共79页,创作于2023年2月.modelsmallCs8255equ0E200h;片选地址CS1p_ctlequ90h;8255控制字---A口入,B口出.datatabledb3fh,6h,5bh,4fh,66h;0,1,2,3,4;字型表

db6dh,7dh,07h,7fh,6fh,77h;5,6,7,8,9,Adb7ch,39h,5eh,79h,71h;B,C,D,E,F.code.startupmovdx,cs8255+3;8255初始化

movax,p_ctloutdx,axlop:movah,06h;键入任意结束程序的执行

movdl,0ffhint21h jnzscan_endmovdx,cs825;读开关

inal,dxandal,0fhmovbx,offsettable;读字型码

xlatmovdx,cs8255+1;B口输出

outdx,aljmplop ;循环扫描

scan_end:.exitend

实验6-1源程序第53页,课件共79页,创作于2023年2月实验6.2限流电阻

ULN2003驱动器COMDbusD7…D0CS573CS825574HC573锁存器COMCOMCOMCOMCOMABCDEFGDPA口B口PB0-PB7K1K3K4K5K6K2第54页,课件共79页,创作于2023年2月开始初始化8255查表取显示数字字型码显示字型码送锁存器(输出)扫描位数≥6?调延时CL初始扫描位置ALCL(显示数字)CL初始扫描位置读键盘有键动?结束NYYN延时子程序流程(略)取对应数码管字位、并输出CL+1(下一扫描位置)第55页,课件共79页,创作于2023年2月.modelsmallCs8255equ0E200h;片选地址CS1p_ctlequ80h;8255控制字--A口输出,B口输出.datatabledb3fh,06h,5bh,4fh,66h;0,1,2,3,4;字型表

db6dh,7dh,07h,7fh,6fh;5,6,7,8,9.code.startupmovdx,cs8255+3;发控制字

moval,p_ctl outdx,al movcl,1;设扫描位置lop: moval,cl;取显示数字

movbx,offsettable;读字型码

xlat movdx,cs8255+1;输出字型码

outdx,al moval,80hInccl roral,cl movdx,cs8255;输出字位

outdx,al cmpcl,6 jbedown;若显示位置大于6,返回启始位置

movcl,1down: calldelay movah,06;判有键动,跳出循环

movdl,0ffh int21h jnzscan_end jmplop;循环扫描scan_end:nop.exitnopdelayprocnear;延时子程序

pushcx movbx,02hdelay1: movcx,0h loop$ decbx jnzdelay1popcx retdelay endpend第56页,课件共79页,创作于2023年2月实验七

8254定时/计数器实验

一.实验目的

1.掌握8254定时/计数器的基本使用方法。

2.了解8254定时/计数器利用级连扩大计数范围的方法。

3.了解多I/O芯片协同工作的原理和方法。二.实验内容

1.将8254定时器0设置为方式2(分频),定时器1设置为方式3(方波),定时器0的CLK0端接1M或2M时钟,定时器0的输出脉冲作为定时器1的时钟输入。将定时器1的输出脉冲接在一个LED灯上或风鸣器上。编程使8254工作,观察灯的状态或风鸣器声响。

2.用8254做秒信号源,用8255A控制交通灯的红绿变化,完成一交通灯控制系统,使每10秒切换一次通行方向。三.实验电路及设计

1.实验电路图

第57页,课件共79页,创作于2023年2月第58页,课件共79页,创作于2023年2月第59页,课件共79页,创作于2023年2月第60页,课件共79页,创作于2023年2月第61页,课件共79页,创作于2023年2月第62页,课件共79页,创作于2023年2月2.“实验内容1”实验连线(1)8254的GATE0、GATE1接高电平;(2)8254T0的CLK0接1M或2M时钟孔;(3)8254T1的CLK1接T0的OUT0;(4)8254的片选端CS8254连到译码控制单元的0E204H—0E207H;(5)8254T1的OUT1接LED灯。

3.“实验内容2”实验连线以下连线假设8255A的A口为输入方式、B口为输出方式,8255A的PA1

连接8254T1的OUT1,8255A的B口控制交通灯的八只LED灯。(1)连线同“实验内容1”的(1)~(4);(2)8254T1的OUT1接8255A的PA1孔;(3)8255A的PB7~PB0对应连接到dp、g、f、e、d、c、b、a,它们对应交通灯的Wr、Er、Wg、Eg、Nr、Sr、Ng、Sg灯;(4)交通灯八只LED发光管的公共控制端JTD孔接高电平;(5)8255A的片选端CS8255连到译码控制单元的CS1(0E200H)。

第63页,课件共79页,创作于2023年2月4.8254和8255A的端口地址

8254的端口地址(CS2):定时器0分频系数寄存器:0E204H,定时器1分频系数寄存器:0E205H,控制寄存器:0E207H。

8255A的端口地址(CS1):

PA口:0E200H,PB口:0E201H,PC口:0E202H,控制寄存器:0E203H。

第64页,课件共79页,创作于2023年2月实验7.1开始初始化T0初始化T1装T0低字节计数初值结束装T0高字节计数初值装T1低字节计数初值装T1高字节计数初值第65页,课件共79页,创作于2023年2月;cs8253----CS2(0E204H—0E207H);clk0---1M;out0-----CLK1;out1----BJ或DL1;gate0---K1,令k1="1";gate1---K2,令k2="1";-------------------------------.MODELSMALLCS8253EQU0E204HT0_CTLEQU00110100B;对T0两次读写,先低后高。T0为方式2(分频)

T1_CTLEQU01110110B;对T1两次读写,先低后高。T1为方式3(方波).DATAT0_DATA

DB

0FFH,040HT1_DATA

DB

0FFH,0.CODE

.STARTUP MOVDX,CS8253+3;初始化T0 MOVAL,T0_CTL OUTDX,AL MOVDX,CS8253;给T0低字节装计数初值

MOVAL,T0_DATA OUTDX,AL MOVAL,T0_DATA+1;给T0高字节装计数初值

OUTDX,AL;----------------------------------- MOVDX,CS8253+3;初始化T1 MOVAL,T1_CTL OUTDX,AL MOVDX,CS8253+1 MOVAL,T1_DATA;给T1低字节装计数初值

OUTDX,AL MOVAL,T1_DATA+1;给T1高字节装计数初值

OUTDX,AL .EXIT END

第66页,课件共79页,创作于2023年2月开始8254T0初始化给8254T0装初值8254T1初始化给8254T1装初值8255初始化为A口入、B口出8255B口输出方向初值读8255PA1、测试8255PA1PA1=1?读8255PA1、测试8255PA1PA1=0?11控制换向8255B口输出方向值检查键盘有键盘动?结束YYYNNN实验7.2第67页,课件共79页,创作于2023年2月;cs8254----CS2:0E204H--0E207H;clk0---1M;out0--->clk1;out1--->8255_PA1;gate0---k1;gate1---k2;JTD-------+5V;CS8255---CS1:0E200H--0E203H(8255芯片的片选信号,即片选地址);(PB7..PB0)----(RE,RS,RW,RN,GE,GS,GW,GN);----------------------------------------- .MODELSMALL CS8254 EQU0E204H;计数器0寄存器地址,CS2 T0_CTLEQU00110101B;控制字:选择计数器0,读/写双字节,先低后高,方式2,十进制计数

T1_CTLEQU01110111B;控制字:选择计数器1,读/写双字节,先低后高,方式3,十进制计数

CS8255EQU0E200H;8255的A口地址,CS1 P_CTLEQU90H;8255的方式控制字A,B口均工作在方式0,A口输入,B口输出

.DATA T0_DATADB00H,50H;计数器0的计数值为5000H T1_DATADB00H,20H;计数器1的计数值为2000H dir_datadb01011010b;交通灯方向初值,0表明灯熄灭,1表明灯点亮,

;高半字节为红,低半字节为绿;顺序为东南西北

;D7--东红,D6--南红,D5--西红,D4--北红

;D3--东绿,D2--南绿,D1--西绿,D0--北绿

.CODE.STARTUP;-----------------------------------------------------------------------------------MOVDX,CS8254+3;写控制字(8254控制寄存器地址0E204H,即T8254+3)

MOVAL,T0_CTL OUTDX,AL;------------------------------------------------------------------------------------MOVDX,CS8254;写计数器0的计数值

MOVAL,T0_DATA;写低字节

OUTDX,AL; MOVAL,T0_DATA+1;写高字节

OUTDX,AL;;-----------------------------------------------------------------------------------MOVDX,CS8254+3;写8254控制字(8254控制寄存器地址0E204H,即T8254+3)

MOVAL,T1_CTL OUTDX,AL;----------------------------------------------------------------------------------MOVDX,CS8254+1;写计数器1的计数值

MOVAL,T1_DATA;写低字节

OUTDX,AL; MOVAL,T1_DATA+1;写高字节

OUTDX,AL;;----------------------------------------------------------------------------------movdx,CS8255+3;8255初始化---A入

moval,p_ctl outdx,al第68页,课件共79页,创作于2023年2月

movdx,cS8255+1;设方向初值

moval,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论