KEYER.ASM ; KEYER 1.1 ;Morse code keyer. RC timed for manual speed adjust ;Use 5.1K(fixed)+ 10K pot with .01uF pin 2 for 20-45 WPM ;10K(fixed)+25K pot is about 12 to 25 WPM ;43 bytes ;By Don Cantrell, ND6T 3/4/2011 ; ;*************************************************************************************************** list P=12F675 ; list directive to define processor #include ; processor specific variable definitions errorlevel -302 ; suppress message 302 from list file errorlevel -305 ; suppress message 305 from list file ;Configuration Word __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _EXTRC_OSC_NOCLKOUT ;*************************************************************************************************** ;Definitions #define BANK0 banksel 0h ;Select Bank0 #define BANK1 banksel 80h ;Select Bank1 #define OUT GPIO,GP0 ;Pin 7 #define SPKR GPIO,GP1 ;Pin 6 #define DIT GPIO,GP2 ;Pin 5 #define DAH GPIO,GP4 ;Pin 3 #define COUNT 20h ;Delay constant register ;*************************************************************************************************** ORG 0 ;RESET VECTOR ;*************************************************************************************************** INITIALIZE CLRF COUNT CLRF GPIO MOVLW b'00000111' MOVWF CMCON ;Turn off comparator BANK1 CLRF OPTION_REG MOVLW b'00010100' ;Enable WPU for dah and dit inputs MOVWF WPU CLRF VRCON ;Disable int. volt ref CLRF ANSEL MOVLW b'00111100' ;Configure OUT & SPKR as outputs MOVWF TRISIO ;All others as inputs BANK0 ;*************************************************************************************************** MAIN BTFSS DAH ;Is the dash pin low? CALL DASH ;Yes, go form a dah BTFSS DIT ;Is the dot pin low? CALL DOT ;Yes, go form a dit GOTO MAIN ;Nothing? Then look again for input ;*************************************************************************************************** DOT BSF OUT ;Begin sending a dot MOVLW .30 ;Delay constant for a dot MOVWF COUNT ;Load dot delay CALL ELSND ;Send the element RETURN ;*************************************************************************************************** DASH BSF OUT ;Begin sending a dash MOVLW .90 ;Delay constant for a dash MOVWF COUNT ;Load dash delay CALL ELSND ;Send the element RETURN ;*************************************************************************************************** ELSND BSF SPKR ;Bang on the speaker BCF SPKR ;for the appropriate time DECFSZ COUNT GOTO ELSND BCF OUT ;Stop sending the element CALL PAUSE ;Element pause RETURN ;*************************************************************************************************** PAUSE ;That refreshing pause between elements MOVLW .50 ;Load constant for delay MOVWF COUNT AGN DECFSZ COUNT ;Sit & spin for the appropriate time GOTO AGN RETURN END