; ; ELEKEY ; Copyright (c) 2012 by (JM7OLW)Kousuke Matsumoto LIST P=PIC16F84A INCLUDE "P16F84A.INC" __CONFIG _RC_OSC & _WDT_OFF ;file register----------------------------------- tm1 EQU 21 tm2 EQU 22 dot EQU 23 dash EQU 24 ;------------------------------------------------ ORG 0 GOTO start ;------------------------------------------------ start CALL keyoff BSF STATUS,RP0 ;bank1 MOVLW B'11111' ;set all PORTA to INPUT MOVWF TRISA ;85h=TRISA MOVLW B'11101111' ;set RB4 to OUTPUT MOVWF TRISB ;86h=TRISB BCF STATUS,RP0 ;bank0 ;------------------------------------------------ main000 CLRF dot CLRF dash BTFSC PORTB,2 ;if RB2=0(dot=on) then main100 GOTO main200 main100 ;execute DOT CALL keyon CALL wait1 CALL keyoff CALL wait2 BTFSS dash,0 GOTO main000 CLRF dot CLRF dash GOTO main300 main200 BTFSC PORTB,3 ;if RB3=0(dash=on) then main300 GOTO main000 main300 ;execute DASH CALL keyon CALL wait3 CALL keyoff CALL wait4 BTFSS dot,0 GOTO main000 CLRF dot CLRF dash GOTO main100 ;------------------------------------------------ ; sub routines ;------------------------------------------------ keyon BSF PORTB,4 ;set 1(High) to RB4 RETURN ;------------------------------------------------ keyoff BCF PORTB,4 ;set 0(Low) to RB4 RETURN ;------------------------------------------------ wait1 MOVLW 3 CALL wait00 RETURN ;------------------------------------------------ wait2 MOVLW 3 CALL wait00 RETURN ;------------------------------------------------ wait3 MOVLW 9 CALL wait00 RETURN ;------------------------------------------------ wait4 MOVLW 3 CALL wait00 RETURN ;------------------------------------------------ wait00 MOVWF tm1 wait01 BTFSC PORTB,2 ;if RB2=0(dot=on) GOTO wait012 MOVLW 1 MOVWF dot wait012 BTFSC PORTB,3 ;if RB3=0(dash=on) GOTO wait015 MOVLW 1 MOVWF dash wait015 MOVLW 99 MOVWF tm2 wait02 DECFSZ tm2,1 GOTO wait02 DECFSZ tm1,1 GOTO wait01 RETURN END ;end program-------------------------------------