微机原理2.doc_第1页
微机原理2.doc_第2页
微机原理2.doc_第3页
微机原理2.doc_第4页
微机原理2.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第六章:汇编语言程序设计总结考试说明:要清楚考试的重点是什么。程序设计题目的难度不大,算法的要求不高。重点是程序的整体框架,也即书写格式要规范,注释最好是每一步都加上注释。另外是把老师上课讲的例题(主要是幻灯片上的例题)彻底搞懂。一、首先要知道整个程序的格式规范:1.ASM-86汇编语言中,有两种语句:(1)指令性语句 一条指令性语句就是一条8086指令,例如 ADD AL,BL和MOV CX,1000;每一条指令性语句都会在汇编过程中产生相应的目标代码。 例如:START : MOV AX,1090 ;将16进制数1090H送入AL INC BX(2)指示性语句 指示性语句又称为伪指令,例如 SEGMENT和ABC DB 50H。伪指令用来为汇编程序提供某些信息,让汇编程序在汇编的过程中执行特定功能的信息,比如规定一个数据段从哪里开始到哪里结束等。每一条伪指令在汇编的过程中都不会产生相应的目标代码。例如:CR DB ODH ;在单元CR处存放数据0DH ORG 200H ;目标程序的偏移量 SEGMENT(3)指令性语句和指示性语句的最大区别:就是指示性语句在标号和伪指令助记符没有冒号2.书写格式模板:这是考试重点,后面的例子详解有实际的例子。数据段名(一般:DATA) SEGMENT 数据段内容 数据段名(DATA) ENDS堆栈段名(一般:STACK)SEGMENT 堆栈段内容 堆栈段名(STACK)ENDS代码段名(一般:CODE) SEGMENT ASSUME CS:代码段名, DS:数据段名, SS:堆栈段名 代码段内容 代码段名(CODE) ENDS END3.标识符说明:主要是别把保留字和界符当做标识符。“标识符”是字母,数字,下划线的组合,但不能用下划线开头,长度不能超过31个字符。保留字和界符不能用作标识符。“保留字”是汇编程序中预先保留下来具有特殊含义的符号,例如:MOV、ADD等。凡是8086的指令,伪指令,寄存器名都是保留字,不能作标识符用。“界符”作为一个程序中或一条指令中两部分的分隔符号用。例如 MOV AX,90中的“,”就是界符。4.注释说明:注释很重要,考察学生对指令的理解,千万要写。注释要用分号“ ;”隔开。如果一行写不下可以换行。5.常量说明:要记住数值一般是用十六进制表示的,所以重点掌握十六进制的常数后面加字母B来表示二进制数;加字母D(可不加)表示十进制数;加字母H来表示十六进制数。一个16进制数以字母AF开头,前面必须加一个0,例如0A59H。 单引号引出的字符表示字符常量,如c表示字符c。 单引号引出的多个字符序列称为字符串常量,如ABCD。注意:一个用引号引出的字符串也代表常数,如带引号的字符串ABCD,等效于它们对应的ASCII的常数64、65、66、67,所以字符串也称为字符串常数6.伪指令介绍:(1)标号赋值:EQU,相当于C语言的宏定义#define;例如: CONSTANT EQU100 ;将100宏定义为CONSTANT; COUNT EQU CX ;将CX寄存器宏定义为COUNT;(2)标号解除:PURGE,一个标号在没有使用PURGE伪指令解除赋值前,不能用EQU伪指令重新定义。例如:PURGE CONSTANT。(3)定义存储单元:DB、DW、DD,相当于C语言的数据类型int,long等。 DB用来定义字节(1-unit)、DW用来定义字(2-unit)、DD用来定义双字(4-unit)。例如: CR DB 10H ;在CR指向的地址装入10H LF DB 0BH,64H ;如果没有“org 100h”类似语句则接着CR后面定义RP DW FBFFH,3CH如图:7.操作数:8.表达式:(1)算术运算符:有+、-、*、/、MOD。例如: MOV AL,2*7 汇编后为 MOV AL,0E 算术运算符也可以用于地址表达式,对地址运算的结果应有明确的物理意义,两个地址的乘或除无意义,而加或减则可以,例如: LEA SI,SUM+3 ;表示SUM的地址加上3得到的和作为SI新存储器地址。(2)逻辑运算符逻辑运算符有AND、OR、XOR和NOT,它们只能用于数字表达式中。例如:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H例如:AND DX,36H AND 0FH后一个逻辑运算符AND在汇编时进行, 汇编后得到表达式的值为06H,运行时执行前一个指令助记符AND,将(DX)与06H相与,结果在DX中。(3)关系运算符:EQ(相等),NE(不等),LT(小于),GT(大于), LE(小于或等于),GE(大于或等于) 关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。 关系为真,结果为0FFFFH;关系为假,结果为0例如: MOV BX,PORT GE 5若PORT的值大于等于5,则汇编后为: MOVBX,0FFFFH若PORT的值小于5, 则汇编后为: MOVBX,0(5)LENGTH运算符用来计算一个存储区的单元(单元可以是字节,字或双字)的数目。运算符SIZE用来计算一个存储区的字节总数。例如:若BUFFER存储区是用如下伪指令定义的: BUFFER DW 200 DUP( ?)则: TYPEBUFFER等于2 LENGTHBUFFER等于200 SIZEBUFFER等于400(6)综合运算符PTR:用来对存储单元规定类型,通常和BYTE, WORD和DWORD等连起来使用。考虑下面的语句:MOV 1000,0 ;类型不定MOV BYTE PTR1000,0 ;1000字节单元清零MOV WORD PTR1000,0 ;1000开始的字单元清零二、程序设计例题详解:*Example_1:输出一个自定义的数值。说明:记住固定输出寄存器是DL;知道输出字符和结束程序的方法。答案:只含代码段部分,也是主要部分。code segment ;定义代码段 assume cs:code ;把上面定义的代码段基址放入CS org 100h ;从IP100的内存载入代码;可省略; 如果省略则偏移量为0; mov dl,1 ;将数值1装入dl,dl是固定的输出寄存器; mov ah,2 ;输出字符调用21H中断的2号子程序; int 21h ;调用中断程序; mov ah,4CH ;结束程序调用21H中断的4号子程序; int 21H ;返回DOS;code ends ;段终止*Example_2:依次输出256个ASCII码。说明:CX是在循环中使用的寄存器,每执行一次循环,CX值减一,直到CX=0。答案:只含代码段部分,也是主要部分。prognam segment ;定义段 assume cs:prognam ;把上面定义段的段基址放入 CS mov cx,100h ;装入循环次数100H=256D; mov dl,0 ;装入第一个ASCII码; next: mov ah,2 ;输出字符调用21H中断的2号子程序; int 21h;调用中断程序; inc dl ;数据寄存器DL内的数值加1; loop next ;判断CX的值=0?,执行下一个循环; mov ah,4ch ;结束程序调用21H中断的4号子程序; int 21H ;返回DOSprognam ends ;段终止*Example_3: 编写一个程序,判别键盘上输入的字符;若是09字符,则显示之;若为a-z字符,均显示“c”;若是回车字符,则结束程序;若为其它字符则不显示,继续等待新的字符输入。提示:回车符: 0DH 说明:输入字符调用21H中断的1号子程序;记住固定的输入寄存器是AL。答案:CODE SEGMENT ASSUME CS:CODE START: MOV AH,1;输入字符调用21H中断的1号子程序 INT 21H ;输入字符装入固定输入寄存器AL寄存器; CMP AL,0DH ;将AL值和回车值比较; JZ DONE ;如果相等,结果为0,转移DONE; CMP AL,0;将AL值和字符0的ASIIC码比较; JB START;如果小于0,转移START,重新输入; CMP AL,9;将AL值和字符9的ASIIC码比较; JA CHRDN;如果大于9,转移CHRDN,判断字符; ;执行到这步就是输入字符在0,9区间; MOV DL,AL;将AL值放到固定输出寄存器DL,准备输出; MOV AH,2;输出DL值调用21H中断的2号子程序; INT 21H JMP START;转移到START再次输入;CHRDN: CMP AL,a ;将AL值和字符a的ASIIC码比较; JB START;如果小于a,转移START,重新输入; CMP AL,z;将AL值和字符z的ASIIC码比较; JA START;如果小于z,转移START,重新输入; ;执行到这步就是输入字符在a,z区间; MOV DL,C;将C放到固定输出寄存器DL,准备输出; MOV AH,2;输出DL值调用21H中断的2号子程序; INT 21H JMP START DONE: MOV AH,4CH;结束程序 INT 21HCODE ENDS END*Example_4:求1到100的和。说明:ASSUME伪指令告诉汇编程序,哪一个段是数据段,哪一个段是堆栈段,哪一个段是代码段。除CS的值可自动装入外,其他各段的实际值还要用MOV指令来赋值。如下面的红色字体部分对DS的装入。答案:COUNT EQU CX;对CX寄存器“宏定义”为COUNT;DATA SEGMENT ;数据段开始 SUM DW ?;?是预留一个字的空间给SUM;DATA ENDS ;数据段结束CODE SEGMENT ;代码段开始 ASSUME CS:CODE,DS:DATA ORG 200H ;在代码段偏移量为0200H处存放代码 MOV AX,DATA ;DS寄存器赋值 MOV DS,AX ;注意不能直接写MOV DS,DATA XOR AX,AX ;累加器AX清零,XOR用于将寄存器清零; MOV COUNT,100 ;置循环次数,CX=100NEXT: ADD AX,CX ;持续累加和至AX寄存器; LOOP NEXT;CX值自动减一,判断CX值是否为0; MOV SUM,AX ;将累加得到的值AX装入SUM单元; MOV AH,4CH ;4C号功能调用:终止当前程序并返回调用程序 INT 21H CODE ENDS ;代码段结束*Example_5: 编写一个程序找出内存N个连续的字节(字或者双字)空间中存放的无符号数的最大值。将数组的第一个元素送AL寄存器,然后将其他的N-1个数逐个取来和AL的内容比较,如果数组中的某个数比AL的内容大,则将该数送AL中,经过N-1次的比较,AL中存放的就是数组中的最大值。 答案:COUNT EQU CX ;宏定义CXDATA SEGMENT ;数据段开始 ARRAY DB 3,12,45,21,97,56,8 ;存放7个数值 MAXNUM DB ? ;MAXNUM单元存放最大数DATA ENDS ;数据段结束CODE SEGMENT ;代码段开始 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;数据段寄存器赋值 MOV BX,OFFSET ARRAY ;取数组的偏移量送BX MOV COUNT,6 ;比较的次数装入CX寄存器; MOV AL,BX ;取第一个数LABLE:INC BX ;BX加1,指向下一个数 CMP AL,BX ;比较第N个数和第N+1个数 JNB NEXT ;AL不小于BX则转移NEXT MOV AL,BX ;否则将大数装入ALNEXT:LOOP LABLE ;CX减一,判断CX=0?; MOV MAXNUM,AL ;最大数送MAXNUM单元 MOV DL,AL MOV AH,02 INT 21H ;显示输出最大数97 MOV AH,4CH INT 21H ;程序正常结束CODE ENDS ;代码段结束END START ;汇编程序结束*Example_6: 编写一个程序使内存5个连续的字节(字或者双字)空间中存放的无符号数按序排列存放。说明:采用冒泡法,将低地址字节空间中的数和其他4个字节空间的数分别4次两两比较,大则交换两个字节空间的数据,否则不交换;经过1趟比较之后最大的数交换至高地址字节空间。对于5个数据,只要经过四趟比较数据就会按序排列存放。利用BX寄存器存放比较的趟数,每次比较完1趟BX的值减1,当BX的值为0时,比较结束。答案:DATA SEGMENT ARRAY DB Z,P,S,E,M ;存放5个数DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ;绑定各个段与段寄存器START:MOV AX,DATA MOV DS,AX MOV BX,4 ;送大循环的次数,比较的趟数 SORT:MOV CX,BX ;送小循环的次数,每趟比较的次数 MOV SI,OFFSET ARRAY ;取数组的偏移量送BX COMP:MOV AL,SI ;送数组中第n个数 CMP AL,SI+1 ;比较数组中第n个数和n+1个数 JNA LABLE;AL不大于SI+1,转移LABLE XCHG AL,SI+1;大于则交换两个数 MOV SI,AL ;将小数装入SI; LABLE:INC SI ;指向下一个数 LOOP COMP ;继续下一次比较 DEC BX ;完成了一趟比较,大循环减1 JNZ SORT ;未完成排序,则转入下一趟 MOV CX,5 ;循环显示5个排序的数 MOV SI,OFFSET ARRAY DIS:MOV DL,SI MOV AH,02 INT 21H INC SI LOOP DIS MOV AH,4Ch INT 21H ;结束程序CODE ENDSEND START 第七章中断系统和可编程中断控制器1.什么是中断?答:在CPU正常运行程序时,由于内部或外部某个不可预料事件的发生,使CPU暂停执行正运行的程序,转去处理引起事件的程序,然后再返回被中断了的程序继续执行。这个过程就是中断。2.中断过程流程图:3.为什么引入中断系统?答:早期的计算机,CPU和外设信息交换方式是查询,CPU大部分时间浪费在反复查询外设状态上,CPU执行效率和性能得不到发挥,产生快速的CPU和慢速的外设的矛盾。因此引入中断,使CPU能与多个外设并行工作,大大提高了计算机的效率。4.什么是中断源?中断服务子程序?答:引起中断的原因或发出中断申请的来源就是中断源。可以是输入输出设备,如显示器,键盘或打印机;可以是数据设备,如磁盘驱动器等。处理引起中断事件的程序称为终端服务子程序。5.CPU对中断的响应和 处理经过哪五个过程,并简要阐述每个过程的主要内容。答:中断请求、中断判优、中断响应、中断处理,中断返回。中断请求:请求中断由请求源产生,不同的中断源的请求方式不同。如CPU运行除法指令的除数为零,CPU能自动产生内部中断;I/O设备产生的中断信号必须送CPU的专用的引脚。中断判优:按照外设的重要性和需要处理事物的紧迫性,CPU对每个中断请求设置一个优先权。多个中断请求同时出现时,CPU按照优先权高低选出优先权高的先响应。中断响应:CPU在每一条指令执行完毕后都检查是否有新的中断请求。如,检查NMI和INTR端是否有高电平的中断请求信号。如果在NMI端有高电平信号,CPU立即响应,并从它的中断响应输出端INTA发出低电平信号。如果是INTR有高电平的中断请求信号,CPU是否响应中断还要看标志寄存器的IF是否为1。若为1,CPU就响应,否则不响应。中断处理:就是执行中断服务子程序的过程。中断服务子程序各不相同,但是步骤是相同的,即保存断点、保存现场、形成中断入口地址、执行中断服务程序以及恢复现场。中断返回:IRET指令结束中断返回主程序,它具有弹出IP和CS的功能,还能恢复寄存器的内容。6.计算机系统对中断优先级采用哪些办法解决?答:软件查询方式、简单硬件方式菊花链法和专用硬件方法。7.什么是中断类型号?它的作用是什么?它是有什么构成的?答:中断向量就是中断处理子程序的入口地址,每一个终端类型号对应一个中断向量。在内存0段的03FFFH区域存在一个中断向量表,它最多可容纳256个中断。所以中断类型号就是程序调用中断通过的媒介。程序指定中断类型号,然后在中断类型表中找到对应的中断向量,进而知道中断处理子程序的入口地址,调用程序完成任务。每一个终端类型对应4个存储单元,前两个单元存放处理子程序入口地址的偏移量(IP),低位在前,高位在后;后两个单元存放处理子程序入口地址的基址(CS),也是低位在前,高位在后。8.什么是中断响应周期?在中断响应周期中CPU和8259一般要完成哪些工作?答:中断响应周期就是一个中断响应需要经历的时间,通常要用两个总线周期。CPU:在前一个总线周期中,CPU接收外设的中断请求信号,如果中断允许标志IF为1并且正好一条指令执行完毕,那么CPU向外设发送两个负脉冲。第一个用来通知外设准备好中断类型码,CPU准备响应;第二个通知外设向数据总线发送中断类型码。外设接口收到第二个脉冲后,把中断类型码送到数据总线,CPU根据中断类型码查询中断服务子程序的入口地址。8259:在CPU发送的第一个负脉冲到达时,8259完成3个动作。第一使IRR的锁存功能失效;第二使ISR的相应位置1;第三使IRR的相应位清0。在CPU发送的第二个负脉冲到达时,8259完成如下动作:(1) 将中断类型寄存器内容ICW2送到数据总线D7D0,CPU作为中断类型码。(2)如果ICW4中的中断自动结束位为1,8259设置ISR的相应位清0.9.根据中断类型号对应的存储单元的值可以计算出对应的中断向量,并能根据中断向量计算出中断类型号和中断向量存储在哪些存储单元:例1:中断类型号为18H的中断对应的中断向量存放的内存区域是多少?解:18H460H,所以中断类型号为18H的中断存放在0000:0060H开始的四个单元中例2:中断类型号为25H的中断对应的中断向量存放的内存区域是多少?解:25H494H,所以中断类型号为25H的中断存放在0000:0094H开始的四个单元中例3:类型号为20H的中断所对应的中断向量存放在0000:0080H开始的四个单元中, 如果0080H、0081H、0082H、0083H这四个单元中的值分别是10H、20H、30H和40H,则20H中断服务子程序的物理地址是多少?解:20H号中断所对应的中断向量是4030:2010。20H中断服务子程序的入口地址是42310H。例4:类型号为17H的中断所对应的中断向量存放在0000:005CH开始的四个单元中, 如果005CH、005DH、005EH、005FH这四个单元中的值分别是90H、78H、45H、23H,则17H中断服务子程序的物理地址是多少?解:17H号中断所对应的中断向量是2345:7890。17H中断服务子程序的入口地址是2ACE0H。108259A的初始化命令字和操作命令字的含义是什么?它们有何差别?答:8259A的第一组寄存器ICW1ICW4称为初始化命令字。8259A的第二组寄存器 OCW1OCW3称为操作命令字。初始化命令字往往是计算机系统启动时由初始化程序设置的。初始化命令字一旦设定,一般在系统工作过程中就不再改变。操作命令字则是由应用程序设定的,它们用来对中断处理过程作动态控制。在一个系统运行过程中,操作命令字可以被多次设置。 11.初始化8259须知:(1)ICW1ICW4的设置次序是固定的,不可颠倒(2)ICW1必须写入偶地址端口,ICW2ICW4必须写入奇地址端口(3)对每一片8259A,ICW1和ICW2都是必须设置的,而是否需要设置ICW3和ICW4,在ICW1中已经预先指明。11.对8259A进行初始化,要求:CPU为8086,系统有一片8259A,中断请求信号采用边沿触发,中断类型号为70H77H,采用特殊嵌套、非缓冲方式和中断自动结束方式,8259A的端口地址是83H,84H。解:ICW1:0001 0011 =13H;ICW2:0111 0000 =70H ; ICW4:0001 0x11 =17H;程序段:MOV AL,13H OUT 84H,AL MOV AL,70H OUT 83H,AL MOV AL,17H MOV 83H,AL12.如何用屏蔽命令字禁止IR2、IR3的请求?又如何解除这一禁止命令?设8259A的端口地址是83H,84H。解:初始化后面设置:OCW1:0000 1100=0CH;MOVAL,0CHOUT 83H,AL解除禁止命令:MOVAL,0OUT 83H,AL13.CPU响应可屏蔽中断的条件是什么?答:一般外设向CPU的INTR端传入可屏蔽中断信号,CPU响应该可屏蔽中断请求信号的条件是:中断允许标志IF为1而且CPU已经执行完毕当前指令。14.CPU响应中断请求后,如何找到该中断服务子程序?服务程序执行完后,怎么返回主程序?答:CPU在响应中断请求后会接收到外设传入的中断类型号,然后利用中断类型号映射中断向量表对应的中断向量,读取中断向量对应的中断服务子程序的入口地址,接着执行中断服务子程序。执行完中断服务子程序后,用IRET指令结束中断返回主程序。15.写出下列情况下应向8259A提供的操作命令字:(1)读中断请求寄存器IRR;(2)读中断屏蔽寄存器IMR;(3)读中断服务寄存器ISR。解:17.8086/8088系统中的中断可分为哪几类?答:该中断系统可处理256种不同的中断,分为两大类:硬件中断,软件中断。硬件中断又可分为可非屏蔽中断和屏蔽中断。18.说明8259A全嵌套方式和特殊全嵌套方式的区别?答:全嵌套方式:如果对8259A进行初始化以后没有设置其他优先级方式,那么8259A就按全嵌套方式工作。该方式下,中断请求按照优先级07处理,IR0端的优先级最高,IR7端的优先级最低。特殊全嵌套方式和全嵌套方式基本相同,只有一点不同,就是在特殊全嵌套方式下,当处理某一级中断时,如果有同级的中断请求,那么,也会给予响应,从而实现一种对同级中断请求的特殊嵌套。 19.请给下面的初始化程序段加上注释,并说明各初始化命令字的含义。MOV AL,13H ;设置ICW1 :电平触发方式,单片8259A,要设置ICW4MOV DX,50H ;将偶地址50H装入DX寄存器OU T DX,AL ;将ICW1写入到8259A的偶地址50HINCDX ;DX寄存器增一,指向奇地址51HMOV AL,08H ;设置ICW2:中断类型码08H0BHOUT DX,AL ;将ICW2写入8259A的奇地址51HMOV AL,0BH;设置ICW4:一般全嵌套方式,非自动结束方式 缓冲方式主片,其他8位CPU系统OUT DX,AL ;将ICW4写入8259A的奇地址51H20.简述CPU响应一个外部中断的过程。答:8259A的中断请求寄存器(IRR)接收外部的中断请求,IRR对应位置1,对这一中断锁存。然后根据中断屏蔽寄存器(IMR)中对应位决定是否让该中断请求通过。若IMR对应位为0,则对该请求未屏蔽,可以通过进入中断优先级裁决器做裁决。中断裁决器将新的中断请求和正处理的中断比较,决定哪个中断请求更高。若新的请求更高,则通过相应的逻辑电路使8259A的INT为1,向CPU的INTR端发送中断请求。CPU每执行完一条指令后都会检查INTR端和IMN端是否有中断请求信号。外部的中断请求信号是通过INTR端送入的。倘若INTR端由外设送入的中断请求信号,这时CPU会检查标志寄存器的标志位IF是否为1,若为1则给予外设中断响应。CPU会发送到INTA(上划线)端两个负脉冲,第一个通知外设准备好中断类型码,CPU准备响应中断;第二个通知外设向数据总线发送中断类型码。CPU接到中断类型码后到中断向量表中查寻到相应的中断向量(中断服务子程序的入口地址),执行中断服务子程序。结束后返回主程序。第八章并串行通信与接口1. 8255A控制寄存器的端口的选中要求A1、A0112.8255A的控制字分为两类: 一类是芯片各端口的方式选择控制字,它可以使8255A的各端口工作于不同的方式下。方式选择控制字总是将端口C分为2组来控制。控制字的第7位称为标识位。如果为1,则写入控制寄存器的是方式选择控制字。一类是C端口按位置1/置0方式字,它可以使C端口中的任何1位置0或者置1。控制字的第7位如果为0,则写入控制寄存器的是C端口按位置1/置0方式字。3.例如8086系统中,8255A的控制端口的地址为00E6H,要求各端口的工作方式如下: 端口A:方式0,输出 端口B:方式0,输入 端口C的高4位:输出 端口C的低4位:输入 设置8255A的方式选择控制字的程序段如下: MOV AL, 83H MOV DX,00E6H OUT DX, AL 4.例如8086系统中,8255A的控制端口的地址为00E6H,要求端口C的PC3位置0,下面的程序段可以实现该要求。 MOV AL, 06H MOV DX,00E6H OUT DX, AL5.8255A工作于方式0的例子8255A作为连接打印机的接口,工作过程如下: 当主机要往打印机输出字符时,首先查询打印机的忙信号,如果打印机正在处理一个字符或者打印一行字符,忙信号为1;反之忙信号为0。当CPU查询到忙信号为1时,则循环等待,当忙信号为0,则通过8255A向打印机输出一个字符。 数据信号: CPU将待打印的数据通过8255A送给打印机状态信号: 打印机的忙信号(BUSY)通过8255A输入给CPU CPU通过8255A将数据准备好信号(STB)输出给打印机8255A端口工作方式选择 A端口工作于方式0,用于数据输出 B端口不用 C端口工作于方式0,PC2为BUSY信号输入端,故PC3PC0为输入方式;PC6为STB信号输出端,故PC7 PC4为输出方式设打印字符在CL中,8255A的端口地址为: A端口:00D0H B端口:00D2H C端口:00D4H 控制口:00D6H PP: MOV AL,81H OUT 00D6H,AL ;写控制寄存器,设置各端口工作方式 MOV AL,0DH OUT 00D6H,AL ;用C端口置0/置1方式使PC6为1,即STB高电平LPS: IN AL,00D4H ;读取C端口的值 TEST AL,04H ;测试PC2是否为1,即BUSY信号是否为1 JNZ LPS ;不为0,说明BUSY信号为1,循环等待 MOV AL,CL ;将打印字符送AL OUT 00D0H,AL ;如不忙,将CL的内容送端口A MOV AL,0CH OUT 00D6H,AL ;用C端口置0/置1方式使PC6为0,即STB低电平 ADD AL,1 ;将AL加1 OUT 00D6H,AL ;用C端口置0/置1方式使PC6为1,即STB高电平6. 8255A作为非编码键盘的接口键盘扫描程序第一步:判断有无按键按下 使A端口输出00H,读入B端口的数据,如果是FFH,则没有按键按下,继续第一步。否则进行第二步。第二步:行扫描法识别按键(1)使A端口的PA0输 出 低电平,其余为高电平。(2)观 察 列 线的状态。 (3)如果某条列线变为低电平,则第0行与该列相交位置上的键被按下;否则第0行没有键按下。(4)使PA1输 出 低电平,其余为高电平。(5)观 察 列 线的状态判断是否有键按下。(6)如此逐行扫描下去,直到最后一行。 通过分析可知,8255A的端口A工作在方式0的输出,端口B工作在方式0的输入,端口C不用。8255A端口的地址如下: A端口:0FFF8H B端口:0FFFAH C端口:0FFFCH 控制口:0FFFEH8255的初始化及检测有无按键按下: PORTA EQU 0FFF8H PORTB EQU 0FFFAH PORTC EQU 0FFFCH PORTCN EQU 0FFFEH MOV DX,PORTCN ;置8255A端口A、B工作在方式 0 MOV AL,10000011B ;端口A为输出口,端口为输入口 OUT DX,ALWAITK: MOV DX,PORTA ;等待键闭合 MOV AL,00 ;行码送全“0” OUT DX,AL MOV DX,PORTB ;读列码 IN AL,DX CMP AL,0FFH JZ WAITK ;无键按下,继续等待 行扫描法识别按键 MOV BL,0 ;扫描键盘矩阵,送键号初值 MOV BH,11111110B ;置初始扫描模式行码送FEH MOV CX,8FNDROW: MOV AL,BH ;送行码 MOV DX,PORTA OUT DX,AL ROL BH,1 ;修改行码 MOV DX,PORTB ;读列码 IN AL,DX CMP AL,0FFH JNZ FNDCOL ;有键按下,查列号 ADD BL,8 ;无键按下,指向下一行键号初值 LOOP FNDROW ;8行扫描未完,送下一行扫描码 JMP DONE ;8行扫描完,无键按下FNDCOL: ROR AL,1 ;查哪一列有键按下 JNC RIGHT ;查到按下键的键号 INC BL ;键号加1,查下一列 JMP FNDCOLRIGHT: ;按下键的编号在BL中DONE: ;无键闭合 7.接口是CPU与外设或外设与系统设备之间进行数据交换和通信的连接电路。8.并行通信就是把一个字符的各数据位用几条传输线同时进行传输。优点:实际的传输速度快,信息率高。缺点:随着传输距离的增加,电缆开销大。9. A1、A0 :端口选择信号。8255A一共有3个数据端口和1个控制端口,共4个端口当A1、A0为00时,选中A端口当A1、A0为01时,选中B端口当A1、A0为10时,选中C端口当A1、A0为11时,选中控制端口10.8255A有三种基本工作方式: 方式0:基本的输入/输出方式 方式1:选通的输入/输出方式 方式2:双向传输方式 端口A可以工作在3种工作方式中的任何一种。 端口B只能工作方式0或者方式1。端口C一般分为两组,高4位与端口A构成一组配合工作,低4位与端口B构成一组配合工作,为A和B端口的输入/输出提供控制信号和状态信号。11. 串行通信就是一条信息的各位数据位在一个信道上按照固定的时间长度被逐位按顺序传送的通讯方式称为串行通讯。串行通信的信息传送速度低慢,信息率低,但串行通信的成本低,适合远距离传输。12.13. 串行通信的分类:答:异步传输:数据以单个字符为单位在信道上传输,两个字符之间的传输间隔是任意的,所以每个字符的前后要加上一些特殊的数位作为分割位。特点:采用异步通信时,接收方总是在每个字符的起始位开始的时候进行一次时钟的重新定位,因此当收发时钟的偏差不大时,不会产生采样错误,但是异步通信的无用比特位的比重很大。所以异步通信的特点是不要求双方时钟完全一致,但传输率比较低。同步传输:数据以字符组为单位的在信道上传输,发送方在传送的字符组前要加上同步字符,接受方以同步字符作为接收的标志。特点:在同步传输中,由于收发双方一次可以传递数据单位是一个字符组,这就要求接收方要经过多次采样来接收数据,所以要求双方时钟完全一致,但是同步传输无用的信息量较少,所以传送的效率高。因此同步通信的特点是发送率高,但发送双方要求严格的相同时钟周期。14什么是波特率?答:每秒传送的位数。标准波特率:110 300 600 1200 1800 2400 4800 9600 19200波特率因子是收发时钟倍频于波特率的倍数称为波特率因子。波特率因子可以是16,32,64。例如:如果波特率是300,波特率因子是16,则发送时钟和接收时钟的频率是4800,15.什么是发送时钟和接收时钟?答:发送方发送1个比特位所用的时间长度称为发送时钟。接受方接受1个比特位所用的时间长度称为接收时钟。16. RS-232C是一种串行物理接口标准,它为数据终端设备DTE(计算机)和数据通信设备DCE(调制解调器)的连接提供了一个标准的接口。17.RS-232C接口的电气特性答:RS-232-C采用负逻辑规定逻辑电平,信号电平与通常的TTL电平不一致,规定-5-15V表示1,+5+15V表示0,所以需要在接收端和发送端进行电平的转化。18. RS-232C接口的功能特性:第九章计数器/计时器与DMA控制器0.重点背住:1、写入计数器的控制字,规定其工作方式。写入计数初值。例如:1.计数器0,工作于方式3,计数初值为BCD格式,值为1234H; 2.计数器2,工作于方式2,计数初值为二进制格式,值为61H; 设8253的端口地址为4043H(计数器0、1、2地址;控制寄存器地址)。初始化编程如下:MOV AL,37H ;对计数器0送工作方式字(00 11 011 1 =37H)OUT 43H,AL ;控制寄存器的地址MOV AL,34H ;先送低8位OUT 40H,AL ;计数器0的地址MOV AL,12H ;再送高8位OUT 40H, AL ;计数器0的地址MOV AL,94H ;对计数器2送工作方式字(10 01 010 0 =94H)OUT 43H,AL;控制寄存器的地址MOV AL,61H ;送计数初值OUT 42H,AL ;计数器2的地址2、锁存后读计数值。例如: 接上题(计数器2的工作方式是2,二进制格式)。要求读出并检查计数器2的计数值是否为“55AAH”。如果计数值不是“55AAH”则等待再读,如果为“55AAH”后程序可继续执行。 设8253的端口地址为4043H(计数器0、1、2地址;控制寄存器地址)。程序段如下: LPCN:MOV AL,84H ;

温馨提示

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

评论

0/150

提交评论