LL-BObo 2024-04-21 19:43 采纳率: 42.9%
浏览 63
已结题

为什么proteus流水灯不亮

proteus仿真软件,为什么下面的译码电路的左侧的流水灯不亮?

img

这是代码

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-21 19:43
    关注

    引自免费微信小程序:皆我百晓生

    从您提供的信息来看,似乎是一个基于Proteus进行的8位微处理器系统设计的问题。根据您的描述,左侧的流水灯不亮可能有以下几个原因:

    1. 硬件连接错误:首先,确保所有硬件组件(例如LED、驱动器,如74HC595等)正确地在Proteus中连接到微处理器的端口上,并且电源和接地线也已正确连接。

    2. 微处理器型号:您没有明确指出使用的微处理器型号,但看起来像是8080或其他类似的8位CPU。不同类型的CPU有不同的引脚定义和控制方式,这可能影响流水灯的工作。

    3. 代码问题:您提供的代码片段非常简短,仅包含将某个寄存器的值输出到指定地址的功能,而没有看到任何循环或者控制逻辑来切换流水灯的状态。为了点亮流水灯,你需要一个循环来不断改变输出的数据,这样LED才会按照预期闪烁。

    这里提供一个简单的示例代码,它使用8080指令集,通过74HC595串行到并行转换器控制一组LED流水灯。假设我们正在使用8080 CPU,且流水灯由P0口驱动,74HC595的CS(片选)、SHCP(时钟/移位)和STCP(存储)分别连接到CPU的某个输出引脚上,比如P2.0、P2.1和P2.2。

    ; 定义段
    .CODE
        ORG 0x0000 ; 设置代码起始地址
    
    START:
        MOV A, 0x01 ; 设置初始LED状态为第一个LED亮
        OUT P2.0, A ; 输出到74HC595的CS引脚使能
        MOV C, 0x08 ; 初始化计数器C为8 (8个LED)
    
    COUNT_LOOP:
        MOV DX, P2.1 ; 将DX设置为SHCP(时钟/移位)引脚
        SHL A, 1     ; 左移当前LED状态一位
        JNC SKIP_OUT ; 如果最高位未变,跳过输出操作
        ROR A        ; 否则,右移A,清除最高位
    SKIP_OUT:
        OUT DX, A    ; 将新的LED状态输出到74HC595
        DJNZ C, COUNT_LOOP ; 如果计数器不为零,继续循环
        JMP START   ; 重复开始,保持循环
    
    END START
    

    这个代码片段使用了8080汇编语言,通过循环不断地更新74HC595的输入数据,从而实现流水灯的效果。要将其应用到Proteus中,请确保将CPU、74HC595以及相关的I/O端口正确配置。

    如果您仍然遇到问题,建议检查硬件连接是否正确,或者提供更详细的电路图和代码,以便我可以进一步协助您解决具体问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created