LIST P=16F84

               

                __CONFIG 0x3FFB                             ;RC, NO WDT,  PWR-UP, NO CP.

 

RA          EQU       05H                        ;PORT A

RB          EQU       06H                        ;PORT B

COUNT1               EQU       0CH                        ;COUNT FOR DELAY LOOP

COUNT2               EQU       0DH                       ; "

FLAG     EQU       0EH                        ;USER FLAGS

 

DIT_FLG               EQU       00H                        ;DOT FLAG

DIT_SW EQU       00H                        ;DOT SWITCH (ON PADDLE KEY)

DAH_SW               EQU       01H                        ;DASH SWITCH (ON PADDLE KEY)

KEY        EQU       00H                        ;KEYING OUTPUT

 

                ORG       00H                        ;PROGRAM EXECUTION BEGINS FROM HERE

                GOTO    START

 

DAH       MOVLW                0x1E                       ;MAIN DOT/DASH DELAY LOOP

                GOTO    CONT

DIT         MOVLW                0x0A

CONT    MOVWF                COUNT1

LP2         MOVLW                0x6E

                MOVWF                COUNT2

LP1         DECFSZ COUNT2,1

                GOTO    LP1

                DECFSZ COUNT1,1

                GOTO    LP2

                RETLW  0                             ;END OF DELAY

 

START   BSF         3,5                          ;SWITCH TO F REGISTER PAGE 1

                MOVLW                0FFH                      ;PORT A ALL INPUTS

                MOVWF                RA

                MOVLW                00H                        ;PORT B ALL OUTPUTS

                MOVWF                RB

                BCF        3,5                          ;SWITCH TO F REGISTER PAGE 0

               

                MOVLW                0

                MOVWF                RB                          ;MAKE SURE TX IS NOT KEYED ON POWER UP

                MOVWF                FLAG                     ;CLEAR DOT AND DASH FLAGS

 

NEXT     BTFSS    RA,DIT_SW          ;IS THE DIT PADDLE PRESSED?

                GOTO    DOT

                BTFSS    RA,DAH_SW        ;IS THE DAH PADDLE PRESSED

                GOTO    DASH

                GOTO    NEXT                    ;LOOP UNTIL NEXT PADDLE PRESS

 

DOT       BTFSS    RA,DAH_SW        ;ARE BOTH PADDLES PRESSED

                GOTO    IAMBIC                ;YES       

DOT2     BSF         RB,KEY                 ;KEY TRANSMITTER                       

                CALL     DIT                        ;DELAY FOR 1 DOT LENGTH

                BCF        RB,KEY                 ;UNKEY TRANSMITTER

                CALL     DIT                        ;DELAY FOR 1 DOT LENGTH

                BSF         FLAG,DIT_FLG   ;LAST MORSE ELEMENT SENT WAS A DOT (FOR IAMBIC ACTION)

                GOTO    NEXT                    ;BACK AND WAIT UNTIL NEXT PADDLE PRESS

 

DASH     BTFSS    RA,DIT_SW          ;ARE BOTH PADDLES PRESSED

                GOTO    IAMBIC                ;YES       

DASH2   BSF         RB,KEY                 ;KEY TRANSMITTER                       

                CALL     DAH                      ;DELAY FOR 1 DASH LENGTH (3 DOT LENGTHS)

                BCF        RB,KEY                 ;UNKEY TRANSMITTER

                CALL     DIT                        ;DELAY FOR 1 DOT LENGTH

                BCF        FLAG,DIT_FLG   ;LAST MORSE ELEMENT SENT WAS A DASH (FOR IAMBIC ACTION)

                GOTO    NEXT                    ;BACK AND WAIT UNTIL NEXT PADDLE PRESS

 

IAMBIC BTFSC   FLAG,DIT_FLG   ;CHECK TO SEE IF LAST CHAR SENT WAS A DOT OR A DASH

                GOTO    DASH2                  ;IT WAS A DOT, SEND A DASH

                GOTO    DOT2                     ;IT WAS A DASH, SEND A DOT

               

                END