[PIC®/AVR®/dsPIC®产品] 使用汇编写流水灯程序

[复制链接]
1326|4
 楼主| gejigeji521 发表于 2025-2-28 14:57 | 显示全部楼层 |阅读模式
  1. LIST    P=16F877A          ; 指定使用的微控制器型号
  2.     INCLUDE "P16F877A.INC"     ; 包含PIC16F877A的头文件

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

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

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

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

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

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

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

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

  28.     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 | 显示全部楼层
很多人不知道如何写这个了吧。
自动化陈稳 发表于 2025-4-27 00:54 | 显示全部楼层
你可以根据需要调整延时的长短以及 PORTB 的控制方式,甚至可以通过修改移位方向或者移位步长来改变效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2465

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部