;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; ; TESTING PIC16C63 ; ; IR TESTCODE !!!!! ; ; PROGRAMMEUR : GLENN GOOVAERTS ; KLAS : 4 ICT2 ; JAAR : 1998-1999 ; FILENAAM : IRTEST.ASM ; PROJECTNAME : IRTEST.PJT ; ; INTERNE PROMOTOR : MR VINGERHOEDT ; EXTERNE PROMOTOR : MR DEVENYNS ; ; WDOG ON 20MHZ XTAL ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ LIST P=16C63,F=INHX8M ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; DECLARATIE RS232 - VARIABELEN ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ INADD EQU 00 ;INDIRECT POINTER PCL EQU 02 ;LOWER BYTE VAN DE (PC) !! RTCC EQU 01 ;RTCC REG --> TMR0 REGISTER !!! ;HIERMEE KUNNEN WE DE WDT RATE ;SETTEN !!!!!!!!!!!!!!!!!!!!!! OPT EQU 81 ;OPTION REG STATUS EQU 03 ;STATUS REG ;STATUS REG FLAGS C EQU 00 ;CARRY FLAG Z EQU 02 ;ZERO FLAG TO EQU 04 ;TIME OUT FLAG RP0 EQU 05 ;REG PAGE SELECT FSR EQU 04 ;FILE SELECT REG INDF EQU 00 ;INDIRECT FILE REGISTER ;NOT PHYSICALLY IMPLEMENTED !! PORTC EQU 07 ;PORT C (F7) TRISC EQU 87H PORTA EQU 05 ;PORT A (F5) TRISA EQU 85H PCLATH EQU 0AH INTCON EQU 0BH ;BIT DEFS GIE EQU 07H ;GLOBAL INTERRUPT ENABLE BIT PEIE EQU 06H ;PHERIPHERAL INTERRUPT ENABLE BIT T0IF EQU 02H ;TMR0 OVERFLOW INTERRUPT FLAG BIT PIR1 EQU 0CH ;BIT DEFS RCIF EQU 05 ;USART RECEIVE INTERRUPT FLAG BIT ;IS 1 WANNEER RECEIVE BUFFER FULL ;CLR DOOR VAN RCREG TE LEZEN ;DEVOLGENDE BIT WORDT NERGENS NIET GEBRUIKT !!!!!!!!!!!!!!!!!!! TXIF EQU 04 ;USART TRANSMIT INTERRUPT FLAG BIT ;IS 1 WANNEER TRANSMIT BUFFER EMPTY ;CLR DOOR NAAR TXREG TE SCHRIJVEN ;SNAP NIET WAT DIT HIER DOET --> VERZENDEN GING TOCH ZONDER INTERR ;DEZE FLAG WORDT GESET ONAFHANKELIJK VAN HET FEIT DAT DE TXIE DIS- ;ABLED IS IN DE SOFTWARE. PIE1 EQU 0CH ;BIT DEFS RCIE EQU 05 ;USART RECEIVE INTERRUPT ENABLE BIT RCSTA EQU 018H TXSTA EQU 098H ;TRANSMIT STATUS AND CONTROL ;REGISTER --> TRMT=1 WIL ZEGGEN ;TRANSMIT SHIFT REGISTER EMPTY! TXREG EQU 019H SPBRG EQU 099H RCREG EQU 01AH ;GENERAL EQUATES ;THESE ARE GENERAL PURPOSE RAM LOCATIONS W_STORE EQU 20H ;IN BOTH PAGES STAT_STORE EQU 21H ;PAGE 0 ONLY COUNT EQU 22H ; COUNT1 EQU 23H ; FLAGS EQU 24H ;GENERAL PURPOSE FLAG REG ;BITS USED 0, RX_BUFF EQU 25H ;RECEIVED DATA BYTE FROM RS232 ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; DECLARATIE I2C - VARIABELEN ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; BIT 3,4 VAN POORT C NOEMEN WE RESPECTIEVELIJK : SCL,SDA #DEFINE SCL PORTC,3 ;SCL PIN #DEFINE SCL_DIR TRISC,3 #DEFINE SDA PORTC,4 ;SDA PIN #DEFINE SDA_DIR TRISC,4 #DEFINE INVERT_CS PORTA,1 CHIP_SELECT EQU 26H SLAVE_ADDRESS EQU 27H DATA_VALUE_OUT EQU 28H DATA_VALUE_IN EQU 29H TELLER EQU 30H OUT_BITCOUNT EQU 31H IN_BITCOUNT EQU 32H DATABYTE_OUT EQU 33H BYTE1 EQU 34H BYTE2 EQU 35H RESULT_BYTE EQU 36H OFFSET EQU 37H TABLE_POINTER EQU 38H LEFT_MASK EQU 3AH ACK_USER EQU 39H ;AFHANKELIJK VAN DEZE WAARDE 0 ;OF 1 BEPAALT DE GEBRUIKER OF ;DAT NACK OF ACK MOET GEGENE- ;REERD WORDEN (LAATSTE BYTE OF ;NIET !!!!!) ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; DECLARATIE INFRARED - VARIABELEN ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ FRAME_NUMBER EQU 3AH CATEGORY_WIDTH EQU 3BH CATEGORY_HIGHBYTE EQU 3CH CATEGORY_LOWBYTE EQU 3DH IR_DATA EQU 3EH IR_TELLER1 EQU 3FH IR_TELLER2 EQU 40H IR_TELLER3 EQU 41H TIME EQU 42H IR_DATABITCOUNT EQU 43H IR_CATBITCOUNT EQU 44H CATEGORY_FLAG EQU 45H NOT_SEND EQU 48H SEND EQU 49H NOT_SEND_HIGH EQU 4AH SEND_HIGH EQU 4BH ;******** SHIFTREGISTER EQU 4CH ;TESTREGISTERS !! ;******** #DEFINE IR_LED PORTA,2 ;AAN DEZE PIN HANGT DE IR-LED ! ;************************************************************** ; ; AANTAL MACRO'S : BANK1 MACRO BSF STATUS,RP0 ENDM BANK0 MACRO BCF STATUS,RP0 ENDM ; ENKEL OM LEESBAARHEID TE VERBETEREN !!!! ; ;************************************************************** ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN VAN DE PROGRAMMA CODE ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ORG 000 ;RESET VECTOR GOTO CLDSTT ;COLDSTART VECTOR ORG 04H ;RESET VECTOR ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN RS232 ROUTINES ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;************************************************************** ; ; INTERRUPT ROUTINE ; ;************************************************************** ;THE RECEIVE BUFFER FULL IS THE ONLY INTERRUPT THAT IS ENABLED ;IN THIS SOFTWARE SO WE WILL ONLY GET HERE WHEN WE HAVE A ;CHARACTER IN RCREG READY FOR US TO USE. ;STORE W AND STATUS INT_ROUTINE MOVWF W_STORE MOVFW STATUS BANK0 ;MOVE TO REGISTER BANK 0 MOVWF STAT_STORE ;SEE WHICH INTERRUPT FLAG IS SET BTFSC PIR1,RCIF ;TEST FOR RECEIVE INTERR FLAG GOTO RS232_RECEIVE CLRF PIR1 ;MUST BE A MISTAKE ;RESTORE W AND STATUS AND RETURN FROM INTERRUPT ;OM HET TERUGKEER ADRES TERUG TE KRIJGEN VAN DE STACK !!! INT_RET MOVFW STAT_STORE MOVWF STATUS SWAPF W_STORE,F ;NORMAAL MOET DESTINATION NOG ;GESPECIFIEERD WORDEN. DEFAULT ;DESTINATION IS F. DUS HIER ;WORDT HET RESULTAAT IN F GE- ;STOPT! GEEFT WEL EEN MESSAGE ;BIJ HET COMPILEREN !!! SWAPF W_STORE,W RETFIE ;THIS INSTRUCTION ALSO SETS THE ;GIE. ;BIT TO REENABLE THE INTERRUPTS ;************************************************************** ;************************************************************** ; ; RS232-RECEIVE ROUTINE ; ;************************************************************** ;IF WE GET HERE THEN WE HAVE A CHAR IN THE RECEIVE BUFFER RS232_RECEIVE MOVFW RCREG MOVWF RX_BUFF ;THIS IS A GENERAL PURPOSE RAM ;LOCATION. BSF FLAGS,0 ;SET OUR SOFTWARE FLAG. BCF PIR1,RCIF ;CLEAR THE FLAG TO REMOVE THE ;INTERRUPT ;WE WANT TO ECHO THE CHARACTER BACK SO IT APPEARS ON THE SCREEN ;OF THE TERMINAL PROGRAM. MOVFW RX_BUFF BANK0 MOVWF TXREG ;TX LOOP - WE WAIT IN THIS LOOP UNTIL WE ARE CLEAR TO SEND ;THE NEXT CHARACTER. BANK1 INT_TXC1 CLRWDT BTFSS TXSTA,1 ;TRMT BIT GOTO INT_TXC1 BANK0 GOTO INT_RET ;LOOP BACK TO RETURN ;************************************************************** ;************************************************************** ; ; RS232-TRANSMIT ROUTINE ; ;************************************************************** ; IN TEGENSTELLING MET DE ONTVANGST ROUTINE, DIE INTERRUPT ; GESTUURD IS, MOETEN WE DEZE ROUTINE AANROEPEN WILLEN WE EEN ; CHARACTER VERSTUREN. ROEP DEZE ROUTINE AAN MET DE TE VERZEN- ; DEN BYTE IN HET W-REGISTER !!! ; ; ;SEND CHAR IN W TO UART TX_CHARACTER BANK0 ;ENSURE WE ARE IN THE LOWER RAM ;PAGE. MOVWF TXREG ;THIS IS THE DATA REGISTER. ; WANNEER IETS IN HET DATA REGISTER TXREG WORDT GEPLAATST DAN ; WORDT AUTOMATISCH HET VERZENDINGSPROCES OPGESTART !!!!!!!!! ; IN HETVOLGENDE STUK ROUTINE : TX_LOOP WACHTEN WE TOT DE ; LAATSTE BIT VAN HET CHARACTER UIT TXREG VERZONDEN IS !!!!!!! ; VANAF HET MOMENT DAT TXREG LEEG IS WORDT DE TRMT BIT GESET ; WAARDOOR WE UIT DE LOOP TXC1 GAAN WAARDOOR WE DE VOLGENDE ; BYTE KUNNEN GAAN VERZENDEN INDIEN GEWENST !!!!!!!!!!!!!!!!!! BANK1 ;MOVE TO RAM PAGE 1 TXC1 CLRWDT BTFSS TXSTA,1 ;TRMT BIT ;TRANSMIT SHIFT REGISTER STATUS GOTO TXC1 ;IF WE GET HERE THEN THE BUFFER IS EMPTY ;SO SEND ANOTHER CHARACTER OR JUST RETURN BANK0 ;LEAVE POINTING AT RAM PAGE 0 RETURN ;************************************************************** ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; TABEL --> OMVORMING ASCII NAAR HEX !!! ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ;WE PLAATSTEN DEZE TABEL HIER OPDAT WE NIET IN DE PROBLEMEN ;ZOUDEN KOMEN DOOR TE SPRINGEN VOORBIJ DE PROGRAMMA GRENZEN ;DOOR HET AANPASSEN VAN DE PC !!!!! CONVERSION_TABLE_ASCIIHEX ; KOMEN HIER MET TABLE_POINTER! MOVFW TABLE_POINTER ; TABLE_POINTER BEVAT JUISTE ; INDEX --> TERUG MET JUISTE W ADDWF PCL,F ; PC = PC + 0 ! RETLW .0 ; 0-WAARDE --> BEGIN TABEL !!! RETLW .1 ; 1-WAARDE --> PC + 2 !!! RETLW .2 ; 2-WAARDE --> RETLW .3 ; 3-WAARDE --> RETLW .4 ; 4-WAARDE --> RETLW .5 ; 5-WAARDE --> RETLW .6 ; 6-WAARDE --> RETLW .7 ; 7-WAARDE --> RETLW .8 ; 8-WAARDE --> RETLW .9 ; 9-WAARDE --> PC + 10 !! RETLW .0 ; :-WAARDE --> PC + 11 !! RETLW .0 ; ;-WAARDE --> RETLW .0 ; <-WAARDE --> RETLW .0 ; =-WAARDE --> RETLW .0 ; >-WAARDE --> RETLW .0 ; ?-WAARDE --> RETLW .0 ; @-WAARDE --> RETLW .10 ; A-WAARDE --> PC + 18 !! RETLW .11 ; B-WAARDE --> RETLW .12 ; C-WAARDE --> RETLW .13 ; D-WAARDE --> RETLW .14 ; E-WAARDE --> RETLW .15 ; F-WAARDE --> PC + 23 !! ;KOMEN HIER MET WAARDES IN BYTE1 EN IN BYTE2. HIER MAKEN ;WE ER 1 BYTE VAN !! WERKWIJZE --> EERST SWAPPEN WE DE ;UPPER EN LOWER NIBBLES VAN BYTE1, GEVOLGD DOOR HET OPTELLEN ;VAN DE GESWAPTE BYTE1 EN BYTE2 !! DEZE SOM PLAATSEN WE IN ;DE VARIABELE RESULT_BYTE !!!!!!! CONV_SINGLE_BYTE SWAPF BYTE1,W ADDWF BYTE2,W MOVWF RESULT_BYTE ;SOM IN RESULT_BYTE, TERUGKEREN RETURN ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; TABEL --> OMVORMING HEX NAAR ASCII !!! ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ CONVERSION_TABLE_HEXASCII ADDWF PCL,F RETLW .48 ;KARAKTER 0 IN W RETLW .49 RETLW .50 RETLW .51 RETLW .52 RETLW .53 RETLW .54 RETLW .55 RETLW .56 RETLW .57 RETLW .65 ;KARAKTER A IN W RETLW .66 RETLW .67 RETLW .68 RETLW .69 RETLW .70 ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN ASCII LETTER ROUTINES ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ SEND_WELCOME ;WHAT DO YOU DESIRE O GREAT ONE CALL LET_W ; LETTER = W WORDT VERZONDEN !! CALL LET_H ; LETTER = H WORDT VERZONDEN !! CALL LET_A ; LETTER = A WORDT VERZONDEN !! CALL LET_T ; LETTER = T WORDT VERZONDEN !! CALL SPATIE ; SPATIE WORDT VERZONDEN !! CALL LET_D ; LETTER = D WORDT VERZONDEN !! CALL LET_O ; LETTER = O WORDT VERZONDEN !! CALL SPATIE ; SPATIE WORDT VERZONDEN !! CALL LET_Y ; LETTER = Y WORDT VERZONDEN !! CALL LET_O ; LETTER = O WORDT VERZONDEN !! CALL LET_U ; LETTER = U WORDT VERZONDEN !! CALL SPATIE ; SPATIE WORDT VERZONDEN !! CALL LET_D ; LETTER = D WORDT VERZONDEN !! CALL LET_E ; LETTER = E WORDT VERZONDEN !! CALL LET_S ; LETTER = S WORDT VERZONDEN !! CALL LET_I ; LETTER = I WORDT VERZONDEN !! CALL LET_R ; LETTER = R WORDT VERZONDEN !! CALL LET_E ; LETTER = E WORDT VERZONDEN !! CALL SPATIE ; SPATIE WORDT VERZONDEN !! CALL LET_O ; LETTER = O WORDT VERZONDEN !! CALL SPATIE ; SPATIE WORDT VERZONDEN !! CALL LET_G ; LETTER = G WORDT VERZONDEN !! CALL LET_R ; LETTER = R WORDT VERZONDEN !! CALL LET_E ; LETTER = E WORDT VERZONDEN !! CALL LET_A ; LETTER = A WORDT VERZONDEN !! CALL LET_T ; LETTER = T WORDT VERZONDEN !! CALL SPATIE ; SPATIE WORDT VERZONDEN !! CALL LET_O ; LETTER = O WORDT VERZONDEN !! CALL LET_N ; LETTER = N WORDT VERZONDEN !! CALL LET_E ; LETTER = E WORDT VERZONDEN !! CALL SEND_LEGEND ; MOGELIJKE COMMANDO'S TONEN !! RETURN SEND_END ;BYE BYE BYE MASTER GLENN CALL SEND_CR CALL SEND_CR CALL GROET CALL SPATIE CALL GROET CALL SPATIE CALL GROET CALL SEND_CR CALL LET_M CALL LET_A CALL LET_S CALL LET_T CALL LET_E CALL LET_R CALL SPATIE CALL LET_G CALL LET_L CALL LET_E CALL LET_N CALL LET_N CALL SEND_CR RETURN SEND_LEGEND ;HIERMEE TONEN WE EEN LIJST OP ;HET SCHERM MET ALLE MOGELIJKE ;COMMANDO'S DAT DIT PROGRAMMA ;KAN VERWERKEN !!!!! ;POSSIBLE COMMANDS : CALL SEND_CR CALL SEND_CR CALL LET_P CALL LET_O CALL LET_S CALL LET_S CALL LET_I CALL LET_B CALL LET_L CALL LET_E CALL SPATIE CALL LET_C CALL LET_O CALL LET_M CALL LET_M CALL LET_A CALL LET_N CALL LET_D CALL LET_S CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL SEND_CR CALL SEND_CR CALL LET_L ;L : SHOW POSSIBLE COMMANDS CALL SPATIE CALL SPATIE CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_S CALL LET_H CALL LET_O CALL LET_W CALL SPATIE CALL LET_P CALL LET_O CALL LET_S CALL LET_S CALL LET_I CALL LET_B CALL LET_L CALL LET_E CALL SPATIE CALL LET_C CALL LET_O CALL LET_M CALL LET_M CALL LET_A CALL LET_N CALL LET_D CALL LET_S CALL SEND_CR CALL LET_P ;P : STOPCONDITION CALL SPATIE CALL SPATIE CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_S CALL LET_T CALL LET_O CALL LET_P CALL LET_C CALL LET_O CALL LET_N CALL LET_D CALL LET_I CALL LET_T CALL LET_I CALL LET_O CALL LET_N CALL SEND_CR CALL LET_A ;A() : SEND ADDRESS (...) CALL SYM_HAAKLINKS CALL SYM_HAAKRECHTS CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_S CALL LET_E CALL LET_N CALL LET_D CALL SPATIE CALL LET_A CALL LET_D CALL LET_D CALL LET_R CALL LET_E CALL LET_S CALL LET_S CALL SPATIE CALL SYM_HAAKLINKS CALL SYM_PUNT CALL SYM_PUNT CALL SYM_PUNT CALL SYM_HAAKRECHTS CALL SEND_CR CALL LET_Y ;Y() : CHIP SELECT (0,1) CALL SYM_HAAKLINKS CALL SYM_HAAKRECHTS CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_C CALL LET_H CALL LET_I CALL LET_P CALL SPATIE CALL LET_S CALL LET_E CALL LET_L CALL LET_E CALL LET_C CALL LET_T CALL SPATIE CALL SYM_HAAKLINKS CALL SYM_0 CALL SYM_KOMMA CALL SYM_1 CALL SYM_HAAKRECHTS CALL SEND_CR CALL LET_W ;W() : WRITE BYTE (...) CALL SYM_HAAKLINKS CALL SYM_HAAKRECHTS CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_W CALL LET_R CALL LET_I CALL LET_T CALL LET_E CALL SPATIE CALL LET_B CALL LET_Y CALL LET_T CALL LET_E CALL SYM_HAAKLINKS CALL SYM_PUNT CALL SYM_PUNT CALL SYM_PUNT CALL SYM_HAAKRECHTS CALL SEND_CR CALL LET_R ;R() : READ BYTE (0,1) CALL SYM_HAAKLINKS CALL SYM_HAAKRECHTS CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_R CALL LET_E CALL LET_A CALL LET_D CALL SPATIE CALL LET_B CALL LET_Y CALL LET_T CALL LET_E CALL SPATIE CALL SYM_HAAKLINKS CALL SYM_0 CALL SYM_KOMMA CALL SYM_1 CALL SYM_HAAKRECHTS CALL SEND_CR CALL LET_I ;I() : INFRARED (5 PAR) CALL SYM_HAAKLINKS CALL SYM_HAAKRECHTS CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_I CALL LET_N CALL LET_F CALL LET_R CALL LET_A CALL LET_R CALL LET_E CALL LET_D CALL SPATIE CALL SYM_HAAKLINKS CALL SYM_5 CALL SPATIE CALL LET_P CALL LET_A CALL LET_R CALL LET_A CALL LET_M CALL SYM_HAAKRECHTS CALL SEND_CR CALL SEND_CR CALL LET_E ;ESC : END PROGRAM CALL LET_S CALL LET_C CALL SYM_SPATIE_DUBBELPUNT_SPATIE CALL LET_E CALL LET_N CALL LET_D CALL SPATIE CALL LET_P CALL LET_R CALL LET_O CALL LET_G CALL LET_R CALL LET_A CALL LET_M CALL SEND_CR CALL SEND_CR CALL LET_W CALL LET_A CALL LET_I CALL LET_T CALL LET_I CALL LET_N CALL LET_G CALL SPATIE CALL LET_F CALL LET_O CALL LET_R CALL SPATIE CALL LET_C CALL LET_O CALL LET_M CALL LET_M CALL LET_A CALL LET_N CALL LET_D CALL LET_S CALL SEND_CR ; VOLGENDE REGEL ! CALL SEND_CR CALL SEND_PROMPT ; TEKEN '>' KOMT OP VRIJE REGEL ; TE STAAN. VANAF NU KUNNEN WE ; MET BEHULP VAN HET TERMINAL ; PROGRAMMA COMMANDO'S INGEVEN RETURN ;************************************************************** ;************************************************************** ; ; ASCII SUBROUTINES ; ;************************************************************** LET_W MOVLW B'01010111' ; LETTER = W CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_A MOVLW B'01000001' ; LETTER = A CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_T MOVLW B'01010100' ; LETTER = T CALL TX_CHARACTER ; VERZONDEN ! RETURN SPATIE MOVLW B'00100000' ; SPATIE CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_D MOVLW B'01000100' ; LETTER = D CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_O MOVLW B'01001111' ; LETTER = O CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_E MOVLW B'01000101' ; LETTER = E CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_S MOVLW B'01010011' ; LETTER = S CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_R MOVLW B'01010010' ; LETTER = R CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_N MOVLW B'01001110' ; LETTER = N CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_M MOVLW B'01001101' ; LETTER = M CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_G MOVLW B'01000111' ; LETTER = G CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_L MOVLW B'01001100' ; LETTER = L CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_I MOVLW B'01001001' ; LETTER = I CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_K MOVLW B'01001011' ; LETTER = K CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_B MOVLW B'01000010' ; LETTER = B CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_Y MOVLW B'01011001' ; LETTER = Y CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_F MOVLW B'01000110' ; LETTER = F CALL TX_CHARACTER ; VERZONDEN ! RETURN LET_H MOVLW B'01001000' CALL TX_CHARACTER RETURN LET_U MOVLW B'01010101' CALL TX_CHARACTER RETURN LET_C MOVLW B'01000011' CALL TX_CHARACTER RETURN LET_J MOVLW B'01001010' CALL TX_CHARACTER RETURN LET_P MOVLW B'01010000' CALL TX_CHARACTER RETURN LET_V MOVLW B'01010110' CALL TX_CHARACTER RETURN LET_Q MOVLW B'01010001' CALL TX_CHARACTER RETURN LET_X MOVLW B'01011000' CALL TX_CHARACTER RETURN LET_Z MOVLW B'01011010' CALL TX_CHARACTER RETURN SYM_HAAKRECHTS MOVLW B'00101001' CALL TX_CHARACTER RETURN SYM_HAAKLINKS MOVLW B'00101000' CALL TX_CHARACTER RETURN SYM_KOMMA MOVLW B'00101100' CALL TX_CHARACTER RETURN SYM_0 MOVLW B'00110000' CALL TX_CHARACTER RETURN SYM_1 MOVLW B'00110001' CALL TX_CHARACTER RETURN SYM_5 MOVLW B'00110101' ;KARAKTER '5' OP SCHERM !! CALL TX_CHARACTER RETURN SYM_PUNT MOVLW B'00101110' CALL TX_CHARACTER RETURN SYM_SPATIE_DUBBELPUNT_SPATIE MOVLW B'00100000' CALL TX_CHARACTER MOVLW B'00111010' CALL TX_CHARACTER MOVLW B'00100000' CALL TX_CHARACTER RETURN SYM_SPATIE_GELIJK_SPATIE MOVLW B'00100000' CALL TX_CHARACTER MOVLW B'00111101' ;ASCII VOOR KARAKTER '=' !! CALL TX_CHARACTER MOVLW B'00100000' CALL TX_CHARACTER RETURN SEND_CR MOVLW B'00001101' CALL TX_CHARACTER RETURN SEND_PROMPT MOVLW B'00111110' CALL TX_CHARACTER RETURN GROET CALL LET_B CALL LET_Y CALL LET_E RETURN ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN I2C HOOFDROUTINES ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ I2C_INIT CLRF TELLER CLRF IN_BITCOUNT CLRF OUT_BITCOUNT CLRF OFFSET CLRF DATA_VALUE_IN CLRF DATA_VALUE_OUT CLRF SLAVE_ADDRESS BCF INVERT_CS MOVLW .48 ;VASTE WAARDE 48 DECIMAAL IN MOVWF OFFSET ;;VARIABELE OFFSET PLAATSEN !! CALL RELEASEBUS RETURN SENDSTART CALL HIGH_SCL CALL LOW_SDA CALL LOW_SCL RETURN SENDSTOP CALL LOW_SDA CALL HIGH_SCL CALL HIGH_SDA RETURN SENDADRES CALL SENDSTART ;GEEN APARTE INSTRUCTIE. IMMERS MOVFW SLAVE_ADDRESS ;WE GAAN NOOIT EEN STARTCOND. MOVWF DATA_VALUE_OUT ;ALLEEN DOEN. WE ZULLEN STEEDS GOTO BYTE_OUT ;EEN START DOEN GEVOLGD DOOR DE ;VERZENDING VAN HET SLAVE ADRES WRITEBYTE CLRF DATA_VALUE_OUT MOVFW DATABYTE_OUT MOVWF DATA_VALUE_OUT GOTO BYTE_OUT READBYTE CLRF DATA_VALUE_IN GOTO BYTE_IN SYS MOVFW CHIP_SELECT XORLW .49 ; ASCII VOOR CHARACTER 1 BTFSS STATUS,Z GOTO LOW_CS GOTO HIGH_CS ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN I2C SUB- EN LOWLEVEL ROUTINES ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; WE HOUDEN WEL IN GEDACHTEN DAT : ; ; SDA_DIR --> TRISC,4 ; SDA --> PORTC,4 ; SCL_DIR --> TRISC,3 ; SCL --> PORTC,3 ; INVERT_CS --> PORTA,1 ; ; ZIJN ALLEN DEFINED BIJ DE VARIABELEN DECLARATIE ; 2. I2C-VERZEND SUBROUTINES + AFHANDELING VAN DE SLAVE ACK : ; ; KOMEN DEZE ROUTINE BINNEN MET DE TE VERZENDEN BYTE IN DE ; VARIABELE DATA_VALUE_OUT !!! BYTE_OUT MOVLW .8 MOVWF OUT_BITCOUNT BIT_OUT BCF STATUS,C RLF DATA_VALUE_OUT,F BTFSS STATUS,C GOTO ZERO_OUT GOTO ONE_OUT ZERO_OUT CALL LOW_SDA CALL KLOKIMPULS GOTO PROCEED_OUT ONE_OUT CALL HIGH_SDA CALL KLOKIMPULS GOTO PROCEED_OUT PROCEED_OUT DECFSZ OUT_BITCOUNT,F GOTO BIT_OUT ACK_RECEIVE CALL HIGH_SDA CALL HIGH_SCL_EXTRA CALL DELAY2U BTFSC SDA GOTO SDA_NIET_LAAG GOTO SDA_LAAG SDA_NIET_LAAG CALL DELAY2U CALL LOW_SCL GOTO ACK_ERROR SDA_LAAG CALL DELAY2U CALL LOW_SCL GOTO ACK_OK ; ********************************** ; 3. I2C-ONTVANGST-SUBROUTINES + AFHANDELING USER ACK/NACK : ; KOMEN HIER BINNEN MET WAARDE 0 OF 1 IN VAR ACK_USER : ; ; ACK_USER = 0 --> ONTVANG LAATSTE BYTE EN VERSTUUR NACK !!! ; ACK_USER = 1 --> ONTVANG VOLGENDE BYTE EN VERSTUUR ACK !!! ; BYTE_IN CLRF DATA_VALUE_IN MOVLW .8 MOVWF IN_BITCOUNT CALL HIGH_SDA BIT_IN CALL HIGH_SCL_EXTRA CALL DELAY2U BTFSC SDA GOTO ONE_IN GOTO ZERO_IN ZERO_IN CALL DELAY2U BCF STATUS,C RLF DATA_VALUE_IN,F GOTO PROCEED_IN ONE_IN CALL DELAY2U BSF STATUS,C RLF DATA_VALUE_IN,F GOTO PROCEED_IN PROCEED_IN CALL LOW_SCL DECFSZ IN_BITCOUNT,F GOTO BIT_IN ;LAATSTE BIT IS INGELEZEN !!!! CALL HEX_PART1 GOTO USER_ACK_TEST ;TESTEN OF ACK/NACK ; 4. LOWLEVEL ROUTINES : RELEASEBUS CALL HIGH_SCL CALL HIGH_SDA RETURN KLOKIMPULS CALL HIGH_SCL CALL LOW_SCL RETURN HIGH_SDA BANK1 BSF SDA_DIR BANK0 CALL DELAY RETURN LOW_SDA BCF SDA BANK1 BCF SDA_DIR BANK0 CALL DELAY RETURN HIGH_SCL BANK1 BSF SCL_DIR BANK0 CALL DELAY RETURN LOW_SCL BCF SCL BANK1 BCF SCL_DIR BANK0 CALL DELAY RETURN HIGH_SCL_EXTRA ;SCL HOOG IMP. ZONDER DELAY !!! BANK1 ;GEBRUIKT VOOR HET TESTEN VAN BSF SCL_DIR ;DE ACK VAN DE SLAVE !!!!!!!!!! BANK0 RETURN ; VOLGENDE 2 ROUTINES DIENEN OM DE TV VAN SONY TE LATEN WETEN ; DAT WIJ DE SOLE MASTER ZIJN VAN DE I2C BUS. DIT DOEN WE MET ; PIN CHIP SELECT CS --> 1 --> DAN ZIJN WIJ SOLE MASTER OF THE ; BUS. WE MOETEN HIER WEL OPLETTEN OMDAT DE TRANSISTOREN AAN- ; GEBRACHT OP DE TESTPRINT ZORGEN VOOR NEGATIEVE LOGICA !!!!!! HIGH_CS BCF INVERT_CS ;LET OP DE NEGATIEVE LOGICA !!! CALL LET_C ;RESULTAAT 'CS 1' TERUGSTUREN ! CALL LET_S CALL SPATIE CALL SYM_1 CALL SEND_CR CALL SEND_PROMPT GOTO TEST_NEW_DATA ;NIEUWE LETTER INLEZEN !! LOW_CS BSF INVERT_CS ;LET OP DE NEGATIEVE LOGICA !!! CALL LET_C ;RESULTAAT 'CS 0' TERUGSTUREN ! CALL LET_S CALL SPATIE CALL SYM_0 CALL SEND_CR CALL SEND_PROMPT GOTO TEST_NEW_DATA ;NIEUWE LETTER INLEZEN !! ACK_ERROR CALL SENDSTOP ;VERZENDING BYTE MISGELOPEN !!! ;STOPCONDITIE GENEREREN !! CALL SEND_CR CALL SPATIE CALL SPATIE CALL LET_A CALL LET_C CALL LET_K CALL SPATIE CALL LET_E CALL LET_R CALL LET_R CALL LET_O CALL LET_R CALL SEND_CR CALL SEND_PROMPT GOTO TEST_NEW_DATA ACK_OK CALL SEND_CR ;VERZENDING BYTE IN ORDE !!! CALL SPATIE CALL SPATIE CALL LET_A CALL LET_C CALL LET_K CALL SPATIE CALL LET_O CALL LET_K CALL SEND_CR CALL SEND_PROMPT GOTO TEST_NEW_DATA USER_ACK_TEST ;AAN DE HAND VAN DE ACK_USER MOVFW ACK_USER ;SEND ACK/NACK !!! XORLW .49 ;ASCII VOOR CHARACTER 1 !! BTFSS STATUS,Z GOTO SEND_NACK SEND_ACK ;TERUGSTUREN VAN EEN ACK. DUS CALL LOW_SDA ;TREKKEN WE SDA LAAG EN KLOKKEN CALL KLOKIMPULS ;DIT UIT ! DUS VOLGENDE BYTE GOTO TEST_NEW_DATA ;MOET ONTVANGEN WORDEN !! SEND_NACK ;NACK = GEEN ACK TERUGSTUREN !! CALL HIGH_SDA ;NACK WORDT UITGEKLOKT ! DUS CALL KLOKIMPULS ;WORDEN ER GEEN VERDERE BYTES GOTO TEST_NEW_DATA ;MEER ONTVANGEN !!!! ;IN BEIDE GEVALLEN : DUS ZOWEL BIJ NACK ALS BIJ ACK MOETEN WE ;OPNIEUW EEN LETTER GAAN INLEZEN (VOLGENDE INSTRUCTIE) INSTRUC- ;TIE SEQUENTIE WORDT UITEINDELIJK GEREGELD DOOR HET PROGRAMMA ;DAT DRAAIT OP DE USER PC !!!! ;HEXBYTE WORDT IN TWEE STUKKEN GEBROKEN EN VERSTUURD ALS ASCII ;KARAKTERS (NAAR HET TERMINAL VENSTER !!) HEX_PART1 SWAPF DATA_VALUE_IN,W ANDLW B'00001111' ; 4 MSB GEMASKEERD (00001111) CALL CONVERSION_TABLE_HEXASCII CALL TX_CHARACTER ;EERSTE DEEL HEXBYTE OP SCHERM HEX_PART2 MOVFW DATA_VALUE_IN ANDLW B'00001111' ; 4 MSB GEMASKEERD (00001111) CALL CONVERSION_TABLE_HEXASCII CALL TX_CHARACTER ;TWEEDE DEEL HEXBYTE OP SCHERM CALL SEND_CR CALL SEND_PROMPT RETURN ; HETVOLGENDE IS EEN DELAY VAN +/- 5 US --> MOET NIET EXACT ; 5 US ZIJN OMDAT DE I2C-BUS VAN SONY TOCH NIET TIJDKRITISCH IS DELAY ;5US VERTRAGING !! MOVLW .5 MOVWF TELLER DELAY1 DECFSZ TELLER,F GOTO DELAY2 RETURN DELAY2 NOP GOTO DELAY1 ; OM ANDERE DELAY'S TE BEKOMEN MOET MEN VOLGENDE FORMULE ; GEBRUIKEN : DELAY = (X-1)*4 + 8 = 4X + 4 WAARBIJ X HET ; GETAL IS DAT IN DE MAIN LOOP IN TELLER WORDT GEPLAATST !! ; ALLE GETALLEN UIT DEZE FORMULE STELLEN INSTRUCTIE CYCLI !!!! ; VOOR !!!!!!! DUS, WIL MEN EEN BEPAALDE DELAY MAKEN --> EERST ; KIJKEN HOEVEEL DEZE DELAY IS IN INSTRUCTIE CYCLI !!!!!!!!!!! ; HETVOLGENDE IS EEN DELAY VAN 2US --> WORDT ENKEL GEBRUIKT IN ; DE ROUTINES OM DE ACKNOWLEDGE VAN EEN SLAVE TE KUNNEN TESTEN ; HERINNEREN ONS WEL DAT 1 INSTRUCTIE 200 NS OF 400 NS DUURT ; WANNEER WE EEN KRISTAL VAN 20MHZ GEBRUIKEN. DEZE DELAY ZORGT ; DUS VOOR EEN DELAY VAN 10 X 200 NS --> 2 US ; DEZE DELAY IS DUS NODIG OM TE KUNNEN TESTEN OF SDA HOOG OF ; LAAG IS JUIST IN HET MIDDEN VAN DE NEGENDE KLOKPULS (OOK WEL ; DE ACK KLOKPULS GENOEMD !) ; ; WORDT OOK GEBRUIKT IN ROUTINE READBYTE --> OM BIT TE KUNNEN ; LEZEN MOETEN WE JUIST IN HET MIDDEN VAN DE KLOKPULS SDA GAAN ; TESTEN. HIERVOOR DELAY2U NODIG !!!!!!!!!! DELAY2U ;2US VERTRAGING !! NOP NOP NOP NOP NOP NOP RETURN ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN IR-HOOFDROUTINES ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;AFDRUKKEN VAN HET IR-COMMANDO IN DE LEGENDE !! INFRARED_ASCII ;ROUTINE DRUKT 5 PAR AF !!!! ;PARAMETERS ZELFDE WAARDE ALS ;INGEVOERD -> ROUTINE HEX1 CALL SEND_CR ;VOLGENDE REGEL VOOR AFDRUK PAR CALL SEND_CR CALL SPATIE ;NUMBER FRAMES = PAR1 CALL SPATIE CALL LET_N CALL LET_U CALL LET_M CALL LET_B CALL LET_E CALL LET_R CALL SPATIE CALL LET_O CALL LET_F CALL SPATIE CALL LET_F CALL LET_R CALL LET_A CALL LET_M CALL LET_E CALL LET_S CALL SYM_SPATIE_GELIJK_SPATIE MOVFW FRAME_NUMBER MOVWF DATA_VALUE_IN CALL HEX1 ;PARAMETER 1 VERSTUURD !! ;ZOALS INGEGEVEN !!!!!!!! CALL SEND_CR ;VOLGENDE REGEL !! CALL SPATIE ;CATEGORY WIDTH = PAR2 CALL SPATIE CALL LET_C CALL LET_A CALL LET_T CALL LET_E CALL LET_G CALL LET_O CALL LET_R CALL LET_Y CALL SPATIE CALL LET_W CALL LET_I CALL LET_D CALL LET_T CALL LET_H CALL SYM_SPATIE_GELIJK_SPATIE MOVFW CATEGORY_WIDTH MOVWF DATA_VALUE_IN CALL HEX1 ;PARAMETER 2 VERSTUURD !! ;ZOALS INGEGEVEN !!!!!!!! CALL SEND_CR CALL SPATIE ;CATEGORY HIGH BYTE = PAR3 CALL SPATIE CALL LET_C CALL LET_A CALL LET_T CALL LET_E CALL LET_G CALL LET_O CALL LET_R CALL LET_Y CALL SPATIE CALL LET_H CALL LET_I CALL LET_G CALL LET_H CALL SPATIE CALL LET_B CALL LET_Y CALL LET_T CALL LET_E CALL SYM_SPATIE_GELIJK_SPATIE MOVFW CATEGORY_HIGHBYTE MOVWF DATA_VALUE_IN CALL HEX1 ;PARAMETER 1 VERSTUURD !! ;ZOALS INGEGEVEN !!!!!!!! CALL SEND_CR CALL SPATIE ;CATEGORY LOW BYTE = PAR4 CALL SPATIE CALL LET_C CALL LET_A CALL LET_T CALL LET_E CALL LET_G CALL LET_O CALL LET_R CALL LET_Y CALL SPATIE CALL LET_L CALL LET_O CALL LET_W CALL SPATIE CALL LET_B CALL LET_Y CALL LET_T CALL LET_E CALL SYM_SPATIE_GELIJK_SPATIE MOVFW CATEGORY_LOWBYTE MOVWF DATA_VALUE_IN CALL HEX1 ;PARAMETER 1 VERSTUURD !! ;ZOALS INGEGEVEN !!!!!!!! CALL SEND_CR CALL SPATIE ;IR DATA = PAR5 CALL SPATIE CALL LET_I CALL LET_R CALL SPATIE CALL LET_D CALL LET_A CALL LET_T CALL LET_A CALL SYM_SPATIE_GELIJK_SPATIE MOVFW IR_DATA MOVWF DATA_VALUE_IN CALL HEX1 ;PARAMETER 1 VERSTUURD !! ;ZOALS INGEGEVEN !!!!!!!! CALL SEND_CR CALL SEND_CR CALL SEND_PROMPT RETURN ;************************************************************** ;************************************************************** IR_INIT CLRF FRAME_NUMBER CLRF CATEGORY_WIDTH CLRF CATEGORY_HIGHBYTE CLRF CATEGORY_LOWBYTE CLRF IR_DATA CLRF IR_TELLER1 ;TELLERS VOOR DELAYS CLRF IR_TELLER2 CLRF IR_TELLER3 CLRF TIME CLRF SHIFTREGISTER ;WAARDE GEROTEERD+VERZONDEN !! CLRF NOT_SEND CLRF SEND CLRF NOT_SEND_HIGH CLRF SEND_HIGH RETURN ;************************************************************** ;************************************************************** TEST_CAT_WIDTH MOVLW .5 XORWF CATEGORY_WIDTH,W BTFSC STATUS,Z GOTO CAT_CODE5 MOVLW .6 XORWF CATEGORY_WIDTH,W BTFSC STATUS,Z GOTO CAT_CODE6 MOVLW .7 XORWF CATEGORY_WIDTH,W BTFSC STATUS,Z GOTO CAT_CODE7 MOVLW .8 XORWF CATEGORY_WIDTH,W BTFSC STATUS,Z GOTO CAT_CODE8 MOVLW .13 XORWF CATEGORY_WIDTH,W BTFSC STATUS,Z GOTO CAT_CODE13 GOTO TEST_NEW_DATA ;*********************************** CAT_CODE5 BSF CATEGORY_FLAG,0 ;GEEN HIGHBYTE TE VERSTUREN !! MOVLW .5 MOVWF NOT_SEND ;3 ROTATIE NIETS VERZENDEN MOVLW .3 ;5 ROTATIES + VERZENDING !! MOVWF SEND RETURN CAT_CODE6 BSF CATEGORY_FLAG,0 ;GEEN HIGHBYTE TE VERSTUREN !! MOVLW .6 MOVWF NOT_SEND ;2 ROTATIE NIETS VERZENDEN MOVLW .2 ;6 ROTATIES + VERZENDING !! MOVWF SEND RETURN CAT_CODE7 BSF CATEGORY_FLAG,0 ;GEEN HIGHBYTE TE VERSTUREN !! MOVLW .7 MOVWF NOT_SEND ;1 ROTATIE NIETS VERZENDEN MOVLW .1 ;7 ROTATIES + VERZENDING !! MOVWF SEND RETURN CAT_CODE8 BSF CATEGORY_FLAG,0 ;GEEN HIGHBYTE TE VERSTUREN !! MOVLW .8 MOVWF NOT_SEND ;0 ROTATIE NIETS VERZENDEN MOVLW .0 ;8 ROTATIES + VERZENDING !! MOVWF SEND RETURN ; VANAF NU ZULLEN WE OOK EEN HIGHBYTE VOOR CATEGORY MOETEN ; VERSTUREN !! CAT_CODE13 BCF CATEGORY_FLAG,0 ;DUS HIGHBYTE TE VERZENDEN !!! MOVLW .8 MOVWF NOT_SEND MOVLW .0 MOVWF SEND ;ALLE GEGEVENS VOOR LOWBYTE OK MOVLW .5 MOVWF NOT_SEND_HIGH MOVLW .3 MOVWF SEND_HIGH ;ALLE GEGEVENS VOOR HIGHBYTE OK RETURN ;************************************************************** ;************************************************************** ;BEPAALT HOEVEEL KEER WE HET FRAME (ZONDER GUIDEPULS EN EERSTE ;DATA_OFF_TIME !!) MOETEN VERSTUREN !!! TEST_FRAME_NUM CALL GUIDEPULS CALL DATA_OFF_TIME CALL SEND_DATA_CODE CALL SEND_CAT_CODE TEST_NUMBER DECFSZ FRAME_NUMBER,F GOTO AGAIN_IR RETURN AGAIN_IR CALL SEND_DATA_CODE CALL SEND_CAT_CODE GOTO TEST_NUMBER ;************************************************************** ;************************************************************** ; ; HIER WORDEN 7 BITS (!!!!!) VERZONDEN !!! ; SEND_DATA_CODE MOVLW .7 MOVWF NOT_SEND MOVLW .1 MOVWF SEND MOVFW IR_DATA MOVWF SHIFTREGISTER CALL SEND_IR RETURN ;************************************************************** ;************************************************************** ;TEST_CAT_WIDTH !!! ;DIENT ENKEL OM DE WAARDES VOOR DE VARIABELEN SEND EN NOT_SEND ;IN TE VULLEN. DEZE WAARDES WORDEN DAN GEBRUIKT VOOR HET AL DAN ;NIET ROTEREN EN/OF WEGZENDEN !!! ZOWEL GEGEVENS VOOR HET VER- ;ZENDEN VAN LOWBYTE ALS VOOR HIGHBYTE WORDEN INGEVULD IN DE ;ROUTINE TEST_CAT_WIDTH !!!! SEND_CAT_CODE CALL TEST_CAT_WIDTH ;SEND, NOT_SEND JUISTE WAARDES! MOVFW CATEGORY_LOWBYTE MOVWF SHIFTREGISTER CALL SEND_IR RETURN ;************************************************************** ;************************************************************** ; ; !!!!!!!! HOOFD-ZENDROUTINE !!!!!!!! SEND_IR ;VOLGENDE VIER ROUTINES ZORGEN ERVOOR DAT DE BITS DIE ER TEVEEL ;AAN ZIJN WORDEN GEROTEERD MAAR NIET WORDEN UITGEZONDEN !!!!!!! BIT_ROT_NO_SEND ;ENKEL ROTEREN, NIET VERZENDEN! MOVFW NOT_SEND ;HIER TESTEN OP NOT_SEND=8 !! XORLW .8 ;IF JA, INEENS > BIT_ROT_DO_SEND BTFSC STATUS,Z GOTO BIT_ROT_DO_SEND RLF SHIFTREGISTER,F GOTO AGAIN_ROT_NO_SEND GOTO BIT_ROT_DO_SEND AGAIN_ROT_NO_SEND ;NOG EEN KEER ENKEL ROTEREN !!! INCF NOT_SEND,F BTFSS NOT_SEND,3 GOTO BIT_ROT_NO_SEND BIT_ROT_DO_SEND ;ROTEREN DOOR C + VERZENDEN !!! BCF STATUS,C RLF SHIFTREGISTER,F BTFSS STATUS,C GOTO IR_OUT_ZERO IR_OUT_ONE CALL DATA_ON_TIME_ONE GOTO BIT_SPACE IR_OUT_ZERO CALL DATA_ON_TIME_ZERO BIT_SPACE CALL DATA_OFF_TIME INCF SEND,F BTFSS SEND,3 GOTO BIT_ROT_DO_SEND BTFSC CATEGORY_FLAG,0 ;INDIEN 1 --> GEEN HIGHBYTE !!! RETURN ;INDIEN CATEGORY_FLAG,0 GECLEARED IS --> VERSTUUR HIGHBYTE !!!! SEND_HIGHBYTE MOVFW NOT_SEND_HIGH MOVWF NOT_SEND MOVFW SEND_HIGH MOVWF SEND BSF CATEGORY_FLAG,0 MOVFW CATEGORY_HIGHBYTE MOVWF SHIFTREGISTER GOTO BIT_ROT_NO_SEND ;VERSTUREN NU DE HIGHBYTE !!! ;************************************************************** ;************************************************************** ;VOLGENDE ROUTINE GUIDEPULS MOET GEDURENDE 2.4 MS OF 2400 US ;DE ROUTINE CARRIER AANROEPEN !! DIT IS HET STARTSIGNAAL VOOR ;DE IR-DATATRANSMISSIE !!! DE WAARDE DIE WE AAN TIME GEVEN ZAL ;VERMENIGVULDIGD WORDEN MET 25 US -> 96 X 25 = EXACT 2400 US !! ;DOOR 1 OF ANDERE REDEN HEBBEN WE EEN LICHTE AFWIJKING. IN ;PLAATS VAN 96 KIEZEN WE 98 WAARDOOR GUIDEPULS DE BLOKGOLF ;GEDURENDE 2.39 MS ZAL AANROEPEN. WE ZITTEN DUS MET EEN FOUT ;VAN 0.01 MS. DEZE FOUT LIGT BINNEN HET TOLERANTIE GEBIED EN ;DUS IS DE WAARDE 98 OK !!! GUIDEPULS MOVLW .98 MOVWF TIME CALL CARRIER ;DUURT 25US RETURN ;************************************************************** ;************************************************************** ;VOLGENDE ROUTINE DATA_OFF_TIME MOET GEDURENDE 0.6 MS HET ;SIGNAAL LAAG MAKEN !! KOMT IN PRINCIPE NEER OP EEN DELAY ;VAN 0.6 MS OFWEL 600 US. WE GEBRUIKEN HIER EEN APARTE DELAY ;VOOR !!! LET WEL OP --> 600 US MOET NOG WEL VERMINDERT WORDEN ;MET 4 INSTRUCTIE CYCLI = 0.8 US OPDAT WE GEEN REKENING ZOUDEN ;MOETEN HOUDEN MET DE AANROEP EN HET TERUGKEREN VAN DEZE ROUT- ;INE !!!! HEBBEN EEN FOUT VAN 0.0012. ZITTEN DUS VEILIG BINNEN ;HET TOLERANTIE GEBIED (+/- 0.015 MS) !!!!! DATA_OFF_TIME BCF IR_LED ;IR LED UIT !!!!!!! MOVLW .150 MOVWF IR_TELLER3 DATA_OFF_LOOP GOTO $+1 ;GEBRUIKT 2 INSTR.CYCLI !! GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 NOP ;GEBRUIKT 1 INSTR. CYCLI !! DECFSZ IR_TELLER3,F GOTO DATA_OFF_LOOP RETURN ;************************************************************** ;************************************************************** ;DE VOLGENDE ROUTINES STELLEN DE BREEDTES VAN DE DATABITS 0 ;EN 1 VOOR. WE NOEMEN DIT DE ON-TIME VAN DE DATABITS. DE ;OFF-TIME HEBBEN WE HIER BOVEN REEDS BEREKEND. HIER MOETEN WE ;DE BLOKGOLF AANROEPEN EN HERHALEN TOTDAT DE VOORGESCHREVEN ;TIJDEN BEREIKT ZIJN. TIJDEN ZIJ : ; ; ON-TIME '1' --> 1.2 MS = 1200 US ; ON-TIME '0' --> 0.6 MS = 600 US ; ; AFWIJKINGEN GEVONDEN WAARDOOR WAARDE 48 (48 X 25 = 1200) ; MOEST VERVANGEN WORDEN -> 49 --> HIERDOOR EXACT 1200 MS !!! DATA_ON_TIME_ONE MOVLW .49 ; 49 X 25 -> 1200 US MOVWF TIME CALL CARRIER RETURN ; AFWIJKINGEN GEVONDEN WAARDOOR WAARDE 24 (24 X 25 = 600) ; MOEST VERVANGEN WORDEN -> 25 --> HIERDOOR FOUT VAN 0.0118 MS ; DEZE FOUT LIGT VEILIG BINNEN HET TOLERANTIEGEBIED VAN ; +/- 0.015 MS !!!! DATA_ON_TIME_ZERO MOVLW .25 ; 24 X 25 = 600 US MOVWF TIME CALL CARRIER RETURN ; !!!!!!!!OPMERKING!!!!!!!! ; ; HET ENIGE DAT NU NOG MOET GEDAAN WORDEN IS HET CHECKEN VAN DE ; BREEDTE VAN EEN VOLLEDIGE DATABIT --> = OFF- EN DE ON-TIME !! ; DEZE WAARDES ZIJN : ; ; DATABIT '1' --> BREEDTE = 1.8 MS = 1800 US ; GESIMULEERDE BREEDTE = EXACT 1.8 MS !!! ; ; DATABIT '0' --> BREEDTE = 1.2 MS = 1200 US ; GESIMULEERDE BREEDTE = 1.21 ; DUS FOUT= 0.01 MS -> BINNEN TOL.GEBIED! ; ; TOLERANTIEGEBIED = +/- 0.03 MS = +/- 30 US ; ; EN DIT VOOR BEIDE GEVALLEN !! ; ; HET CHECKEN GEBEURDE DOOR HET SIMULEREN VAN DE JUISTE ; ROUTINES EN DOOR MIDDEL VAN EEN DIGITALE SCOOP !!!!!! ;************************************************************** ;************************************************************** ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN IR-SUBROUTINES ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;EERSTE SUBROUTINE DIENT OM DE BLOKGOLF MET FREQUENTIE 40 KHZ TE ;GENEREREN !! 40 KHZ = EEN PERIODE VAN 25 US --> 125 INSTRUCTIE ;CYCLI !! DE AANROEP, RETURN EN CARRIER ZELF DUURT EXACT (!!!!) ;25 US !!!!!!!!!!!!! CARRIER BSF IR_LED CALL IR_DELAY1 BCF IR_LED CALL IR_DELAY2 DECFSZ TIME,F GOTO CARRIER RETURN IR_DELAY1 NOP MOVLW .18 MOVWF IR_TELLER1 IR_LOOP1 DECFSZ IR_TELLER1,F GOTO IR_LOOP1 RETURN IR_DELAY2 NOP MOVLW .17 MOVWF IR_TELLER2 IR_LOOP2 DECFSZ IR_TELLER2,F GOTO IR_LOOP2 RETURN ;HEXBYTE WORDT IN TWEE STUKKEN GEBROKEN EN VERSTUURD ALS ASCII ;KARAKTERS (NAAR HET TERMINAL VENSTER !!) ZELFDE ALS DE ROUTINE ;HEX_PART1 MAAR HIER HEBBEN WE DE PROMPT EN CR OP HET LAATSTE ;WEGGELATEN !!!! BIJ BEEINDIGING VAN HET EINDWERK MOET DEZE ;ROUTINE VERDWIJNEN EN SAMENVLOEIEN MET ROUTINE HEX_PART1 !!!!! HEX1 SWAPF DATA_VALUE_IN,W ANDLW B'00001111' ; 4 MSB GEMASKEERD (00001111) CALL CONVERSION_TABLE_HEXASCII CALL TX_CHARACTER ;EERSTE DEEL HEXBYTE OP SCHERM HEX2 MOVFW DATA_VALUE_IN ANDLW B'00001111' ; 4 MSB GEMASKEERD (00001111) CALL CONVERSION_TABLE_HEXASCII CALL TX_CHARACTER ;TWEEDE DEEL HEXBYTE OP SCHERM RETURN ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ; ; BEGIN MAIN CODE ; ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ ;LETS CONFIGURE OUR I/O PINS AS WE WANT THEM FOR ;THIS APPLICATION. USE THIS ROUTINE TO SETUP I/O ;( ALWAYS A GOOD IDEA TO PRESET THE OUTPUT LATCHES ;BEFORE MAKING THEM OUTPUTS SO THAT WE DO NOT HAVE ;ANY UNEXPECTED VALUES ON THE PINS WHEN WE CONFIGURE THEM ) CLDSTT CONFIG_IO ; INSTELLEN VAN DE GEBRUIKTE BANK0 ; POORTEN !!! CLRF PORTA CLRF PORTC BANK1 MOVLW B'10000000' ;CONFIGURE I/O (BITS 6 AND 7) ;FOR RS232. MOVWF TRISC ;BIT3 (SCL) EN 4 (SDA) OUTPUTS ;BIT 6 RS232 OUTPUT ;BIT 7 RS232 INPUT MOVLW B'00000000' ;ALL OUTPUTS, ZEKER CS-PIN !! MOVWF TRISA BANK0 ;SELECT PAGE 0 OF RAM ;************************************************************** ; ; BEREKENING BAUDRATE : ; ; OORSPRONKELIJK CONFIGURE BAUD RATE ASSUMING 2.4576MHZ XTAL ; ; VOOR GEWENSTE BAUDRATE VAN 9600 MET EEN KRISTAL VAN 20 MHZ ; MOETEN WE DE DECIMALE WAARDE 32 IN REGISTER SPBRG STOPPEN !! ; ; BEREKENING VAN WAARDE 32 : ZIE NOTITIES !! ; ; ; INSTELLING VAN DE USART VAN DE PIC VOOR ZENDEN EN ONTVANGEN : ; ; ; I. STAPPEN TE VOLGEN VOOR HET STARTEN VAN EEN TRANSMISSIE: ; ; 1. INITIALISEER HET SPBRG REGISTER VOOR DE GEWENSTE ; BAUD RATE !! ; HET IS AANBEVOLEN OM VERVOLGENS BRGH NUL TE MAKEN ; ; 2. ENABLE ASYNC SERIAL PORT DOOR : SYNC=0 EN SPEN=1 ; ; 3. INTERRUPTS GEWENST -> TXIE SETTEN ; ; 4. ENABLE TRANSMISSION --> TXEN SETTEN ; ; 5. LOADEN VAN DATA IN TXREG START DE TRANSMISSIE !! ; ; ; ; II. STAPPEN TE VOLGEN VOOR HET STARTEN VAN EEN RECEPTIE ; ; 1. INITIALISEER SPBRG REGISTER VOOR GEWENSTE BAUDRATE ; ; 2. CLEAR SYNC, SET SPEN ; ; 3. SET RCIE WANT WE WENSEN INTERRUPTS ; ; 4. SET CREN --> ENABLE RECEPTION ; ; 5. LEES DE 8 BITS DOOR HET RCREG REGISTER UIT TE LEZEN ; ; ;************************************************************** CONFIG_RS232 BANK1 MOVLW .32 ;DECIMALE WAARDE 32 IN W MOVWF SPBRG ;BAUD RATE REGISTER ;CONFIGURE TX MOVLW B'00100010' MOVWF TXSTA ;ASYNC,8BITS,BRGH=0 ;CONFIGURE RX BANK0 MOVLW B'10011000' ;ASYNC,8BITS MOVWF RCSTA ;BIT DRIE IS UNIMPLEMENTED ZEGT DATASHEETS ???????????? ;DOOR BIT 4 TE SETTEN --> ENABLE RECEPTION !!!! ;CLEAR PENDING INTERRUPTS - PERIPHERAL INTERRUPTS CLRF PIR1 ;CLEAR ALL INTERRUPT FLAGS ;CONFIGURE INTERRUPTS BANK1 BSF PIE1,RCIE ;ENABLE RECEIVE INTERRUPT BANK0 ;CONFIGURE I2C CALL I2C_INIT ;CONFIGURE IR CALL IR_INIT ; SCHRIJVEN WELKOMSTBERICHT OP HET TERMINAL VENSTER, GEVOLGD ; DOOR EEN CARRIAGE , GEVOLGD DOOR EEN PROMPT !!!!!!! ; DEZE TWEE LAATSTE ZITTEN MEE IN DE ROUTINE DIE DE DE TEKST ; OP HET SCHERM SCHRIJFT !!!! CALL SEND_WELCOME ;ENABLE GLOBAL INTERRUPT AND PERIPHERAL INTERRUPTS MOVLW B'11000000' MOVWF INTCON ;************************************************************** ; ; WAITLOOP CHARACTERS SEND, RECEIVE ; ;************************************************************** ; ; IN DIT TESTPROGRAMMA GAAN WE TESTEN OP DRIE VERSCHILLENDE ; LETTERTOETSEN TESTEN NAMELIJK : ; ; P --> ASCII : 01010000 --> SENDSTOP ; Y --> ASCII : 01011001 --> SYS ; L --> ASCII : 01001100 --> SEND_LEGEND ; ; A --> ASCII : 01000001 --> SENDADRES ; ; W --> ASCII : 01010111 --> WRITEBYTE ; R --> ASCII : --> READBYTE ; ; I --> ASCII : --> INFRARED ; ; ESC --> ASCII : 00011011 --> THE_END TEST_NEW_DATA CLRWDT BTFSS FLAGS,0 ;TEST FOR NEW DATA GOTO TEST_NEW_DATA BCF FLAGS,0 ;KOMEN WE HIER DAN IS ER NIEUWE ;DATA IN RX_BUFF REGISTER !!!! LETTER_L_TEST MOVLW B'01111111' ANDWF RX_BUFF,W XORLW B'01001100' ;ASCII VOOR LETTER L BTFSC STATUS,Z CALL SEND_LEGEND LETTER_P_TEST MOVLW B'01111111' ANDWF RX_BUFF,W XORLW B'01010000' ;ASCII VOOR LETTER P BTFSC STATUS,Z GOTO STOPAANROEP ;LETTER = P !! GOTO LETTER_A_TEST STOPAANROEP CALL SEND_CR CALL SEND_PROMPT CALL SENDSTOP LETTER_A_TEST ;DEZE ROUTINE GEBRUIKEN WE OM MOVLW B'01111111' ;HET SLAVE ADRES TE VERZENDEN ANDWF RX_BUFF,W XORLW B'01000001' ;ASCII VOOR LETTER A BTFSS STATUS,Z GOTO LETTER_W_TEST A_MATCH CLRWDT BTFSS FLAGS,0 GOTO A_MATCH BCF FLAGS,0 MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX ;WAARDE OPHALEN UIT TABEL MET ;INDEX = TABLE_POINTER !!!!!!! MOVWF BYTE1 A_MATCH2 CLRWDT BTFSS FLAGS,0 GOTO A_MATCH2 BCF FLAGS,0 ;TWEEDE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ; W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX ;WAARDE OPHALEN UIT TABEL MET ;INDEX = TABLE_POINTER !!!!!!! MOVWF BYTE2 ;TERUGKEER MET JUISTE W-WAARDE CALL CONV_SINGLE_BYTE ;BYTES --> 1 BYTE VAN MAKEN ! MOVFW RESULT_BYTE ;SAMENGESTELDE BYTE !! MOVWF SLAVE_ADDRESS GOTO SENDADRES ;SLAVE_ADDRESS WORDT VERSTUURD! LETTER_W_TEST ;BYTE WORDT GESCHREVEN NAAR BUS MOVLW B'01111111' ANDWF RX_BUFF,W XORLW B'01010111' ;ASCII VOOR LETTER W BTFSS STATUS,Z GOTO LETTER_Y_TEST W_MATCH ;OPHALEN VAN BYTE1 CLRWDT BTFSS FLAGS,0 GOTO W_MATCH BCF FLAGS,0 ;EERSTE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX ;WAARDE OPHALEN UIT TABEL MET ;INDEX = TABLE_POINTER !!!!!!! MOVWF BYTE1 ;TERUGKEER MET JUISTE W-WAARDE W_MATCH2 CLRWDT BTFSS FLAGS,0 GOTO W_MATCH2 BCF FLAGS,0 ;TWEEDE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ; W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX ;WAARDE OPHALEN UIT TABEL MET ;INDEX = TABLE_POINTER !!!!!!! MOVWF BYTE2 ;TERUGKEER MET JUISTE W-WAARDE CALL CONV_SINGLE_BYTE ;BYTES --> 1 BYTE VAN MAKEN ! MOVFW RESULT_BYTE ;SAMENGESTELDE BYTE !! MOVWF DATABYTE_OUT GOTO WRITEBYTE LETTER_Y_TEST MOVLW B'01111111' ANDWF RX_BUFF,W XORLW B'01011001' ;ASCII VOOR LETTER Y BTFSS STATUS,Z GOTO LETTER_R_TEST Y_MATCH CLRWDT BTFSS FLAGS,0 GOTO Y_MATCH BCF FLAGS,0 MOVFW RX_BUFF MOVWF CHIP_SELECT CALL SEND_CR ;NA EERSTE LETTER EN PAR. GOTO SYS ; --> ENTER !! LETTER_R_TEST MOVLW B'01111111' ANDWF RX_BUFF,W XORLW B'01010010' ;ASCII VOOR LETTER R BTFSS STATUS,Z GOTO LETTER_I_TEST R_MATCH CLRWDT BTFSS FLAGS,0 GOTO R_MATCH BCF FLAGS,0 MOVFW RX_BUFF MOVWF ACK_USER CALL SEND_CR ;NA EERSTE LETTER R EN PAR. GOTO READBYTE ; --> ENTER !! LETTER_I_TEST ;IR(INFRARED ROUTINE) 5 PARAM ! MOVLW B'01111111' ANDWF RX_BUFF,W XORLW B'01001001' ;ASCII VOOR LETTER I BTFSS STATUS,Z GOTO NO_MATCH ;******** I_MATCH1A ;OPHALEN VAN BYTE1 CLRWDT BTFSS FLAGS,0 GOTO I_MATCH1A ;IN LUS TOT PAR ONTVANGEN IS !! BCF FLAGS,0 ;EERSTE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE1 I_MATCH1B CLRWDT BTFSS FLAGS,0 GOTO I_MATCH1B BCF FLAGS,0 MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE2 CALL CONV_SINGLE_BYTE MOVFW RESULT_BYTE MOVWF FRAME_NUMBER ;******** I_MATCH2A CLRWDT BTFSS FLAGS,0 GOTO I_MATCH2A BCF FLAGS,0 ;TWEEDE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE1 I_MATCH2B CLRWDT BTFSS FLAGS,0 GOTO I_MATCH2B BCF FLAGS,0 MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE2 CALL CONV_SINGLE_BYTE MOVFW RESULT_BYTE MOVWF CATEGORY_WIDTH ;******** I_MATCH3A CLRWDT BTFSS FLAGS,0 GOTO I_MATCH3A BCF FLAGS,0 ;DERDE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE1 I_MATCH3B CLRWDT BTFSS FLAGS,0 GOTO I_MATCH3B BCF FLAGS,0 MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE2 CALL CONV_SINGLE_BYTE MOVFW RESULT_BYTE MOVWF CATEGORY_HIGHBYTE ;******** I_MATCH4A CLRWDT BTFSS FLAGS,0 GOTO I_MATCH4A BCF FLAGS,0 ;VIERDE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE1 I_MATCH4B CLRWDT BTFSS FLAGS,0 GOTO I_MATCH4B BCF FLAGS,0 MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE2 CALL CONV_SINGLE_BYTE MOVFW RESULT_BYTE MOVWF CATEGORY_LOWBYTE ;******** I_MATCH5A CLRWDT BTFSS FLAGS,0 GOTO I_MATCH5A BCF FLAGS,0 ;VIJFDE BYTE ZIT TE WACHTEN !! MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE1 I_MATCH5B CLRWDT BTFSS FLAGS,0 GOTO I_MATCH5B BCF FLAGS,0 MOVFW OFFSET ;48 DECIMAAL SUBWF RX_BUFF,W ;W = F(RX_BUFF)-W(OFFSET) !!! MOVWF TABLE_POINTER ;TABLEPOINTER = W !!!!!!!!!!!! CALL CONVERSION_TABLE_ASCIIHEX MOVWF BYTE2 CALL CONV_SINGLE_BYTE MOVFW RESULT_BYTE MOVWF IR_DATA CALL INFRARED_ASCII ;HEX WAARDEN OP SCHERM !! ;*************** CALL TEST_FRAME_NUM ;HOEVEEL FRAMES VERSTUREN ?? ;*************** ;GENOEG FRAMES VERSTUURT! TERUG ;WACHTEN OP NIEUWE COMMANDO'S ! NO_MATCH MOVLW B'01111111' ;VISEREN VAN 7 LSB'S ANDWF RX_BUFF,W XORLW B'00011011' ;ASCII CODE VOOR ESC-TOETS ! BTFSC STATUS,Z ;AFSCHEIDSTEKST OP SCHERM !! GOTO THE_END GOTO TEST_NEW_DATA ;NIEUWE LETTER INLEZEN !!! THE_END CALL RELEASEBUS BCF INVERT_CS CALL SEND_END GOTO TEST_NEW_DATA END