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