打印
[PIC®/AVR®/dsPIC®产品]

使用汇编写流水灯程序

[复制链接]
68|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gejigeji521|  楼主 | 2025-2-28 14:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LIST    P=16F877A          ; 指定使用的微控制器型号
    INCLUDE "P16F877A.INC"     ; 包含PIC16F877A的头文件

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC  ; 配置位设置

    ORG     0x0000            ; 程序起始地址
    GOTO    START             ; 跳转到主程序

START:
    BSF     STATUS, RP0       ; 选择Bank 1
    CLRF    TRISB             ; 设置PORTB为输出
    BCF     STATUS, RP0       ; 返回Bank 0

MAIN_LOOP:
    MOVLW   0x01              ; 初始化W寄存器为0x01(RB0点亮)
    MOVWF   PORTB             ; 将W寄存器的值写入PORTB

SHIFT_LOOP:
    RLF     PORTB, F          ; 左移PORTB的值
    CALL    DELAY             ; 调用延时子程序
    BTFSS   PORTB, 7          ; 检查RB7是否点亮
    GOTO    SHIFT_LOOP        ; 如果未点亮,继续左移

    MOVLW   0x01              ; 重新初始化W寄存器为0x01
    MOVWF   PORTB             ; 将W寄存器的值写入PORTB
    GOTO    SHIFT_LOOP        ; 继续循环

DELAY:                        ; 延时子程序
    MOVLW   0xFF              ; 设置延时计数器
    MOVWF   0x20              ; 使用0x20作为计数器

DELAY_LOOP:
    DECFSZ  0x20, F           ; 递减计数器,如果为0则跳过下一条指令
    GOTO    DELAY_LOOP        ; 继续循环
    RETURN                    ; 返回主程序

    END                       ; 程序结束


使用特权

评论回复
沙发
gejigeji521|  楼主 | 2025-2-28 15:00 | 只看该作者
代码说明:
配置位设置:__CONFIG指令用于设置PIC16F877A的配置位,例如关闭看门狗定时器、启用上电延时等。

PORTB初始化:在START标签下,程序将PORTB设置为输出端口。

流水灯效果:MAIN_LOOP和SHIFT_LOOP标签下的代码实现了流水灯效果。通过左移操作(RLF指令)依次点亮LED。

延时子程序:DELAY标签下的代码实现了一个简单的延时,用于控制LED点亮的速度。

使用特权

评论回复
板凳
gejigeji521|  楼主 | 2025-2-28 15:01 | 只看该作者
很多人不知道如何写这个了吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

2374

帖子

8

粉丝