第一弹:华科单片机复试考题,C51单片机和8255A的应用,用两个开关实现8的灯的四种状态(汇编版)

题目:单片机与8255A的链接图如下,按键开关状态按下表控制PA口接8个发光二极管,PB口上接了两个按键开关,按键开关状态按下表控制PA口的发光二极管点亮,尝试编写不同状态控制二极管点亮程序。
在这里插入图片描述

8255A的A1,A2连接地址线的低两位P0.0和P0.1

分析:很好理解PB口输入,两个开关数据,一共形成四种状态,每种状态对8个LED的一种状态。所以此题的关键是要明白8255A的控制方式以及,汇编中SWITCH语句怎么写。

  1. 分析8255A的地址

我们开始写程序啦,首先先搞清楚8255A的控制字以及PA口,PB口,控制字地址在哪里怎么写
看图CS片选信号要为0,p2.7为0,8255A才工作,两位A1A0的四种组合分别对应 A1A0=00 PA口地址,A1A0=01 PB口地址,A1A0=10 PC口地址,A1A0=11控制字地址。其他的地址线默认给1。地址就出来啦。
分析得出PA口地址=0XXXXXXXXXXXXX00B=7FFCH
(X为无关1,0都可以一般习惯给1)
PB口地址=0XXXXXXXXXXXXX01B=7FFDH
PC口地址=0XXXXXXXXXXXXX10B=7FFEH
控制字地址=0XXXXXXXXXXXXX11B=7FFFH
地址
找到了 下一步就是初始8255A,那么
PA口为输出点亮LED,PB口输入读入开关的状态,都工作在方式0故控制字8255A的控制字为10000010B=82H,这里 书上有详细的我就不废话了,或者百度8255A。

所以 第一句应该就是
MOV DPTR,#7FFFH
MOV A,#82H
MOVX @DPTR,A
以 DPTR填写 控制字的地址,A放控制字的数据。ok 那么 写PA口和读PB口和这个 思路一样

  1. 汇编的SWITCH分支语句
    这个时候我们知道c51单片机怎么和 8255A交互了以后。在搞清楚怎么用两个开关实现四种状态的控制呢。也就是汇编的SWTICH语句
    怎么写
    我们先给个标号
    TAB:
    AJMP STATE0
    AJMP STATE1
    AJMP STATE2
    AJMP STATE3

每个跳转对应一种处理方式,是不是就完成了SWITCH语句嘿嘿。你只需要在STATE0标号下完成他的操作就行了。 这里要知道STATE0的相对地址是0(相对于TAB),STATE1相对地址是1x2=2。为什么 乘2?因为AJMP占2个字节。 那STATE2相对地址是多少 2x2=4。 举一反三如果用:LJMP代替AJMP 相对地址怎么算呢?LJMP是占三个字节的。所以你懂了吧。

所以 我们只需要从PB口读入开关的状态,然后 把这个值扩大两倍,在把TAB的地址加上这个值,是不是就完成了switch语句呢?代码就出来啦。

ORG 0000H
MOV DPTR,#7FFFH
MOV A,#82H//控制字 1 0000 010  A输出 B口输入 
MOVX @DPTR,A

LOOP:MOV DPTR,#7FFDH //B口地址
MOVX A,@DPTR   //读B口
ANL A,#03H //只取低两位

MOV DPTR,#TAB //查表
MOV B,A    //就是把A*2 别问为什么不用MUL乘法指令,这个MUL乘法指令占四个指令周期,哥写的代码效率高你懂吧只需要三个指令周期
ADD A,B   
JMP @A+DPTR  //这段代码就是上面所讲的
AJMP LOOP   //循环不停查询

TAB:AJMP STATE0  //标号
AJMP STATE1
AJMP STATE2
AJMP STATE3

STATE0:MOV DPTR,#7FFCH//数据给A口
MOV A,#00H       //全灭
MOVX @DPTR,A
AJMP LOOP

STATE1:MOV DPTR,#7FFCH//数据给A口
MOV A,#55H      //1357点亮
MOVX @DPTR,A
AJMP LOOP

STATE2:MOV DPTR,#7FFCH//数据给A口
MOV A,#0AAH       //2468全灭
MOVX @DPTR,A
AJMP LOOP

STATE3:MOV DPTR,#7FFCH//数据给A口
MOV A,#0FFH       //全亮
MOVX @DPTR,A
AJMP LOOP
END

源码给了哦 仿真效果如下。还是自己看了分析直接写一下吧!!
图一K1为0 K2为1
图二K1为1 K2为0
Proteus接线太丑了见谅!!
在这里插入图片描述在这里插入图片描述

感谢阅读
有兴趣交流单片机复试或者想一起学习进步的
加我QQ:572378048(备注来意)
以及我建立的单片机交流群1045064419

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值