谁能帮我用汇编写一段8255A扩展的程序,要求三个口均为工作方式0输入,并将端口的信号传送至C51单片机

谁能帮我用汇编写一段8255A扩展的程序,要求三个口均为工作方式0输入,并将端口的信号传送至C51单片机,第1张

这是我一片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

用8255扩展之后就是PA,PB,PC了,怎么还会只有8个端口呢?

用8255扩展51单片机 I/O口的程序,需要结合电路图才能确定,不同的连线,PA,PB,PC的地址是不同的,不过我也忘记怎么写程序了= =!

8255中的A0.A1,CS非,与单片机的连线决定了,8255中,PA,PB,PC的各端口地址。单片机中P0,是低8位地址线,P2,是高8位地址线。

例如 CS非连接P2.7A0,A1通过锁存器连接到单片机中的P0.0,P0.1的话。那么PA口地址就是 7FFCH。

因为 CS非要低电平,8255才工作,因为 要选择PA口,则A0=0,A1=0。

这样碧迹,CS,A0,A1对应单片机中的 P2.7,P0.0,P0.1就是低电平。

所以单片机中低8位地址加上高8位地址用2进制表示就是 0111111111111100,

对应的16进制就是 7FFCH

同理,PB口对应悔滚并的就是 7FFDH

PC口对应的就是7FFEH

还有个控制端。对应的就是 7FFFH

如果你要用8255的扩展口的话,就要先打通控制端,看你要用什么工作方式了。

有个工作方式控制字的,可以让你选择使用啥工作方式。但是不管怎样,都要先打通控制端 ,用汇编来写就是 MOV DPTR,#7FFFH

然后就是选择工作方式了,比方说用 A口——方式0输入,B口——方式0输出,C口高半字节——输入,C口低半字节——输出,则她的工作方式控制字就为 10011000B,就是 98H。

程序就是 MOV DPTR,#7FFFH 这个就是 打通控制端

MOV A,#98H 选择方式控制字

MOVX @DPTR,A 把控制字备握弄到8255的控制口去

这些在单片机的书中都有,多看看吧。写的这么详细了,给我最佳吧。呵呵


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存