版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言与接口技术,西北工业大学计算机学院计算机硬件实验室,汇编语言调试环境使用说明,利用Editplus和汇编相关软件建立起基于Windows-XP平台的汇编语言集成调试环境,对我们学习汇编语言、开发汇编软件将十分方便,它将我们学习汇编程序时的编辑、编译、调试等工具集成于一体。 一、Editplus的安装和必要设置: 1、将压缩软件“EDITPLUS.RAR”解压到c:EDitPLUS目录下 2、用鼠标点击图标: 安装EDITPLUS到C:EDITPLUS目录下。 3、用鼠标点击图标: 完成注册码的输入。 4、将压缩软件“MASM615.RAR”解压到c:EDitPLUS目录下,即完成安装。
2、 5、用鼠标双击桌面上的图标: 或选开始程序EDITPLUS EDITPLUS 2 ,出现如下界面:,文件夹下的源程序列表(汇编程序文件的后缀为ASM或SRC),选择用户编程文件夹,用户程序编辑区,输出窗口,文件列表中文件名 后缀,每个窗口的大小可由鼠标进行缩放,输出窗口可由鼠标控制进行缩放,其他窗口同样,安装Editplus主要菜单的设置,第一次安装Editplus必须进行必要的设置,首先对“文件” 中的“设置与语法”规则进行设置,汇编程序文件名的后缀一般为“asm”或“src”,为“汇编语言”添加文件类型,其次对“文件” 中的“模板”进行设置,为“汇编语言”添加模板,汇编语言模板的文件名,
3、设置用户工具,用户工具应添加: 编译(汇编)工具 调试工具 帮助文件(可选),请记住: 编译(汇编)工具的参数设置,请记住: 调试工具的参数设置,帮助文件根据需要颗可选,以上设置完成后关闭Editplus ,重新启动Editplus,即可以对汇编语言程序进行编辑、编译、调试及运行,从源程序列表中打开要编辑、调试的文件,主要菜单的使用,对源程序的编译和连接,对目标程序的调试,帮助文件,源程序调试软件的使用,源程序窗口,寄存器窗口,命令行窗口,源程序调试工具常用命令介绍,窗口介绍:源程序调试工具的窗口共有十个: 0Help ALT+0 1. Locals ALT+1 2. Watch ALT+2
4、3. Source1 ALT+3() 4. Source2 ALT+4 5. Memory1 ALT+5( ) 6. Memory2 ALT+6 7. Register ALT+7() 8. 8087 ALT+8 9. Command ALT+9() 用鼠标点击Windows菜单可看到这10个窗口,要打开某个窗口,用鼠标选择对应项即可。 激活窗口: 将鼠标移动到当前窗口并点击鼠标左键,此时该窗口边框变亮,表明当前窗口被激活。 移动窗口: 将鼠标放在被激活窗口左边框线或上边框线上,并按住鼠标左键移动鼠标,则可移动当前窗口的位置。 关闭窗口: 将鼠标放在被激活窗口的左上方边框 “”处,单击鼠标左键
5、则关闭当前窗口。,功能键: F2:寄存器窗口的开/关 F3:在源程序方式和汇编方式之间切换 F4:切换到输出屏幕 F5:执行到下一个断点或到程序结束(没断点) F6:激活各调试窗口 F7:在光标所在行设置一个临时断点,并执行到该行 F8:执行跟踪命令 F9:在光标所在行设置或清除一个断点(双击鼠标左键功能相同) F10:执行Program Step命令 PgUp:上卷一页 PgDn:下卷一页 Home:上卷到文件或命令缓冲区顶部 End: 下卷到文件或命令缓冲区底部 命令行常用命令的使用: T :相当于F8 P :相当于F10 G :相当于F5 D type :显示内存内容 E type :修
6、改内存内容 R 寄存器名 :显示并修改寄存器内容 Q :退出调试工具,实验一 BCD码的运算,一实验目的 1.熟悉在Ediplus集成环境下编辑、编译、调试编语言程序的全过程。 2.掌握汇编语言程序结构中数据段、堆栈段、代码段定义及内存分配方法。 3.学会源程序调试工具主要命令的使用方法。 4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。 二实验内容 1.多位十进制数加法。 2.两位十进制数乘法。 三实验要求 1.多位十进制数加法:在内存中以DATA1和DATA2为首址,各分配5个字节单元,分别存入两个8位组合BCD码数据(低位在前),将两数相加,结果送回到DATA2处。 2
7、.两位十进制数乘法:将被乘数和乘数以组合BCD码形式分别存放于DATA1和DATA2定义的字节单元中,经乘法运算,乘积存入DATA3定义的两个内存单元中。 3.用汇编调试工具查看运算结果,进行手工验证;并且用汇编调试工具中的相关修改DATA1和DATA2 ,并重新执行。,关于BCD码扩充知识,Intel 助记符使用术语 “ASCII” 称作不压缩的BCD码,而使用“十进制数”则称为压缩BCD码。 不压缩的BCD码 不压缩的BCD码由在每一个字节的低四位包含一个十进制数字的字节组成, Intel系列处理器提供了调整不压缩值的四种算术操作指令: 加法操作后调整 AAA ; Ascii Adjust
8、 for Addition 减法操作后调整 AAS ; Ascii Adjust for Subtraction 乘法操作后调整 AAM ; Ascii Adjust for Multiply 除法操作后调整 AAD ; Ascii Adjust for Division 压缩的BCD码 压缩的BCD码由包含两个十进制数字的字节组成:一个在高四位,另一个在低四位,Intel系列处理器提供了对进行加和运算的压缩BCD数调整指令: 加法操作后调整 DAA ; Decimal Adjust for Addition 减法操作后调整 DAS ; Decimal Adjust for Subtracti
9、on 今天实验所讲的“BCD码的运算 ”是指压缩BCD码的运算。 搞清计算机中压缩BCD码、十六进制码的概念 举例: 在内存中定义了两个数据,分别为data1=78H、data2=78H,其中data1 为组合的BCD码,data2为16进制数,则有: data1的十进制、十六进制为:78(十进制),4EH(十六进制) data2的十进制、十六进制为:120(十进制),78H(十六进制),多位十进制数加法,.model small .data data1 db 11h,22h,33h,44h,00h data2 db 99h,88h,77h,66h,00h .code .startup mov
10、 si,offset data1 ;设指针 mov di,offset data2 clc ;清进位 mov cx,5 ;设加法次数 lop: mov al,si ;取第一加数 adc al,di ;取第二加数 daa ;十进制调整 mov di,al ;结果存入指定单元 inc si ;指针加1 inc di loop lop ;循环 .exit end,流程图:,开始,清进位,设加法次数,十进制调整; 部分和回送,指向下单元数,AL AL+第二加数,CX-1=0?,结束,Y,N,两位十进制数乘法: 如34*56=? 编程思路:1. 把56循环叠加34次;每叠加一次进行一次BCD 码的加法调
11、整; 2. 34为组合的BCD码,在计算机中的存放形式 为: 00110100b 3. 必须将组合BCD码34H转换成十六进制才可进 行循环叠加: 34H(BCD码) 30H+4 30H/10H*0AH+4 34(d) 22H,两位十进制数乘法流程图:,开始,分离出第一乘数的“个位”,分离出第一乘数的“十位”,第一乘数的“十位”移到 “个位”后,再乘 10,合成得到16进制 的第一乘数,BCD码转换成16进制数,1,1,清进位,第二乘数做加法次数,十进制调整,AL与AH内容交换,AL与AH内容交换,十进制调整,CX-1=0?,N,Y,存储结果,结束,一、实验目的 掌握循环结构程序的设计、调试。
12、 二、实验内容 1多字节无符号数加法。 2设计一软件延时器,并在屏幕上显示软件延时倒计时及正计时过程。 3.试编写一个程序,延时大约1秒,在屏幕上按99、98、97、96、00的顺序显示倒计时的全过程。(可选作),实验三 循环结构程序,三、实验要求 1多字节无符号加法:在DATAS中存放10个双字节无符号数, 用循环结构设计程序,通过程序运算,把这10个双字节无符号数相加,其和存入RESULT定义的四个字节单元当中,要求用16位寄存器完成编程(范例为用32寄存器实现 )。 2设计一软件延时器,并在屏幕上显示16进制(F0)倒计时及正计时及(0F)过程。(范例:做一延时约1秒的软件延时器,在屏幕
13、上按9、8、0顺序显示软件延时倒计时过程。 ) 对于“学号”为奇数的同学在计算机屏幕上的显示如图1所示。 对于“学号”为偶数的同学在计算机屏幕上的显示如图2所示。 3.可参考实验2的编程完成编程。,F E D C B A 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 A B C D E F,0 F E D C B A 9 8 7 6 A 5 B 4 C 3 D 2 E 1 F 0,图1,图2,补充知识:关于循环语句的高级语法,目前的MASM中引入了一系列的伪指令,涉及条件测试、分支和循环语句,有了它们,汇编语言有了和高级语言一样的结构。关于循环语句的伪指令有:
14、 .while 条件测试表达式 指令 .break .if 退出.while条件 .continue .endw ;- .repeat 指令 .break .if退出.while条件 .continue .until 条件测试表达式(或.untilcxz 条件测试表达式),通过今天的实验应顺便掌握子程(过程)序的编写及调用,子程序结构: procedure_name PROC 距离 USES 寄存器列表 LOCAL 局部变量列表 汇编语言指令 RET ;子程序的返回 procedure_name ENDP ;子程序的结束 距离: NEAR,FAR,NEAR16,NEAR32,FAR16,FAR
15、32。缺省为NEAR USES 寄存器列表: 由编译器在子程序指令开始前自动安排PUSH这些寄存器的指令,并在RET前自动安排 POP指令,用于保护执行环境。 注意在子程序中也可用80386以后的指令PUSHA、POPA、PUSHAD、POPAD也十分方 便。 LOCAL 局部变量列表: 局部变量列表必须放到子程序中所有汇编语句的最前面。 常用的局部变量类型有:byte、word、dword等。,扩充知识,关于空操作(NOP)指令 空操作(NOP)是所有指令中最简单的,正如它的名字所暗示的那样:无论在情况下它什么也不操作。NOP不影响标志、寄存器及存储单元,它仅仅让指令指针(IP)增加。 NO
16、P有许多用途,如,在你不想重新汇编程序而删除一条指令时,可以用90H(NOP)来填充相应的单元;又如我们本实验所用到的,在你要测试程序的最后一条指令后加入一条NOP指令,然后在此设置一条断点,以次方便用户程序的调试。 当然随着编程水平的提高,还有其他用途,这里不做深入讲解。 了解DOS下的系统功能调用 系统功能调用:系统功能调用是DOS为方便汇编语言编写而提供的一组约80个功能调用的常用子程序,它分为设备管理、文件管理和目录管理等几类。DOS规定用软中断指令 INT 21H 进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号,以便进入相应各用子程序的入口。系统功能调用的使用方法:,E
17、X1:从键盘输入单字符 MOV AH,01H ;1号功能调用 INT 21H 将键盘输入字符的ASCII码送到 AL。 EX2:从键盘输入字符串 BUF DB 10 DUP(?) LEA DX,BUF MOV AH,0AH ;0A号功能调用 INT 21H 将键盘输入的字符串写到 RAM 中去,击 回车键表示字符串结束。字符数与予留 空间的关系为:少补零多丢失。 EX3:输出单字符 MOV DL,M MOV AH,02H; 2号功能调用 INT 21H 将 DL 中字符从屏幕上显示出来。,EX4:输出字符串 BUF DB Thank you MOV DX,OFFSET BUF MOV AH,0
18、9H;9号功能调用 INT 21H 将 指定 RAM 缓冲区中的字符串从屏幕 上显示出来。 为字符串结束符。 EX5:直接控制台输入/输出单字符 MOV DL,0FFH;DL=0FFH时, MOV AH,06H; 6号功能调用 INT 21H; 将键盘输入字符 送到 AL 中。 MOV DL,M; DL 0FFH时, MOV AH,06H; 6号功能调用 INT 21H; 将 DL 中字符送到 屏幕上显示。,多字节无符号数加法,.MODEL SMALL .586 .DATA DATAS DW 1111H,2222H,3333H,4444H,5555H DW 6666H,7777H,8888H,
19、9999H,0AAAAH RESULT DD ? .CODE .STARTUP MOV SI,OFFSET DATAS;设指针 MOV CX,10;累加次数 MOV EAX,0;清累加器 CLC;清进位 LOP: MOV BX,SI;取加数到BX MOVZX EBX,BX ;将BX扩展成32位 ADC EAX,EBX;带进位加 INC SI;改指针 INC SI LOOP LOP;循环加 MOV RESULT,EAX;存结果 .EXIT END,开始,清进位,将BX扩展为32位,SI 指向下一加数,CX-1=0?,N,Y,存结果,结束,软件延时器,.model small .data myda
20、ta db 10 dup(20h) num db 39h,0dh,0ah,$ .code .startup mov cx,0ah; 设循环次数 lop:mov ah,09h;显示功能调用 lea dx,mydata int 21h call near ptr delay ;调用延时子程序 dec num ;修改显示数字 loop lop nop .exit nop Delay proc near uses cx ;延时子程序 mov bx,06ffh ;设第二时常数 Delay1 : mov cx,0h loop $ ;自身循环CX次 dec bx ;第二时常数减1 jnz delay1 ;不
21、为零循环 ret Delay endp end,开始,字符串 显示功能调用,延时子程序调用,显示数字修改,CX-1=0?,N,Y,结束,主程序流程:,延时子程序流程:,实验四 排序程序,一实验目的 1学习无符号数比较大小指令; 2掌握多重循环编程方法; 3掌握汇编语言编写排序程序的思路和方法。 二实验内容 1单字节无符号数排序。 2去极值滤波。 三实验要求 1单字节无符号数排序:在DATANUM单元存放双字节无符号数,表示要排序数据的个数,而从DATAS单元开始存放要排序的单字节无符号数据,数据个数至少10个。程序运行之后,这些数据按照由大到小的顺序仍然存放于DATAS单元开始的单元。 2 去
22、极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连 续6个A/D采样值(12位双字节,低12位),要求去掉最大值和最小值,将 余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完 成这个滤波过程。,单字节无符号数排序,流程图:,开始,数据指针 SI 置 0,前数与后数比较,前数后数?,前、后数交换,数据指针 SI 指向下一数,Y,N,CX-1=0?,N,Y,Y,BX-1=0?,N,结束,CX BX,BX 数据个数-1,.model small .data datanum dw 10 datas db 21h,13h,4h,5h,7h,6h,0F9h,20h,9
23、h,11h .code .startup mov bx,datanum ;取数据的个数到BX dec bx ;BX-1为循环次数 lop0: mov cx,bx ;设内循环次数 mov si,0 ;设置寻址的偏移量SI=0 lop:mov al,datassi ;取一个数A cmp al,datassi+1 ;取下一个数B,比较A和B jbe jh ;若AB,转到JH xchg al,datassi+1 ;若AB,交换A,B mov datassi,al jh: inc si ;偏移量SI+1 loop lop ;CX-10,继续内循环 dec bx ;CX-1=0,内循环结束,外循环次数BX
24、-1 jnz lop0 ;BX0,继续外循环 .exit ;BX=0,排序结束 end,去极值滤波,注意与前面程序排序笔筒的地方:此排序为字的排序(16位),所以比较为16位数据比较,指针的移动为两个字节。,.model small .586 .data datanum db 6 datasdw 0123h,0abch,0234h dw 0345h,0456h,0567h .code .startup call px ;排序 mov si,offset datas+2;掐头去尾送指针 mov cx,4 ;送累加次数 clc ;清进位 mov ax,0 ;取首数 qh:adc ax,si ;累加
25、 inc si inc si loop qh shr ax,2 ;除4 mov datas,ax ;存结果到DATAS首位 nop .exit nop,pxproc near mov bl,datanum ;取字长 dec bl mov bh,0 lop0: mov cx,bx ;送比较次数 mov si,0 lop: mov ax,datassi ;送前数 cmp ax,datassi+2 ;与后数比较 jbe jh ;若大于则跳转到jh xchg ax,datassi+2 ;交换 mov datassi,ax jh: inc si inc si loop lop next: dec bl
26、;修改比较次数 jz finish jmp lop0 finish: nop ;结束 ret px endp end,实验五 分支程序,一、实验目的 掌握分支程序编程方法,复杂分支程序的查表法等。 二、实验内容 1、 学生课程成绩分段统计。 2、 键盘及屏幕显示功能调用。 三、实验要求 1、 学生课程成绩分段统计:用一个字节表示每个学生的学号,另一个字节存放压缩BCD码,表示学生的课程成绩(最低0分,最高99分),规定当课程成绩为0F0H表示作弊,当课程成绩为0F1H表示缺考,当学生的学号为0FFH时表示学生成绩统计的结束符。学生成绩在内存的存放形式为“学号,成绩”,每个学生占两个字节,从内存
27、SCORE为首址开始存放。要求学生人数不少于10个,试编程序,按0 9、10 19、20 29、80 89、90 99及作弊、缺考等12种情况把学生的课程成绩进行分段统计,将统计结果存入以COUNT为首址的12个单元中。 2、试编一程序扫描键盘,当B键按下时,在屏幕上显示09循环计数;S键按下时停止计数;再按B键继续计数过程。E键按下时退出程序。 3、定义三个字节的正数(A、B、C),判断是否能构成三角形,如能,则显示“Yes !”,不能,则“No !”。(要构成三角形,必须满足两边之和大于第三边,即:BCA 或ACB 或ABC) *定义三组字节的正数(A1、B1、C1),(A2、B2、C2)
28、,(A3、B3、C3),请编程序判断这三组数据能否构成三个三角形,将三组数据判断的结果用“Yes !”或“No !”显示出来,用来表示能否构成三角形。 4、用DEBUG调试程序预置数据和查看程序运行结果,以验证程序正确性。,分支程序常由比较指令(CMP)和条件转移指令共同实现。条件转移分带符号转移和不带符号转移。转移指令的记忆技巧: 字母 含义 J 转移 G 大于(带符号比较) L 小于(带符号比较) A 高于(无符号比较) B 低于(无符号比较) E 等于 N 不 应注意的问题:条件转移的跳转范围为:+128 -127。选择合适的转移指令,否则不能转移到一定的程序分支,特别要注意区分有符号数
29、和无符号数的使用条件。要为每个分支安排的出口,否则导致程序运行混乱。在分支较多时,编程时各个分支的先后次序应与流程图一致,以减少编程出错的机会并便于检查。在调试分支程序时,要假设各种可能的输入数据,并沿每个分支走一边,以检查程序的正确性。,学生课程成绩分段统计,开始,设置学号、成绩指针,取学号,取成绩,是结束标志?,取十分位,并将十分值扩展为16位送DI,对DI所指统计区段统计值加1,是作弊?,是缺考?,修改指针,CX-1=0?,作弊统计区段统计值加1,缺考统计区段统计值加1,结束,Y,Y,Y,Y,N,N,N,N,.model small .586 .data score db 1,10h,2
30、,20h,3,30h,4,40h,5,50h,6,77h,7,70h db 8,80h,9,90h,10h,08,11h,0f0h,12h,0f1h,0ffh count db 12 dup(?) .code .startup mov cx,20 ;送统计上限 mov si,0 ;SCORE 统计指针 statistic: mov al,scoresi ;取学号 cmp al,0ffh ;判是否为结束 je sta_end;转统计结束 mov bl,scoresi+1;取成绩 cmp bl,0f0h ;是否作弊 je fake;是,转作弊处理 cmp bl,0f1h;是否缺考 je miss;
31、是,转缺考处理 shr bl,4;取十分位 movzx di,bl ;将十分值扩展为16位送DI inc countdi ;相应区段统计值加1 down: inc si ;改指针 inc si loop statistic;循环 sta_end:nop;结束 .exit,fake: inc count10 ;作弊处理 jmp down miss: inc count11 ;缺考处理 jmp down end,键盘及屏幕显示功能调用,开始,显示提示信息,置处理指针为“停止”,调延时、键盘扫描程序,有键动?,转处理指针处,B 键?,S 键?,E 键?,转处理指针处,结束,置处理指针为“计数”,置处
32、理指针为“停止”,N,Y,Y,Y,Y,N,N,N,处理指针 为“计数”,处理指针 为“停止”,计数显示,延时、键盘扫描程序,子程序定义,CX-1=0?,N,Y,监测键动,有键动?,做键动标志bx=1,N,Y,.model small .data Mess1 db press b button - count,0dh,0ah mess2 db press s button - stop,0dh,0ah Mess3 db press e button - exit,0dh,0ah,$ count db 20h,20h,20h,20h,20h,30h,0dh,$ .code .startup mov
33、 ah,09h;显示提示信息 mov dx,offset mess1 int 21h lea si,stop;设处理指针 scan: call near ptr delay ;调延时、键扫程序 or bx,bx;判有无键动 jnz scan1;有键动,转键处理 jmp si;无键动,转当前处理程序 scan1: cmp al,b ;键处理程序 je b_proc cmp al,s je s_proc cmp al,e je e_proc call delay jmp si b_proc: lea si,count_;B键处理 jmp scan s_proc: lea si,stop;S键处理
34、jmp scan e_proc: nop;E键处理 nop .exit,count_: inc count+5;修改显示数字 mov al,3ah;比较超限 cmp al,count+5 ja down;若不超限,调显示 mov count+5,30h;超限,设启始值 down: mov ah,09h;显示功能调用 lea dx,count int 21h jmp scan stop: jmp scan nop Delay proc near uses cx;延时子程序 mov bx,380h;设第二时常数 delay1: mov cx,0h loop $;自身循环CX次 mov dl,0ff
35、h;监测键动 mov ah,06h int 21h jnz key_ret ;若有键动,延时终止,转键处理 dec bx;第二时常数减1 jnz delay1;不为零循环 jmp delay_ret key_ret: mov bx,1;做键动标志 delay_ret: ret Delay endp end,硬件实验部分,本部分共进行3次实验,实验内容如下: 1 实验六 并行接口技术实验 2 实验七 8254定时/计数器实验 3 实验九 A/D转换实验 (下面根据实验台实物介绍实验台),特别说明:为了方便实验,实验台设计时已将除片选信号线(CS)外的所有相关总线全部连好,并在每一个实验电路附近予
36、留有实验内容要求的连线插孔。实验时只要将相应插孔用单股导线对应相连即可组成完整的实验电路。在给出的实验电路图中,线路所带小圆圈即表示连线插孔。 硬件实验注意事项: 1.在实验台确保断电的条件下,方可连接电路; 2.线路连接完成、检查确认没有错误后,再开通实验台电源; 3.用单股导线连接电路时,要将单股导线线头整直,并确认线头没有 断裂,以防单股导线端头断裂在插孔内,影响下次试验的进行; 4.实验完成后,首先关断实验台电源,再用手捏住导线的根部,一根一根 拔出,并把导线整好放入实验箱右边的线盒内并盖好实验箱才可离开。 5.实验报告必须画出原理框图,并概述其工作原理。,实验六 并行接口技术实验,一
37、实验目的 1.掌握8255A并行接口的基本使用方法。 2.理解数码管扫描显示原理,学习数码管扫描显示方法。 二实验内容 1.用8255A作为并行接口,从8255A的A口的PA4PA7输入四个开关量, B口通过74HC573与数码管的段位相连(a、b、c、d、e、f、g、dp分别对应B口的PB0、PB1、PB2、PB3、PB4、PB5、PB6、PB7)。试编写一个程序,从8255A的A口读入将这四个开关量的值,并根据其值的大小,通过8255A的B口连接的数码管显示出相应的十六进制值,即当A口输入为 “0000 xxxx”时, B口输出所数码管显示“0”, ,当A口输入为 “1111xxxx”时,
38、 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.实验电路图,2.实验连线 (1)逻辑电平开关输出孔K1K6对应连接到8255A
39、的PA0PA5; (2)8255A的PB0PB5对应连接到数码管的位选端JM1JM6; (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,控制寄存器:0E203H 4.数码管编码表 “0”-3FH “1”-06H “2”-5BH “3”-4FH “4”-66H “5”-6DH “6”-7DH “7”-07H “8”-7FH “9”-6FH “
40、A”-77H “B”-7CH “C”-39H “D”-5EH “E”-79H “F”-71H,有关问题的说明,数码管(共阴):,DP,DP,共阴,地,不闭合,数码管就点不亮,多个数码管扫描显示:,多个数码管扫描显示:,限流电阻,锁存器,JM3、JM2、JM1谁为,谁连接的数码管就显示锁存器当前锁存的值,所谓扫描显示是: 对个数码管: .给锁存器送第个数码管显示内容,而后第个数码管公共端接低,延时 .给锁存器送第个数码管显示内容,而后第个数码管公共端接低,延时 .给锁存器送第个数码管显示内容,而后第个数码管公共端接低,延时 第步后,再从开始,周而复始。,那么, JM3、JM2、JM1是互斥的了!
41、,连接数据总线D7D0,驱动器,实验6-1电路 示意图,B口 8255 PA3 PA2 PA1 PA0,SK4 SK3 SK2 SK1 开关,74 HC 573 锁 存 器,限 流 电 阻,D-bus D7D0,SMGLT,CS8255,PB0-PB7,K,CPU,开始,初始化8255,点亮一位数码管,读键盘,有键按下否?,读8255A的A口数据, 屏蔽高4位,查表,得到相应的字型码,通过8255A的B口输出字型码到LED显示,结束,.model small Cs8255 equ 0E200h ;片选地址CS1 p_ctl equ 90h ;8255控制字-A口入,B口出 .data tabl
42、e db 3fh,6h,5bh,4fh,66h ;0,1,2,3,4;字型表 db 6dh,7dh,07h,7fh,6fh, 77h ;5,6,7,8,9,A db 7ch,39h,5eh,79h,71h ;B,C,D,E,F .code .startup mov dx,cs8255+3 ;8255初始化 mov ax,p_ctl out dx,ax lop: mov ah,06h ;键入任意结束程序的执行 mov dl,0ffh int 21h,jnz scan_end mov dx,cs825 ;读开关 in al,dx and al,0fh mov bx,offset table ;读字
43、型码 xlat mov dx,cs8255+1 ;B口输出 out dx,al jmp lop ;循环扫描 scan_end: .exit end,实验6-1源程序,实验 6.2,限流电阻,ULN2003驱动器,Dbus D7D0,CS573,CS8255,74HC573锁存器,A B C D E F G DP,A口,B口,PB0-PB7,K1,K3,K4,K5,K6,K2,开始,初始化,查表取显示数字字型码,显示字型码送锁存器(输出),扫描位数?,调延时,读键盘,有键动?,结束,延时子程序流程(略),取对应数码管字位、并输出,+(下一扫描位置),.model small Cs8255 equ
44、 0E200h ;片选地址CS1 p_ctl equ 80h ;8255控制字-A口输出,B口输出 .data table db 3fh,06h,5bh,4fh,66h;0,1,2,3,4 ;字型表 db 6dh,7dh,07h,7fh,6fh;5,6,7,8,9 .code .startup mov dx,cs8255+3 ;发控制字 mov al,p_ctl out dx,al mov cl,1 ;设扫描位置 lop:mov al,cl ;取显示数字 mov bx,offset table ;读字型码 xlat mov dx,cs8255+1 ;输出字型码 out dx,al mov al
45、,80h Inc cl ror al,cl mov dx,cs8255 ;输出字位 out dx,al cmp cl,6 jbe down ;若显示位置大于6,返回启始位置 mov cl,1,down: call delay mov ah,06 ;判有键动,跳出循环 mov dl,0ffh int 21h jnz scan_end jmp lop ;循环扫描 scan_end: nop .exit nop delay proc near ;延时子程序 push cx mov bx,02h delay1: mov cx,0h loop $ dec bx jnz delay1 pop cx ret
46、 delayendp end,实验七 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秒切换一次通行方向。
47、三实验电路及设计 1 .实验电路图,2.“实验内容1”实验连线 (1)8254的GATE0、GATE1接高电平; (2)8254 T0的CLK0接1M或2M时钟孔; (3)8254 T1的CLK1接T0的OUT0; (4)8254的片选端CS8254连到译码控制单元的0E204H0E207H; (5)8254 T1的OUT1接LED灯。 3.“实验内容2”实验连线 以下连线假设8255A的A口为输入方式、B口为输出方式,8255A的PA1 连接8254 T1的OUT1,8255A的B口控制交通灯的八只LED灯。 (1)连线同“实验内容1”的(1)(4); (2)8254 T1的OUT1接825
48、5A的PA1孔; (3)8255A的PB7PB0对应连接到dp、g、f、e、d、c、b、a,它们对 应交通灯的Wr、 Er、 Wg、 Eg、 Nr、 Sr、 Ng、 Sg灯; (4)交通灯八只LED发光管的公共控制端JTD孔接高电平; (5)8255A的片选端CS8255连到译码控制单元的 CS1(0E200H)。,4.8254和8255A的端口地址 8254的端口地址(CS2): 定时器0分频系数寄存器: 0E204H, 定时器1分频系数寄存器: 0E205H, 控制寄存器 : 0E207H。 8255A的端口地址(CS1): PA口:0E200H,PB 口:0E201H,PC口:0E202
49、H, 控制寄存器:0E203H。,实验 .1,开始,初始化T0,初始化T,装T0低字节计数初值,结束,装T0高字节计数初值,装T低字节计数初值,装T高字节计数初值,;cs8253-CS2(0E204H0E207H) ;clk0 - 1M ;out0 -CLK1 ;out1 - BJ 或 DL1 ;gate0 - K1,令k1=1 ;gate1 - K2,令k2=1 ;- .MODEL SMALL CS8253 EQU 0E204H T0_CTL EQU 00110100B ; 对T0 两次读写, 先低后高。 T0为方式2(分频) T1_CTL EQU 01110110B ;对T1 两次读写,
50、先低后高。 T1为方式3(方波) .DATA T0_DATA DB 0FFH,040H T1_DATA DB 0FFH,0 .CODE .STARTUP MOV DX,CS8253+3 ;初始化T0 MOV AL,T0_CTL OUT DX,AL MOV DX,CS8253 ;给T0低字节装计数初值 MOV AL,T0_DATA OUT DX,AL MOV AL,T0_DATA+1 ;给T0高字节装计数初值 OUT DX,AL ;- MOV DX,CS8253+3 ;初始化T1 MOV AL,T1_CTL OUT DX,AL MOV DX,CS8253+1 MOV AL,T1_DATA ;给T
51、1低字节装计数初值 OUT DX,AL MOV AL,T1_DATA+1 ;给T1高字节装计数初值 OUT DX,AL .EXIT END,开始,8254 T0 初始化,给8254 T0装初值,8254 T 初始化,给8254 T装初值,8255初始化为A口入、B口出,8255 B口输出方向初值,读8255 PA1、测试8255 PA1,PA11?,读8255 PA1、测试8255 PA1,PA10?,控制换向 8255 B口输出方向值,检查键盘,有键盘动?,结束,实验7.2,;cs8254-CS2:0E204H-0E207H ;clk0 - 1M ;out0 - clk1 ;out1 -82
52、55_PA1 ;gate0 - k1 ;gate1 - k2 ;JTD-+5V ;CS8255 - CS1:0E200H-0E203H(8255芯片的片选信号,即片选地址) ;(PB7 . PB0)- (RE,RS,RW,RN,GE,GS,GW,GN) ;- .MODEL SMALL CS8254EQU 0E204H ;计数器0寄存器地址,CS2 T0_CTL EQU 00110101B;控制字:选择计数器0,读/写双字节,先低后高,方式2,十进制计数 T1_CTL EQU 01110111B;控制字:选择计数器1,读/写双字节,先低后高,方式3,十进制计数 CS8255 EQU 0E200H
53、;8255的A口地址,CS1 P_CTL EQU 90H;8255的方式控制字A,B口均工作在方式0,A口输入,B口输出 .DATA T0_DATA DB 00H,50H ;计数器0的计数值为5000H T1_DATA DB 00H,20H ;计数器1的计数值为2000H dir_data db 01011010b ;交通灯方向初值,0表明灯熄灭,1表明灯点亮, ;高半字节为红,低半字节为绿;顺序为东南西北 ;D7-东红,D6-南红,D5-西红,D4-北红 ;D3-东绿,D2-南绿,D1-西绿,D0-北绿 .CODE .STARTUP ;- MOV DX,CS8254+3 ;写控制字(8254控制寄存器地址0E204H,即T8254+3) MOV AL,T0_CTL OUT DX,AL ;- MOV DX,CS8254 ;写计数器0的计数值 MOV AL,T0_DATA ;写低字节 OUT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖南岳阳市云溪区“四海揽才”教师人才校园招聘13人备考题库(真题汇编)附答案详解
- 2026江苏南京大学XZ2026-036研究生院办公室文员招聘备考题库完整答案详解
- 2025-2026学年数轴教案网站制作
- 2025-2026学年素描头发教案
- 2026河南新乡工程学院附属学校教师招聘考试参考试题及答案解析
- 2025-2026学年歌曲配图教案
- 2026年滨州科技职业学院单招职业适应性测试题库有答案详细解析
- 2026河南安阳殷都区人民医院招聘卫生专业技术人员9人笔试参考题库及答案解析
- 麻纺厂生产设备操作安全须知
- 2026年江西应用技术职业学院单招职业技能考试题库有答案详细解析
- (excel版)高中3500个英语单词表(带音标)乱序
- 会阴及会阴伤口的护理
- DL-T5709-2014配电自动化规划设计导则
- T∕CACM 1021.58-2018 中药材商品规格等级 鹿茸
- 开荒保洁物业管理前期管理及开荒保洁计划
- 《关于大众传媒》课件
- 《东北三省》白山黑水
- 建筑施工企业管理人员、从业人员安全生产责任书(参考范本2023年版)
- Bankart损伤与Hill-Sachs损伤影像诊断
- 永磁电动机计算公式大全(电磁计算程序)精讲
- DB3701∕T 15-2020 基层网格化服务管理规范
评论
0/150
提交评论