微机原理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 AXB口状态进栈暂存或野

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 AXB口状态出栈

RET返回主程序

PRC1 ENDP 子程序定义完毕或斗

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

PUSH AXB口状态进栈暂存

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

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

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

RT2: POP AXB口状态出栈

RET返回主程序

PRC2 ENDP 子程序定义完毕

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

PUSH AXB口状态进栈暂存

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

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

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

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

RT3: POP AXB口状态出栈

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 子程序定义完毕

CSEGENDS代码段定义完毕

END START 主程序结束

假设开关0~开关7的一端链液接依次接PB0~PB7,各开关另一端拉地链旅;

假设8个LED共阳极接电源+Vcc, LED0~LED7阴极依次接PA0~PA7

假设单片机系统中,8255的A口、B口、C口、控制口地址依次是:

7FF0H、7FF1H、7FF2H、7FF3H,汇编程序如下:

.

MOV A, 1000010B 初始化命令字:A口方式0输出,B口方式0输入

MOV DPTR, #7FF3H 控制口地址→DPTR

MOVX @DPTR,A 初始化命令字→8255控制口

LP:

MOV DPTR, #7FF1H B口地址→DPTR

MOVX A, @DPTR B口所连接的开关状态→累加器棚唤物

MOV DPTR, #7FF0H A口地址→DPTR

MOVX @DPTR,A 存于累加器的开关状态数据→A口所连接的8个LED

SJMP LP

这是我一片51实现16路抢答器的一个项目中的一段代码。希望对你有用。

ORG 0000H

JMP MAIN

ORG 1000H

MAIN:

MOV SP,#60H

CALL SETLEDS

mainloop:

jmp mainloop

对16组LED置数

SETLEDS:

mov dptr,#0fffeh 第一个8255A控制字地址

mov a,#80h 设置A、B、C口为方式0输出

movx @dptr,a

mov dptr,#0fffdh 第二个8255A控制字地址

mov a,#80h 设神悔桥置A、B、C口为方式0输出

movx @dptr,a

mov dptr,#0fffbh 第三个8255A控制字地址

mov a,#80h 设置A、B、C口为方式0输游猛出

movx @dptr,a

mov dptr,#0fff7h 第四个8255A控制字地址

mov a,#80h 设置A、B、C口为方式0输出

movx @dptr,a

mov dptr,#0ffefh 第五个8255A控制字地址

mov a,#80h 设置A、B、C口为方式0输出

movx @dptr,a

mov dptr,#0ffdfh 第六个8255A控制字地址

mov a,#80h 设置A、B、C口为方式0输出

movx @dptr,a

mov dptr,#0ff3eh 第1组数码管地址

mov a,#0f1h 第1组数码管显示1

movx @dptr,a

mov dptr,#0ff7eh 第2组数码管地址

mov a,#02h 第2组数码管显示2

movx @dptr,a

mov dptr,#0ffbeh 第3组数码管地址

mov a,#03h 第3组数码管显示3

movx @dptr,a

mov dptr,#0ff3dh 第4组数码管地址

mov a,#04h 第4组数码管显示4

movx @dptr,a

mov dptr,#0ff7dh 第5组数码管地址

mov a,#05h 第5组数码管显示5

movx @dptr,a

mov dptr,#0ffbdh 第6组数码管地址

mov a,#06h 第6组数码管显示6

movx @dptr,a

mov dptr,#0ff3bh 第7组数码管地址

mov a,#07h 第7组数码管显示7

movx @dptr,a

mov dptr,#0ff7bh 第8组数码管地址

mov a,#08h 第8组数码管显示8

movx @dptr,a

mov dptr,#0ffbbh 第9组数码管地址

mov a,#09h 第9组数码管显示9

movx @dptr,a

mov dptr,#0ff37h 第10组数码管地址

mov a,#00h 第10组数码管显示0

movx @dptr,a

mov dptr,#0ff77h 第11组数码管地址

mov a,#01h 第11组数码管显示1

movx @dptr,a

mov dptr,#0ffb7h 第12组数码管地址

mov a,#02h 第12组数码管显示2

movx @dptr,a

mov dptr,#0ff2fh 第13组数码管地址

mov a,#03h 第13组数码管显示3

movx @dptr,a

mov dptr,#0ff6fh 第14组数码管地址

mov a,#04h 第14组数前李码管显示4

movx @dptr,a

mov dptr,#0ffafh 答题计时数码管地址

mov a,#05h 答题计时数码管显示5

movx @dptr,a

mov dptr,#0ff1fh 第15组数码管地址

mov a,#06h 第15组数码管显示6

movx @dptr,a

mov dptr,#0ff5fh 第16组数码管地址

mov a,#07h 第16组数码管显示7

movx @dptr,a

mov dptr,#0ff9fh 抢到组数码管地址

mov a,#08h 抢到组数码管显示8

movx @dptr,a

RET

end


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

原文地址: http://outofmemory.cn/yw/12400168.html

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

发表评论

登录后才能评论

评论列表(0条)

保存