; ; Morse Key Program ; ;Defines #DEFINE REGHI BSF 3,5 #DEFINE REGLO BCF 3,5 #DEFINE KEYDN BSF 5,3 #DEFINE KEYUP BCF 5,3 ;Internal File Assignments PORTA .EQU $05 PORTB .EQU $06 ;Internal Bit Assignments W .EQU 0 F .EQU 1 ;User File Assignments TIMER1 .EQU $10 TIMER2 .EQU $11 ;User Bit Assignments IAMBIC .EQU 1 DOTKEY .EQU 4 DASHKEY .EQU 3 KEYOUT .EQU 3 ;Program Starts Here!!!!!!!!! .ORG 4 .ORG 5 REGHI MOVLW $03 ;Set PORTA bits 0,1 to inputs, MOVWF PORTA ;bits 2,3,4 to outputs MOVLW $FF MOVWF PORTB ;Set PORTB to all inputs REGLO LOOP BTFSS PORTB, DOTKEY ;Is Dot Key Pressed GOTO DOT ;Yes, go to Dot routine BTFSS PORTB, DASHKEY ;Is Dash Key Pressed GOTO DASH ;Yes, go to Dash routine GOTO LOOP DOT KEYDN NOP NOP NOP NOP NOP NOP CALL TIME KEYUP CALL TIME BTFSC PORTB, DOTKEY ;Is Dot Key Still pressed? GOTO LOOP ;No, so go back to loop BTFSS PORTA, IAMBIC ;Yes - Is Iambic switch set? GOTO DOT ;No so do another Dot GOTO DASH ;Yes, so do a dash DASH KEYDN NOP NOP NOP NOP NOP NOP CALL TIME CALL TIME CALL TIME KEYUP CALL TIME BTFSC PORTB, DASHKEY ;Is Dash Key Still pressed? GOTO LOOP ;No, so go back to loop BTFSS PORTA, IAMBIC ;Yes - Is Iambic switch set? GOTO DASH ;No so do another Dash GOTO DOT ;Yes, so do a dot TIME MOVLW 22 MOVWF TIMER1 T1 MOVLW 128 MOVWF TIMER2 T2 DECFSZ TIMER2,F GOTO T2 DECFSZ TIMER1,F GOTO T1 RETURN .END