1. MPLAB IDE.
2. .
3. MPLAB IDE, .
4. .
, P16F877:
#include <P16F877.inc>
;
MAX_COUNT_STEP equ D'14';
MIN_COUNT_STEP equ D'6';
DREB equ D'10';
;
PAUSE equ D'150';
COUNT_STEP_UP_KEY equ D'20';
;
COUNT_STEP_DOWN_KEY equ H'21';
;
COUNT_STEP equ H'22';
BIT_NER equ H'23';
JZ macro LBL;
; LBL
;
;
btfsc STATUS,Z;
;
goto LBL;
endm;
ORG 0;
goto START; START
OUTPUT addwf PCL,F;
;
retlw B'00000000';
retlw B'00000000';
retlw B'00000000'
retlw B'00000000'
retlw B'00000000'
retlw B'00000000'
retlw B'00011111'
retlw B'00001111'
retlw B'00000111'
retlw B'00000011'
retlw B'00000000'
retlw B'00100001'
retlw B'00100101'
retlw B'00101101'
retlw B'00111101'
retlw B'00000000'
retlw B'00000000'
retlw B'00000000'
START bsf STATUS,RP0; 1
clrf TRISB; TRISB
bsf OPTION_REG,NOT_RBPU;
; PORTB
clrf PORTB; PORTB
bcf STATUS,RP0; 0
clrf PORTA;
movlw D'10';
movwf COUNT_STEP;
START0 btfsc PORTA,1; 1 PORT (
; )
goto ASDF; ASDF
call STEP_UP_KEY;
;
goto NEXT; NEXT
ASDF btfsc PORTA,2; 2 PORT (
;)
goto IN_ZERO_COUNT; IN_ZERO_COUNT
call STEP_DOWN_KEY;
;
goto NEXT
IN_ZERO_COUNT clrf COUNT_STEP_UP_KEY
clrf COUNT_STEP_DOWN_KEY
NEXT call SET_STEP
nop;
nop
nop
nop
nop
goto START0; START0 (
; )
STEP_UP_KEY incf COUNT_STEP_UP_KEY,f;
; COUNT_STEP_UP_KEY (
; )
|
|
movfw COUNT_STEP_UP_KEY;
sublw DREB,0;
JZ INC_STEP; ,
;INC_STEP
movfw COUNT_STEP_UP_KEY;
sublw PAUSE;
JZ IN_ZERO_STUPKEY
goto END_STU
IN_ZERO_STUPKEY clrf COUNT_STEP_UP_KEY
goto END_STU
INC_STEP movfw COUNT_STEP
sublw MAX_COUNT_STEP
JZ END_STU
incf COUNT_STEP,f
END_STU return
STEP_DOWN_KEY incf COUNT_STEP_DOWN_KEY,f;
;
movfw COUNT_STEP_DOWN_KEY; W
sublw DREB;
JZ DEC_STEP;
movfw COUNT_STEP_DOWN_KEY
sublw PAUSE
JZ IN_ZERO_STDOKEY
goto END_STD
IN_ZERO_STDOKEY clrf COUNT_STEP_DOWN_KEY
goto END_STD
DEC_STEP movfw COUNT_STEP
sublw MIN_COUNT_STEP
JZ END_STD
decf COUNT_STEP,f
END_STD return
SET_STEP movfw COUNT_STEP
sublw D'8'
JZ BIT_STOP
ovfw COUNT_STEP
sublw D'12'
JZ BIT_STOP
movfw COUNT_STEP
sublw D'7'
JZ BIT_STOP_NO
movfw COUNT_STEP
sublw D'13'
JZ BIT_STOP_NO
sublw D'10'
JZ BIT_STOP_NO
BIT_STOP_NO bcf BIT_NER,0
goto END_STEP
BIT_STOP bsf BIT_NER,0
END_STEP movfw COUNT_STEP
call OUTPUT; OUTPUT
;(
movwf PORTB;PORTB
btfsc BIT_NER,0; 0 PORTB,
bsf PORTB,7;, 7 1
return;
END;