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 ; 程序结束
|