#include "P18F4455.INC" ACTUAL_SPEED_INDEX EQU 0X00 ACTUAL_BUFFER EQU 0X01 OLD_VAL EQU 0X02 SPEED_INDEX EQU 0X03 ; because indexing and pressing number can not be the same number BUTTON_PRESSED EQU 0X04 VAR0 EQU 0X05 VAR1 EQU 0X06 START_SPEED_ADDR EQU 0X10 ORG 0X800 GOTO MAIN ORG 0x0808 GOTO Timer_Interrupt Timer_Interrupt: ; test if it is our timer interrupt BTFSS INTCON, TMR0IF RETFIE DCFSNZ ACTUAL_BUFFER,1 CALL Timer_Elapsed BCF INTCON, TMR0IF RETFIE Timer_Elapsed: BTG PORTD,2 BTG PORTD,3 LFSR FSR0, START_SPEED_ADDR MOVF ACTUAL_SPEED_INDEX, W ADDWF FSR0L,F MOVFF INDF0, ACTUAL_BUFFER RETURN Configurare_Timer0: MOVLW B'11000111' MOVWF T0CON RETURN Configurare_Intrerupere: MOVLW B'10100000' MOVWF INTCON RETURN Configurare_Port: MOVLW 0x03 MOVWF TRISD CLRF PORTD BSF PORTD, 2 RETURN Reset_Speed_Index: MOVLW D'5' MOVWF ACTUAL_SPEED_INDEX MOVLW D'5' MOVWF SPEED_INDEX RETURN Delay_200_milli: SETF VAR0 BIG_LOOP: SETF VAR1 LITTLE_LOOP: DCFSNZ VAR1, F GOTO NEXT_LOOP NOP NOP NOP GOTO LITTLE_LOOP NEXT_LOOP: DECFSZ VAR0, F GOTO BIG_LOOP RETURN MAIN: MOVLW D'150' MOVWF ACTUAL_BUFFER LFSR FSR0, START_SPEED_ADDR MOVLW D'5' MOVWF POSTINC0 MOVLW D'20' MOVWF POSTINC0 MOVLW D'50' MOVWF POSTINC0 MOVLW D'100' MOVWF POSTINC0 MOVLW D'150' MOVWF POSTINC0 MOVLW D'4' MOVWF ACTUAL_SPEED_INDEX MOVLW D'5' MOVWF SPEED_INDEX CALL Configurare_Port CALL Configurare_Timer0 CALL Configurare_Intrerupere MOVFF PORTD, OLD_VAL MAIN_LOOP: MOVF PORTD,W XORWF OLD_VAL,W ; test if there was a change on button 2 BTFSS WREG, 0 GOTO MAIN_LOOP ; save new value MOVFF PORTD, OLD_VAL ; if button is pressed now BTFSC PORTD, 0 GOTO MAIN_LOOP MOVLW D'11' MOVWF BUTTON_PRESSED ; make sure that button is pressed down CALL Delay_200_milli ; CALL Delay_200_milli ; CALL Delay_200_milli MOVFF PORTD, OLD_VAL BTFSC PORTD, 0 GOTO MAIN_LOOP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; do not allow for interrups because we are modiying stuff BCF INTCON, GIE DCFSNZ SPEED_INDEX, F CALL Reset_Speed_Index DECF ACTUAL_SPEED_INDEX, F ; allow interrupts !!! BSF INTCON, GIE GOTO MAIN_LOOP END