|
;
; 键控流水灯,
; MCUIC16F877A
; 日期:2008.12.2
; 文件名:lsd.asm
; 利用PORTB<1>上的一个开关,控制PORTD上的8个LED流水灯的流动方向.
;
;********************************************************
#include "16F877A.INC" ORG 0000H
GOTO MAIN
ORG 0005H
MAIN
NOP ;ICD2必须的NOP指令
BSF STATUS, RP0 ;置为体1,设置PORTB,PORTD状态
MOVLW 0FFH ;
MOVWF TRISB ;设PORTB为全部输入
CLRF TRISD ORTD为输出
BCF STATUS, RP0 ;回到体0
BSF STATUS,C ;设C为1
CLRF PORTD ;清PORTD
FLAG
BTFSC PORTB,1 ;测试PORTB<1>是否闭合
GOTO DISPLY_R ;是,转到DISPLY_L,否.转到DISPLY_R
DISPLY_L
CALL DELAY10MS
BTFSS PORTB,1 ;开头防抖检测
GOTO DISPLY_R
CALL DELAY1 ;延时
RLF PORTD,1 ;左移一位
GOTO DISPLY_L
DISPLY_R
CALL DELAY10MS
BTFSC PORTB,1
GOTO DISPLY_L
CALL DELAY1 ;延时
RRF PORTD,1 ;右移一位
GOTO DISPLY_R
;;;;;;;;;延时程序;;;;;;;;
DELAY1
MOVLW D'255'
MOVWF 30H
LOOP1_1
MOVLW D'255'
MOVWF 31H
LOOP1_2
DECFSZ 31H,1
GOTO LOOP1_2
DECFSZ 30H,1
GOTO LOOP1_1
MOVLW 00H
RETURN
DELAY10MS ;10ms延时程序
MOVLW D'100'
MOVWF 30H
LOOP2_1
MOVLW D'32'
MOVWF 31H
LOOP2_2
DECFSZ 31H,1
GOTO LOOP2_2
DECFSZ 30H,1
GOTO
LOOP2_1
MOVLW 00H
RETURN
END
|
|