微机原理8255编程

微机原理8255编程,第1张

;;8255硬件连接及软件设置:

;;B口方式0输入,PB0~PB3分别连接K1~K4;

;;A口方式0输出,PA0~PA3外接驱动电路控制灯的4种动作;

;;驱动电路,可由74LS06、ULN2003作反相电流放大驱动继电器或固体继电器组成;

;;C口闲置;

;;按以上设置,8255方式控制字是82H ;

;;在PC机作主机的系统中,8255的4个寄存器地址是:

;;A口60H,B口61H,方式控制寄存器63H。

;;汇编程序如下:

SSEG SEGMENT PARA STACK ;堆栈段定义

DW 30H DUP()

SSEG ENDS

CSEG SEGMENT ;代码段定义

ASSUME CS:CSEG,DS:CSEG

ORG 200h ;主程序首址

START: MOV AL, 82H ;方式控制字

MOV DX, 63H

OUT DX, AL ;方式控制字送入方式控制寄存器

Scan: IN AL,61H ;扫描从B口读入的K1~K4状态

CALL PRC1 ;开灯、关灯

CALL PRC2 ;是否暂停

CALL PRC3 ;是否换向

CALL PRC3 ;是否移动

JMP Scan ;主程序循环

PRC1 PROC NEAR ;"开/关灯" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000001B ;检测PB0输入状态

JZ CloseL ;若PB0低电平,表示K1断,转CloseL处执行

OpenL: OUT 60H,AL ;若PB0高电平,表示K1通,PA0输出高电平,开灯

JMP RT1 ;转RT1处指令返回

CloseL: MOV AL,00000000B ;PA0输出低电平

OUT 60H,AL ;关灯

RT1: POP AX ;B口状态出栈

RET ;返回主程序

PRC1 ENDP ;子程序定义完毕

PRC2 PROC NEAR ;"暂停" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000010B ;检测PB1输入状态

JZ RT2 ;若PB1低电平,表示K2断,不暂停

PAUS: OUT 60H,AL ;若PB1高电平,表示K2通,PA1输出高电平,暂停

RT2: POP AX ;B口状态出栈

RET ;返回主程序

PRC2 ENDP ;子程序定义完毕

PRC3 PROC NEAR ;"换向" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000100B ;检测PB2输入状态

JZ RT3 ;若PB2低电平,表示K3断,不换向

CHG: MOV AL,00000101B ;若PB2高电平,表示K3通

OUT 60H,AL ;PA2、PA0输出高电平、换向,灯保持亮

RT3: POP AX ;B口状态出栈

RET ;返回主程序

PRC3 ENDP ;子程序定义完毕

PRC4 PROC NEAR ;"移动" *** 作 子程序定义

TEST AL,00001000B ;检测PB3输入状态

JZ RT4 ;若PB3低电平,表示K4断,不移动

MOVE: MOV AL,00001001B ;若PB3高电平,表示K4通

OUT 60H,AL ;PA3、PA0输出高电平、移动,灯保持亮

RT4: RET ;返回主程序

PRC4 ENDP ;子程序定义完毕

CSEG ENDS ;代码段定义完毕

END START ;主程序结束

宏与子程序都可以用一个名字定义一段程序,以简化源程序的结构和设计。二者的区别:

1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;

2、宏调用是通过宏扩展来实现的,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化

子程序

优点:模块化,节省内存,可被多次调用,编程效率高。

缺点:额外开销(保存返回地址,计算转向地址,传递参数等)大,增加了执行时间。适用于子功能代码较长、调用比较频繁的情况。

宏调用:

优点:参数传送简单,执行效率高。

缺点:不节省空间,适用于子功能代码较短、传参较多的情况。

1、源程序用宏汇编程序翻译(汇编)后,可以得到三个文件:

一个是扩展名为 OBJ 的目标文件,在该文件中,将源程序的 *** 作码部分变为机器码,但地址 *** 作数是可浮动的相对地址,而不是实际地址,因此需经 LINK 连接文件进行连接才能形成可执行文件EXE。

第二个文件是列表文件,扩展名为 LST ,它把源程序和目标程序列表,以供检查程序用。

第三个文件是交叉索引文件,扩展名为 CRF ,它是一个对源程序所用的各种符号进行前后对照的文件。其中目标文件是必须产生的,而其它两个文件在需要时给予命令就可产生,对连接和执行汇编程序无直接的关系。

2、

子程序的定义:

如果某程序段在源程序内反复出现,那么,就可把该程序段定义为子程序。这样可以缩短源程序长度、节省目标程序的存储空间,也可提高程序的可维护性和共享性。

宏调用的定义:

经过宏定义后的宏指令就可以在源程序中被调用,这种对宏指令的调用称为宏调用。

宏展开的过程:

宏展开实际上是用宏定义时设计的宏体去代替宏指令名,并且用实际参数一一取代形式参数,即第n个实际参数取代第n个形式参数,以形成符合设计功能且能够实现、执行的程序代码。

区别及各自特点:

1)宏调用是用一个“单词”代替一段程序或字符串,编译后的机器码会变长,但是由于没有转移和返回等的开销,运行时间较短。

2)子程序调用可以节省存储空间和节约代码设计时间,提供模块化的程序设计,使程序调试和维护简单。但是使用子程序要保护和恢复相关的寄存器和子程序现场,增加一些开销,运行时间较长。

是的,C语言的子程序包括过程和函数两种。

子程序在一些主流的编程语言中也叫函数或者方法,是指一段在一起的、可以做某一件事儿的程序,函数是一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。函数。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。C语言源程序是由函数组成的。函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。C语言不仅提供了极为丰富的库函数(如TurboC,MSC都提供了三百多个库函数),还允许用户建立自己定义的函数。用户可把自己的算法编成一个个相对独立的函数模块,然后用调用的方法来使用函数。

可以说C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函数式语言。由于采用了函数模块式的结构,C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。C语言运行时,首先系统检查语法的正误,再运行程序的语法;C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。

in是输入型,调用该子程序时,必须对其赋值。out是输出型,子程序 *** 作的结果通过它传给外部变量。in-out是输入输出型。它们都是子程序的接口。定义完以后,调用子程序时可以看见相应的管脚。temp是子程序内部变量,旨在子程序内部使用,不与外部变量打交道。

以上就是关于微机原理8255编程全部的内容,包括:微机原理8255编程、宏指令和子程序的异同编程时如何选用(微机汇编)、汇编,简答题,求答案!高分回报!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9746154.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存