8086汇编程序:8255A并行口实验 - 拨码开关控制LED状态

实验目的:

  • 掌握流行的软硬件仿真软件Proteus的使用方法,从实践、应用的角度学习8086最小系统的工作。
  • 熟悉Proteus调用外部编译器,熟悉Proteus的程序编写环境。
  • 掌握8255A和8086CPU接口方法,掌握8255A的工作方式和编程原理。

实验内容

利用8086最小系统和8255A接口芯片设计系统电路并编程实现:端口A作为输入端口,接有拨码开关;端口B作为输出端口,接有8个LED;不断检测拨码开关是否闭合,控制响应的LED灯的亮灭。

实验步骤

  • 利用 Proteus+emu8086 平台软件,实现软硬件系统的联调。启动 Proteus 软件,完成硬件电路图的连接,确定8255A 端口地址。
  • 启动emu8086 软件,编写.asm 源程序,编译生成.exe可执行文件。
  • 在Proteus中双击8086CPU,加载.exe可执行文件。
  • 单步执行程序,查看每一条指令的运行结果。

proteus原理图

程序代码

CODE SEGMENT
START:
    MOV AL,10010000B 
    ; A口方式0,A口检测拨码开关输入,B口LED输出,C口默认
    OUT 76H,AL	
    ;0111 0110 写控制字   
T:  
	IN AL,70H	
	;A口按键输入,送给AL
	OUT 72H,AL	
	;B口LED输出AL的内容
	MOV CX,100  ;循环100次
DELAY:LOOP DELAY
	JMP T
	
	MOV AH,4CH
	INT 21H
CODE ENDS
    END START

实现的功能:8255A的PA口是输入功能,读取拨码开关的状态,读取高低电平(0还是1),PB口是输出功能,接的是LED,并且接了限流电阻,代码里逻辑很清晰,读取PA口数据,将PA口数据输出到PB口,这样就实现了拨码开关控制LED状态

这一段是延时程序,CX=100 ,LOOP语句是CX减1,直到减到0为止,跳出循环,执行下一次程序,从T:开始继续扫描拨码开关的状态,将这个状态输出送给LED

T:  
	IN AL,70H	
	;A口按键输入,送给AL
	OUT 72H,AL	
	;B口LED输出AL的内容
	MOV CX,100  ;循环100次
DELAY:LOOP DELAY
	JMP T

### 如何在Proteus中放置配置数码管进行电路仿真 #### 数码管的选择与放置 在 Proteus 中创建新工程后,在元件库中搜索“Seven Segment Display”,选择合适的七段数码管型号。对于共阳极数码管,确保选择了相应的类型[^1]。 #### 驱动电路设计 针对共阳极数码管,需使用PNP三极管作为驱动器。具体做法如下: - 将PNP三极管的集电极连接到数码管各段的公共端; - 发射极接到正电源VCC; - 基极通过限流电阻连接至单片机I/O口用于控制信号输入; 注意:为了防止误触发,在位选线上应加接下拉电阻至地线,这一步骤尤其重要于仿真实验环境中。 #### 单片机接口设置 选用STC89C52RC或其他兼容51内核的微控制器芯片。将数码管的数据线分别对应连接到单片机的P0~P3口中任一组未被占用的引脚上。如果采用多位动态扫描方式,则还需额外分配若干根I/O来负责各个位的选择工作[^3]。 #### 编程实现简单测试功能 编写简单的Keil C程序以验证硬件连线无误。下面给出了一段基本代码示例,它会依次点亮数码管上的数字图案: ```c #include <REGX52.H> unsigned char code table[] = { 0x3f, // '0' 0x06, // '1' ... }; void delay() {/*...*/} void main(){ while (true){ for(int i=0; i<sizeof(table)/sizeof(*table)-1 ;++i){ P0 = table[i]; delay(); } } } ``` 此代码片段定义了一个字符数组`table`存储了不同数值对应的字模数据,并在一个无限循环里逐一遍历这些值输出给P0端口,配合延时函数完成视觉上的连续变化效果。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北国无红豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值