;=== FOXBOX == REV. 3.1a == Feb 10, 98 === Use Microchip MPASM assembler ==== ; ;Written by Francois Tremblay VE2JX and Jacques Brodeur VE2EMM, Nov. 1997. ;Used for Montreal Fox Controller, "Homing In" for April 1998 ;This software can be reproduce freely only to be used by Amateur Radio ;Operators and Amateur Radio Clubs, Any other use is prohibited. ; ;---------------------------------------------------------------------------- ; ; Use a 4.194304 XTAL ; list P=16F84 radix HEX __CONFIG _WDT_OFF&_XT_OSC&_CP_OFF&_PWRTE_ON ; ;---------------------------------------------------------------------------- ; ; List of memory addresses ; CBLOCK 0X0C NU_MESSAGE ;Registres utilises par la generation DEPLACEMENT ;de CW LETTRECW NBR_ESPACE NBR_DIT CTR_NBR CTR_DIT CTR_DIAPA PORTX DURE ;----------------------------------- TMPW ;MEMOIRE TEMPORAIRE DU W TMPS ;MEMOIRE TEMPORAIRE DE STATUS DIVISION ;REGISTRE AVEC LA VALEUR DE 16 A FAIRE DECOMPTER SECONDE ;REGISTRE DES SECONDES TMP_1 ;MEMOIRE A USAGE TEMPORAIRE DURE_TMP POINTEUR_TX ;POINTEUR TX CYCLE_MINUTE ;REGISTRE QUI A LA VALEUR DU CYCLE TOTAL EN MINUTE TIMER ; MESSAGE ;REGISTRE QUI A LE NOMBRE DE TX DANS LA CHASSE FLAG ;FLAG 0 = , FLAG1 = , FLAG 7 = MEM_CALL BOUCLE TX_NUMBER TMPF1 TMPF2 TMPF3 DIX_MIN ENDC ; ;----------------------------------- ; TMR0 EQU 0X01 ;PIC registers PCL EQU 0X02 ; " STATUS EQU 0X03 ; " FSR EQU 0X04 ; " PORTA EQU 0X05 ; " PORTB EQU 0X06 ; " EEDATA EQU 0X08 ; " EEADR EQU 0X09 ; " PCLATH EQU 0X0A ; " INTCON EQU 0X0B ; " TRISA EQU 0X85 ; " TRISB EQU 0X86 ; " EECON1 EQU 0X88 ; " EECON2 EQU 0X89 ; " PCLATH EQU 0X0A ; " ; ;---------- List of symbolic values ; RP0 EQU 0X05 W EQU 0X00 F EQU 0X01 Z EQU 0X02 C EQU 0X00 WREN EQU 0X02 WR EQU 0X01 RD EQU 0X00 _CP_OFF EQU 0X3FFF _PWRTE_ON EQU 0X3FF7 ;16C84 = 0X3FFF 16F84 = 3FF7 _WDT_OFF EQU 0X3FFB _XT_OSC EQU 0X3FFD ; ;============================================================================ ; ORG 0X000 GOTO DEBUT ;Vers le debut du programme ORG 0X004 ;LORS D'UN OVERFLOW DE TMR0 LE PCL EST GOTO INTERUPTION ;FORCE de VENIR ICI pour le timer ; ;--- MESSAGES --------------------------------------------------------------- ; ORG 0X006 MESSAGE0 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X00 ;Espace mot RETLW 0XFF ;End of message MESSAGE1 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X02 ;"E" RETLW 0XFF ;End of message MESSAGE2 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X04 ;"I" RETLW 0XFF ;End of message MESSAGE3 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X08 ;"S" RETLW 0XFF ;End of message MESSAGE4 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X10 ;"H" RETLW 0XFF ;End of message MESSAGE5 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X20 ;"5" RETLW 0XFF ;End of message MESSAGE6 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X05 ;"N" RETLW 0XFF ;End of message MESSAGE7 MOVF DEPLACEMENT,W ;Wich caracter ADDWF PCL,F ; RETLW 0X07 ;"M" RETLW 0X0F ;"O" RETLW 0X09 ;"D" RETLW 0XFF ;End of message MESSAGE8 ;EEDATA code, "Sender's CALL" MOVF DEPLACEMENT,W ;Wich caracter MOVWF EEADR ;load it BSF STATUS,RP0 ;Bank 1 BSF EECON1,RD ;Command a read BCF STATUS,RP0 ;Back to bank 0 MOVF EEDATA,W ;Load the read value in W RETURN MESSAGE9 MOVF DEPLACEMENT,W ;Wich caracter to load ADDWF PCL,F ;Go to it RETLW 0X09 ;"D" RETLW 0X02 ;"E" RETLW 0X00 ;Word space RETLW 0XFF ;End of message ; ;=== Memorize the sender's call ============================================= ; MEM_CALL BTFSC FLAG,7 ;Procede if not done before GOTO FLASH ;To Beep to put the jumper back on MOVLW D'200' ;CW speed 5 WPM MOVWF DURE MOVLW D'9' ;Send "DE" CALL CODER ;CW MOVLW 0X00 ;EEDATA sarting adress 0X00 MOVWF DEPLACEMENT ;Memory location NEXT_LETTER BTFSC PORTA,3 ;Read enter button GOTO NEXT_LETTER ;wait for enter MOVF DEPLACEMENT,W ;Load starting adress MOVWF EEADR ; MOVF PORTB,W ;Get a CW character from the switches MOVWF EEDATA ; MOVWF LETTRECW ;Save the CW to confirm the letter BSF STATUS,RP0 ;Go to bank 1 BSF EECON1,WREN ;Write enable MOVLW 0X55 MOVWF EECON2 MOVLW 0XAA MOVWF EECON2 BSF EECON1,WR ;Write command BCF EECON1,WREN ;Disable the write enable BCF STATUS,RP0 ;Back to bank 1 LOOP BTFSS PORTA,3 ;Wait for enter ************************ GOTO LOOP ;*************************************** MOVF PORTB,W XORLW 0XFF ;Test fo EOM character SKPNZ GOTO CALL_COMPL CALL UN_CAR ;Confirm the memorization INCF DEPLACEMENT,F GOTO NEXT_LETTER ; CALL_COMPL MOVLW 0X03 ;Long "T" OR BEEP MOVWF LETTRECW MOVWF NBR_DIT MOVLW D'255' ;1/4 secondes MOVWF DURE CALL UN_CAR BSF FLAG,7 ;Mark the flag done MOIMEME GOTO MOIMEME ;Finish Wait for a RESET/SYNC pressing ; ;=== GENERATION OF CW/MCW =================================================== ; ; RA0 = MCW ; RA1 = Keyed CW/80 meters ; ;To send a message, enter the "CODER" routine with: ; - The # of the message to transmitted in Reg "W" ; - The speed of the CW in memory "DURE"; 5 WPM = 240, 20 WPM = 60 ; ;To send a letter, enter the "UN_CAR" routine with: ; - the letter to be transmitted in memory "LETTRECW" ; - The speed of the CW in memory "DURE"; 5 WPM = 240, 20 WPM = 60 ; ;To generate a beep, enter the "SON" routine with: ; - 250 in "DURE" = 1/4 second beep ; - # of 1/4 sec. in "NBR_DIT" ; ;--- CODE ROUTINE -- CW/MCW generation -------------------------------------- ; CODER MOVWF NU_MESSAGE ;Enter the routine with the message # CLRF DEPLACEMENT ;Reset of the displacement counter in ;the message CHERCH_LETR CLRC ;Get a new letter RLF NU_MESSAGE,W ;Multiply the message number by 2 ADDWF PCL,F ;Jump to the selected message CALL MESSAGE0 ;Location of message 0 GOTO FAIRCODER CALL MESSAGE1 ;Location of message 1 GOTO FAIRCODER CALL MESSAGE2 ;Location of message 2 GOTO FAIRCODER CALL MESSAGE3 ;Location of message 3 GOTO FAIRCODER CALL MESSAGE4 ;Location of message 4 GOTO FAIRCODER CALL MESSAGE5 ;Location of message 5 GOTO FAIRCODER CALL MESSAGE6 ;Location of message 6 GOTO FAIRCODER CALL MESSAGE7 ;Location of message 7 GOTO FAIRCODER CALL MESSAGE8 ;Location of message 8, EEDATA GOTO FAIRCODER CALL MESSAGE9 ;Location of message 9, "DE" GOTO FAIRCODER ; ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; FAIRCODER MOVWF LETTRECW MOVF LETTRECW,F ;To set the zero bit in the STATUS Reg SKPNZ ;Test fo a space GOTO FAIR_ESPMOT ;Do a word space ** MOVLW 0XFF ;FF = end of message XORWF LETTRECW,W SKPNZ ;Test for the end of message FINCODER RETURN ;End of message * * * * * * * * * * * * CALL UN_CAR ;Do a character PROCH_LETR INCF DEPLACEMENT,F ;Next letter MOVLW 0X02 ;Add 2 time period MOVWF NBR_ESPACE ;Total 3 time period, SPACE between characters CALL PAS_SON ;2 more periods GOTO CHERCH_LETR ;Get another letter FAIR_ESPMOT MOVLW 0X04 ;Add 4 more time periods between words MOVWF NBR_ESPACE ;Total 7 time periods, SPACE between words CALL PAS_SON ;Do 4 more periods GOTO PROCH_LETR ;Get another letter ; ;--- ONE_CAR routine -------------------------------------------------------- ; ; DIT = 1 period ; DAH = 3 periods ; SPACE between character = 1 periods ; SPace between letters = 3 periods ; SPace between words = 7 periods ; UN_CAR CLRC ;Send a letter character by character RRF LETTRECW,F ;Place a character in the carry flag MOVF LETTRECW,F SKPNZ RETURN ;The character is finished************** SKPC ;Jump if DAH GOTO FAIR_DIT ;Bit at 0 GOTO FAIR_DAH ;bit at 1 FAIR_DIT MOVLW 0X01 ;1 DIT MOVWF NBR_DIT MOVWF NBR_ESPACE ;1 space after the dit BSF PORTA,1 ;80 Meters CW, Key ON CALL SON BCF PORTA,1 ;80 Meters CW, Key OFF CALL PAS_SON GOTO UN_CAR FAIR_DAH MOVLW 0X03 ;1 DAH = 3 DIT MOVWF NBR_DIT MOVLW 0X01 ; MOVWF NBR_ESPACE ;1 space after the DAH BSF PORTA,1 ;80 Meters CW, Key ON CALL SON BCF PORTA,1 ;80 Meters CW, Key OFF CALL PAS_SON GOTO UN_CAR ; ;--- Sound routine ---------------------------------------------------------- ; ; This routine generates a dit multiplied by NBR_DIT ; ; SPEED OF A CYCLE OU FREQUENCY, exemple, generate 1000 hz with a ; XTAL of 4.194304 mhz. One instruction cycle = .95 usec. ; Time of 1 audio cycle : 1/1000 = 0.001 second ; Time of 1/2 audio cycle : 0.001/2 = 0.0005 second ; The time of each downcounting of CTR_DIAPA is 3 instructions cycles ; or 2.86 useconds ; ; The numbers pass to do for a half cycle audio at 1000 Hz is ; 0.0005/0.00000286 = 178 ; ; The lenght of a DIT for a MCW of 20 WPM is 0.060 secondes ; The numbers of cycles to do is : 0.060/0.001 = 60 for a DIT ; "DURE" = ; MCW @ 20 WPM = 60 ; MCW @ 15 WPM = 90 ; MCW @ 10 WPM = 120 ; MCW @ 08 WPM = 150 ; MCW @ 05 WPM = 240 ; SON MOVF NBR_DIT,W ;The number of dits to do MOVWF CTR_NBR UNDIT MOVF DURE,W ;Length of a DIT period MOVWF CTR_DIT ; UNCYCLE BSF PORTA,0 ;Place a 1 for the first half of the cycle MOVLW D'178' ;The number of times through this half cycle MOVWF CTR_DIAPA ;Determine the tone frequency CYCLEHAUT DECFSZ CTR_DIAPA,F ;Downcount to 0 GOTO CYCLEHAUT BCF PORTA,0 ;Place the bit to 0 for the secon half of the cycle MOVLW D'178' ; MOVWF CTR_DIAPA CYCLEBAS DECFSZ CTR_DIAPA,F ;Wait until 0 to finish GOTO CYCLEBAS DECFSZ CTR_DIT,F ; GOTO UNCYCLE DECFSZ CTR_NBR,F GOTO UNDIT ;One more cycle RETURN ;Completed ; ;--- No sound routine ------------------------------------------------------- ; ; This routine generates space multiplied by NBR_ESPACE ; ; This routine is the same as the SON routine, but whitout sound ; It activate a virtual speaker, PORTX ; The timing is kept the same PAS_SON MOVF NBR_ESPACE,W ;The number of spaces to do MOVWF CTR_NBR UNDIT_PS MOVF DURE,W ;Length of a DIT period MOVWF CTR_DIT ; UNCYCLE_PS BSF PORTX,0 ;Place a 1 for the first half of the cycle MOVLW D'178' ;The number of times through this half cycle MOVWF CTR_DIAPA ;Determine the tone frequency CYCLEHAUT_PS DECFSZ CTR_DIAPA,F ;Downcount to 0 GOTO CYCLEHAUT_PS BCF PORTX,0 ;Place the bit to 0 for the secon half of the cycle MOVLW D'178' ; MOVWF CTR_DIAPA CYCLEBAS_PS DECFSZ CTR_DIAPA,F ;Wait until 0 to finish GOTO CYCLEBAS_PS DECFSZ CTR_DIT,F ; GOTO UNCYCLE_PS DECFSZ CTR_NBR,F GOTO UNDIT_PS ;One more cycle RETURN ;Completed ; ;=== TIMERS === ROUTINE D'INTERRUPTION ====================================== ; INTERUPTION MOVWF TMPW ;SAUVER W DANS TMPW ** PUSH ** SWAPF STATUS,W ;Charger le STATUS dans W MOVWF TMPS ;Sauver le STATUS dans TMPS ;----------------------------------- DECFSZ DIVISION,F ;Registre de 1 seconde-Divise par 16 GOTO POP ;Pas encore 1 seconde-Aller a POP MOVLW D'16' ;METTRE 16 DANS W MOVWF DIVISION ;Re-initialiser le generateur de secondes ;----------------------------------- DECFSZ SECONDE,F ;Compteur de secondes GOTO POP ;Pas encore 60 secondes-Aller a POP MOVLW D'60' ;Re-initialiser le generateur de minutes MOVWF SECONDE DECFSZ DIX_MIN ;Compteur de 10 minutes GOTO FAIR_MIN MOVLW D'10' MOVWF DIX_MIN ;----------------------------------- DECF TIMER,F ;compte des 10 minutes-avant-pendant-apres SKPNZ BSF FLAG,0 ;Marque le passage a zero FAIR_MIN INCF POINTEUR_TX,F ;Numero de la Minute actuelle du cycle BSF FLAG,1 ; de 1 @ 7 selon le cycle choisi MOVF POINTEUR_TX,W ; SUBWF CYCLE_MINUTE,W ;Temps maximum du cycle de transmission SKPZ ;Opere a la minute suivante du maximum GOTO POP MOVLW D'1' MOVWF POINTEUR_TX ;Re-init la minute actuelle a 1 ;----------------------------------- POP BCF INTCON,2 ;Rappel du flag du zero de TMRO SWAPF TMPS,W ;LES 6 PROCHAINE LIGNES SERVENT A REMETTRE W, STATUS MOVWF STATUS ;A LEUR PLACE AVEC LES VALEUR QUE SES REGISTRES AVAIENT SWAPF TMPW,F ;AVANT L'INTERUPTION, ET DE RESETER LE FLAG DE TMR0 SWAPF TMPW,W ; RETFIE ;Return to the program ; ;=========================================================================== ; ** START OF THE PROGRAM ** PREMIERE INITIALISATION ;=========================================================================== ; DEBUT MOVLW B'00000111' OPTION CLRF PORTA ;EFFACE LE PORTA CLRF PORTB ;EFFACE LE PORTB MOVLW B'00011000' ;1 = input pins, 0 = output pins TRIS PORTA ;EDUCATION DU PORT MOVLW B'11111111' ; TRIS PORTB ;EDUCATION DU PORT EN ENTREE ; ;TEST LA PRESENCE DU CAVALIER TEST FOR THE JUMPER ; BTFSC PORTA,3 ;Voir si le cavalier est present GOTO MEM_CALL ;NON charger les lettres d'appel MOVLW D'1' MOVWF PCLATH GOTO PROG_PRINC ;OUI controller un TX (FOX) ; ; ;PROGRAMME DE CONTROLE DU TX (FOX) ; ORG 0X10A PROG_PRINC CLRF TMR0 ; CLRWDT ; CLRF INTCON ; BSF INTCON,7 ; BSF INTCON,5 ;Demarre le timer MOVLW D'16' ; MOVWF DIVISION ;Genere les secondes MOVLW D'60' ; MOVWF SECONDE ;Genere les minutes MOVLW D'10' ;COMPTEUR DE 10 MINUTES MOVWF DIX_MIN CLRF FLAG ;---------------------------------------------------------------------------- CALL LIRE_SW ;Lire les interrupteurs TSTF TIMER ;Si TIMER est zero aller chasser SKPZ CALL DELAYED_TIME ;Attente avant le debut de la chasse MOVLW D'24' ;HUNTING TIME IN 10 MINUTES STEPS ;4 HOURS = 24, 8 HOURS = 48 MOVWF TIMER ;Ne pas mettre 0 Temps de chasse maximum CALL FAIRE_CYCLE ;Chasser BCF INTCON,7 ;Disable interrupts SHUTDOWN SLEEP ;Stop everyting low power consumption NOP ; ;============================================================================ ; *** SOUS-ROUTINES *** ;============================================================================ ; ;--- LIRE LES SW 3-2-1 POUR LE TEMPS EN ATTENTE --- ; LIRE_SW MOVF PORTB,W ; ANDLW B'00000111' ;Charger les SWs 3-2-1 CALL DEL_START MOVWF TIMER GOTO SW4 ;Prochaines SWs ; ;--- Temps d'attente ---WAITING TIME BEFORE THE HUNT---- ; DEL_START ADDWF PCL,F ;ADDITIONNE W AVEC LE PROG. COMPTEUR RÉSULTAT DANS PCL RETLW D'0' ; MAINTENANT NOW SW off RETLW D'3' ; 30 MIN D'ATTENTE SW 1 RETLW D'6' ; 1H // SW 2 RETLW D'9' ; 1H30 // SW 2 1 RETLW D'12' ; 2H // SW 4 RETLW D'15' ; 2H30 // SW 4 1 RETLW D'18' ; 3H // SW 4 2 RETLW D'21' ; 3H30 // SW 4 2 1 ; ;--- LIRE LES SW 6-5-4 POUR LE CALLSIGN DU TX ET LE # DU TX --- ; SW4 MOVF PORTB,W ANDLW B'00111000' ;Lire les SWs 6-5-4 MOVWF TMP_1 CLRC ;Vider le CARRY RRF TMP_1,F RRF TMP_1,F RRF TMP_1,F MOVF TMP_1,W ;Charger W avec la valeur des SWs 6-5-4 CALL TXCALL_SIGN MOVWF MESSAGE ;ID du FOX MOVF TMP_1,W CALL TIME_CYCLE MOVWF TX_NUMBER ;Position du TX dans le cycle GOTO SW7 ;Prochaines SWs ; ;--- CALL SIGN DU TX --- ; TXCALL_SIGN ADDWF PCL,F ;ADDITIONNE W AVEC LE PROG. COMPTEUR RÉSULTAT DANS PCL RETLW D'0' ;MO RETLW D'1' ;MOE RETLW D'2' ;MOI RETLW D'3' ;MOS RETLW D'4' ;MOH RETLW D'5' ;MO5 RETLW D'6' ;MON RETLW D'7' ;MOD ; ;--- TX # ET TEMPS D'ATTENTE AVANT DE REFAIRE LA TRANSMISSION --- ; TIME_CYCLE ADDWF PCL,F ;ADDITIONNE W AVEC LE PROG. COMPTEUR RÉSULTAT DANS PCL RETLW D'1' ; CYCLE DE MINUTES/NUMÉRO DU TX 0 RETLW D'1' ; CYCLE DE MINUTES/NUMÉRO DU TX 1 RETLW D'2' ; CYCLE DE MINUTES/NUMÉRO DU TX 2 RETLW D'3' ; CYCLE DE MINUTES/NUMÉRO DU TX 3 RETLW D'4' ; CYCLE DE MINUTES/NUMÉRO DU TX 4 RETLW D'5' ; CYCLE DE MINUTES/NUMÉRO DU TX 5 RETLW D'6' ; CYCLE DE MINUTES/NUMÉRO DU TX 6 RETLW D'7' ; CYCLE DE MINUTES/NUMÉRO DU TX 7 ; ;--- LIRE LES SWs 9-8-7 CYCLE DE TEMPS AVANT DE COMMANCER LA TRANSMISSION --- ; SW7 CLRF TMP_1 BTFSS PORTB,6 GOTO SW8 BSF TMP_1,0 SW8 BTFSS PORTB,7 GOTO SW9 BSF TMP_1,1 SW9 BTFSS PORTA,4 GOTO TX_CYCLE BSF TMP_1,2 TX_CYCLE MOVF TMP_1,W CALL TIME_CYCLE ADDLW D'1' MOVWF CYCLE_MINUTE ;Temps du cycle de transmission MOVF CYCLE_MINUTE,W ; # du FOX > CYCLE? SUBWF TX_NUMBER,W BTFSC STATUS,C CALL ALARME ;Oui trouble RETURN ; ;--- ROUTINE D'ALARME ------------------------------------------------------ ; ALARME MOVF DIVISION,W ;Clignote la LED ANDLW B'00000010' SKPZ BSF PORTA,1 SKPNZ BCF PORTA,1 GOTO ALARME ; ;--- ROUTINE D'ATTENTE AVANT LA CHASSE ------------------------------------- ; DELAYED_TIME BCF FLAG,0 REDO_WAIT MOVF DIVISION,W ANDLW B'0001111' SKPNZ BSF PORTA,1 ;Montrer que le timer marche sur la LED SKPZ BCF PORTA,1 ;Montrer que le timer marche BTFSS FLAG,0 ;Verifier si tout le temps est ecoule GOTO REDO_WAIT ; BCF PORTA,1 ;Quitter avec la LED eteinte RETURN ;Vers le programme principal ; ;--- SECTION DU PROGRAMME POUR FAIRE LE MORSE MOx UN NOMBRE DE FOIS -------- ; FAIRE_CYCLE MOVLW D'1' ;Initialisation de la premiere minute MOVWF POINTEUR_TX ;du cycle CLRF FLAG ; ;--- Temps avant transmission et apres transmission ------------------------ ; ATTENTE_MIN BCF FLAG,2 MOVF POINTEUR_TX,W ;Minute du cycle XORWF TX_NUMBER,W ;Position du TX dans le cycle SKPZ BSF FLAG,2 BTFSC FLAG,0 ; *** Verifier si la chasse est fini RETURN ; *** Fin de la chasse BTFSC FLAG,2 GOTO ATTENTE_MIN ; ;--- Transmission de l'ID -------------------------------------------------- ; BCF FLAG,1 ;Rappel du flag-Transmission faite BSF PORTA,2 ;On commance a transmettre MOVLW D'145' ;8 WPM MOVWF DURE MOVLW 0X00 MOVWF PCLATH ;Page 0 MOVF MESSAGE,W ;Envoyer un ID a 0 sec. du cycle CALL CODER SEC54 MOVF SECONDE,W ;Envoyer un ID a 6 sec. du cycle XORLW D'54' SKPZ GOTO SEC54 MOVF MESSAGE,W CALL CODER SEC48 MOVF SECONDE,W XORLW D'48' ;Envoyer un ID a 12 sec. du cycle SKPZ GOTO SEC48 MOVF MESSAGE,W CALL CODER SEC42 MOVF SECONDE,W ;Envoyer un ID a 18 sec. du cycle XORLW D'42' SKPZ GOTO SEC42 MOVF MESSAGE,W CALL CODER SEC36 MOVF SECONDE,W ;Envoyer un ID a 24 sec. du cycle XORLW D'36' SKPZ GOTO SEC36 MOVF MESSAGE,W CALL CODER SEC30 MOVF SECONDE,W ;Envoyer un ID a 30 sec. du cycle XORLW D'30' SKPZ GOTO SEC30 MOVF MESSAGE,W CALL CODER SEC24 MOVF SECONDE,W ;Envoyer un ID a 36 sec. du cycle XORLW D'24' SKPZ GOTO SEC24 MOVF MESSAGE,W CALL CODER SEC18 MOVF SECONDE,W ;Envoyer un ID a 42 sec. du cycle XORLW D'18' SKPZ GOTO SEC18 MOVF MESSAGE,W CALL CODER SEC12 MOVF SECONDE,W ;Envoyer un ID a 48 sec. du cycle XORLW D'12' SKPZ GOTO SEC12 MOVF MESSAGE,W CALL CODER ; ;--- TX de "De lettres d'appel du maitre de chasse" --- ; SEC6 MOVF SECONDE,W ;Envoyer les lettres a 54 sec. du cycle XORLW D'6' SKPZ GOTO SEC6 MOVLW D'45' ;Send DE at 25 WPM MOVWF DURE MOVLW D'9' ;Envoyer "DE espace mot" CALL CODER MOVLW D'8' ;Envoyer les lettres d'appel CALL CODER MOVLW D'1' ;back to page number 1 MOVWF PCLATH ;Retour a la page 1 ATTENTE_FIN BTFSS FLAG,1 ;attente de la fin de la minute de TX GOTO ATTENTE_FIN BCF PORTA,2 GOTO ATTENTE_MIN ; ;=========================================================================== ; ORG 0X0200 FLASH BSF PORTA,1 CALL LOOP_BEGIN BCF PORTA,1 CALL LOOP_BEGIN GOTO FLASH LOOP_BEGIN MOVLW 0XFF MOVWF TMPF1 MOVWF TMPF2 LOOP_WAIT DECFSZ TMPF1,F GOTO LOOP_WAIT MOVLW 0XFF MOVWF TMPW DECFSZ TMPF2,F GOTO LOOP_WAIT RETURN ; ;--- EEDATA ---------------------------------------------------------------- ; ; Initial loading the EEDATA memory ; ORG 0X2100 ;Burning adress of the EEDATA DE 0X14 ;"F" Sender's call, EEDATA ADR. 0X00 DE 0X0F ;"O" DE 0X19 ;"X" DE 0X11 ;"B" DE 0X0F ;"O" DE 0X19 ;"X" DE 0XFF ;--- End of message --- END ; ;--- FIN ------------------------------------------------------------------- ; ;=== SNIP ================================================================== ; ; MORSE ENCODING ... ; ; One morse character per BYTE, bitwise, LSB to MSB. ; ; 0 = dit, 1 = dah. The byte is shifted to the right bit by bit, until the ; last 1 is left, this 1 is an END OF CHARACTER indicator. ; A maximum of 7 elements can be encoded, (error) is excluded. ; ; CODERR MSD LSD Comments ; ------ --- --- -------------------- ; KN -.--. 00101101 2 13 Go only ; SK ...-.- 01101000 5 8 Clear ; AR .-.-. 00101010 2 10 Over, end of message ; BT -...- 00110001 3 1 Pause ; AS .-... 00100010 2 2 Wait, stand by ; / -..-. 00101001 2 9 ; 0 ----- 00111111 3 15 ; 1 .---- 00111110 3 14 ; 2 ..--- 00111100 3 12 ; 3 ...-- 00111000 3 8 ; 4 ....- 00110000 3 0 ; 5 ..... 00100000 2 0 ; 6 -.... 00100001 2 1 ; 7 --... 00100011 2 3 ; 8 ---.. 00100111 2 7 ; 9 ----. 00101111 2 15 ; A .- 00000110 0 6 ; B -... 00010001 1 1 ; C -.-. 00010101 1 5 ; D -.. 00001001 0 9 ; E . 00000010 0 2 ; F ..-. 00010100 1 4 ; G --. 00001011 0 11 ; H .... 00010000 1 0 ; I .. 00000100 0 4 ; J .--- 00011110 1 14 ; K -.- 00001101 0 13 ; L .-.. 00010010 1 2 ; M -- 00000111 0 7 ; N -. 00000101 0 5 ; O --- 00001111 0 15 ; P .--. 00010110 1 6 ; Q --.- 00011011 1 11 ; R .-. 00001010 0 10 ; S ... 00001000 0 8 ; T - 00000011 0 3 ; U ..- 00001100 0 12 ; V ...- 00011000 1 8 ; W .-- 00001110 0 14 ; X -..- 00011001 1 9 ; Y -.-- 00011101 1 13 ; Z --.. 00010011 1 3 ; SPACE 00000000 0 0 Word space (special exception) ; EOM 11111111 15 15 End of message (special exception) ;