;intelligent keyer ; David Robinson WW2R ; april 2 2007 ; does message then 4 cw numbers, each with 3 digits ;4 analog inputs 1,2,17,18 ;input on rb3..... open omits callsign sending, short sends all ;looks for this condition at start of every keying cycle ;outputs on rb0,1,6,7. normal on pins 13 (rb7) and 6 (rb0), inverted on pin 7 (rb1) & pin 12 (rb6) ;for rc osc __FUSES _CP_OFF & _RC_OSC & _WDT_OFF & _PWRTE_ON &_BODEN_ON LIST P=16C711,F=INHX8M include "p16c711.inc" Cwbyte equ H'0C' ;Byte counter Cwbit equ H'0D' ;Bit counter Cw equ H'0E' Units equ H'12' ;units of val Count1 equ H'13' ;delay 1 counter Count2 equ H'14' ;delay 2 counter Count3 equ H'15' ;delay 3 counter Tick1 equ H'16' ;used in delay loop Tick2 equ H'17' ;used in delay loop Tick3 equ H'18' ;used in delay loop TEMP equ H'19' org 0 movlw H'b0' ;was b0 product makes about 12wpm movwf Tick1 MOVLW H'05' ;was 05 MOVWF Tick2 MOVLW H'01' ;dit length MOVWF Tick3 BSF STATUS, RP0 ; Bank1 MOVLW H'08' MOVWF TRISB ; PortB as outputs except, rb3 as input ;InitializeAD, set up the A/D hardware. InitializeAD bsf STATUS,RP0 ;select pg1 movlw B'00000000' ;select ch0-ch3... movwf ADCON1 ;as analog inputs with vdd as vref Again CLRF Cwbyte CLRF Cwbit BTFSS Nocall,3 goto Call_done Mainloop MOVLW H'1' MOVWF PCLATH MOVF Cwbyte,0 CALL Get_Pattern MOVWF Cw MOVLW H'CC' SUBWF Cw, W BTFSC STATUS, Z Out RLF Cw, 1 BTFSS STATUS, C BCF PORTB, 7 BTFSC STATUS, C BSF PORTB, 7 BTFSS STATUS, C BSF PORTB, 6 BTFSC STATUS, C BCF PORTB, 6 BTFSS STATUS, C BSF PORTB, 1 BTFSC STATUS, C BCF PORTB, 1 BTFSS STATUS,C BCF PORTB, 0 BTFSC STATUS, C BSF PORTB, 0 MOVLW H'01' MOVWF Tick3 CALL Delay INCF Cwbit, 1 MOVLW H'08' SUBWF Cwbit, W BTFSS STATUS, Z GOTO Out CLRF Cwbit INCF Cwbyte, 1 goto Mainloop Delay MOVF Tick3,0 ;main delay loop MOVWF Count3 Delay1 MOVF Tick2, 0 MOVWF Count2 Delay2 MOVF Tick1, 0 MOVWF Count1 Delay3 DECFSZ Count1, 1 GOTO Delay3 DECFSZ Count2, 1 GOTO Delay2 DECFSZ Count3,1 GOTO Delay1 RETURN org 220 Ident RETLW 'W' RETLW 'W' RETLW '2' RETLW 'R' RETLW ' ' RETLW '1' RETLW '2' RETLW '/' RETLW '0' RETLW '3' RETLW '/' RETLW '0' RETLW '7' Get_Pattern ADDWF PCL, 1 ;cw goes here