include P16F877.inc #DEFINE TMR0_CONSTANT 0x50 ARG_A_L EQU 0x20 ARG_A_H EQU 0x21 ARG_B_L EQU 0x22 ARG_B_H EQU 0x23 PROD_L EQU 0x24 PROD_H EQU 0x25 PROD_HH EQU 0x26 CNT EQU 0x7F W_TEMP EQU 0x7A STATUS_TEMP EQU 0x7B PCLATH_TEMP EQU 0x7C org 0x00 GOTO START ORG 0x04 MOVWF W_TEMP SWAPF STATUS,W CLRF STATUS MOVWF STATUS_TEMP MOVF PCLATH, W MOVWF PCLATH_TEMP CLRF PCLATH BTFSS INTCON, T0IF GOTO END_INTERRUPT MOVLW TMR0_CONSTANT MOVWF TMR0 BCF INTCON, T0IF BTFSS PORTB, 0 GOTO PORTB_ZERO BCF PORTB, 0 GOTO END_INTERRUPT PORTB_ZERO BSF PORTB, 0 NOP NOP END_INTERRUPT MOVF PCLATH_TEMP, W MOVWF PCLATH SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W RETFIE ORG 0x100 START MOVLW 0x10 MOVWF CNT MOVLW 0x20 CALL CLEAR_RAM BCF PORTB, 0 BSF STATUS, RP0 BCF TRISB, 0 BCF OPTION_REG, T0CS BCF STATUS, RP0 BCF PORTB, 0 MOVLW TMR0_CONSTANT MOVWF TMR0 BSF INTCON, GIE BSF INTCON, T0IE MOVLW 0xFF MOVWF ARG_A_L MOVLW 0x06 MOVWF ARG_B_L CALL SCITANIE_8_U MOVLW 0xFF MOVWF ARG_A_L MOVLW 0xFF MOVWF ARG_A_H MOVLW 0xFF MOVWF ARG_B_L MOVLW 0xFF MOVWF ARG_B_H CALL SCITANIE_16_U LOOP GOTO LOOP ORG 0x400 SCITANIE_8_U CLRF PROD_H MOVF ARG_A_L, W ADDWF ARG_B_L, W BTFSC STATUS, C INCF PROD_H, F MOVWF PROD_L RETURN SCITANIE_16_U CLRF PROD_HH CLRF PROD_H MOVF ARG_A_L, W ADDWF ARG_B_L, W MOVWF PROD_L BTFSC STATUS, C INCF PROD_H, F MOVF ARG_B_H, W ADDWF PROD_H, F BTFSC STATUS, C INCF PROD_HH, F MOVF ARG_A_H, W ADDWF PROD_H, F BTFSC STATUS, C INCF PROD_HH, F RETURN SLUCKA MOVWF CNT SLUCKA_1 NOP NOP DECFSZ CNT, F GOTO SLUCKA_1 RETURN CLEAR_RAM MOVWF FSR NEXT CLRF INDF INCF FSR, F DECFSZ CNT, F GOTO NEXT RETURN INIT_TMR0 END