;--------------------------------------- ; 136kHz CW ID generator ; ; program name: CW_VVV.ASM ; ; Version: 0.06 ; ; date: 2009/1/6 ; ; copyright (c) 2009 JJ1SUN ;--------------------------------------- ; version up note ; ;--------------------------------------- ; PROCESSOR 12F675 ; list directive to define processor LIST ; P12F675.INC Standard Header File, Version 1.04 Microchip Technology, Inc. NOLIST ;========================================================================== ; ; Verify Processor ; ;========================================================================== IFNDEF __12F675 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF ;========================================================================== ; ; Register Definitions ; ;========================================================================== W EQU H'0000' F EQU H'0001' ;----- Register Files------------------------------------------------------ INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' GPIO EQU H'0005' PCLATH EQU H'000A' INTCON EQU H'000B' PIR1 EQU H'000C' TMR1L EQU H'000E' TMR1H EQU H'000F' T1CON EQU H'0010' CMCON EQU H'0019' ADRESH EQU H'001E' ADCON0 EQU H'001F' OPTION_REG EQU H'0081' TRISIO EQU H'0085' PIE1 EQU H'008C' PCON EQU H'008E' OSCCAL EQU H'0090' WPU EQU H'0095' IOC EQU H'0096' IOCB EQU H'0096' VRCON EQU H'0099' EEDATA EQU H'009A' EEDAT EQU H'009A' EEADR EQU H'009B' EECON1 EQU H'009C' EECON2 EQU H'009D' ADRESL EQU H'009E' ANSEL EQU H'009F' ;----- STATUS Bits -------------------------------------------------------- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- GPIO Bits -------------------------------------------------------- GP5 EQU H'0005' GPIO5 EQU H'0005' GP4 EQU H'0004' GPIO4 EQU H'0004' GP3 EQU H'0003' GPIO3 EQU H'0003' GP2 EQU H'0002' GPIO2 EQU H'0002' GP1 EQU H'0001' GPIO1 EQU H'0001' GP0 EQU H'0000' GPIO0 EQU H'0000' ;----- INTCON Bits -------------------------------------------------------- GIE EQU H'0007' PEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' GPIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' GPIF EQU H'0000' ;----- PIR1 Bits ---------------------------------------------------------- EEIF EQU H'0007' ADIF EQU H'0006' CMIF EQU H'0003' T1IF EQU H'0000' TMR1IF EQU H'0000' ;----- T1CON Bits --------------------------------------------------------- TMR1GE EQU H'0006' T1CKPS1 EQU H'0005' T1CKPS0 EQU H'0004' T1OSCEN EQU H'0003' NOT_T1SYNC EQU H'0002' TMR1CS EQU H'0001' TMR1ON EQU H'0000' ;----- COMCON Bits -------------------------------------------------------- COUT EQU H'0006' CINV EQU H'0004' CIS EQU H'0003' CM2 EQU H'0002' CM1 EQU H'0001' CM0 EQU H'0000' ;----- ADCON0 Bits -------------------------------------------------------- ADFM EQU H'0007' VCFG EQU H'0006' CHS1 EQU H'0003' CHS0 EQU H'0002' GO EQU H'0001' NOT_DONE EQU H'0001' GO_DONE EQU H'0001' ADON EQU H'0000' ;----- OPTION Bits -------------------------------------------------------- NOT_GPPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' ;----- PIE1 Bits ---------------------------------------------------------- EEIE EQU H'0007' ADIE EQU H'0006' CMIE EQU H'0003' T1IE EQU H'0000' TMR1IE EQU H'0000' ;----- PCON Bits ---------------------------------------------------------- NOT_POR EQU H'0001' NOT_BOD EQU H'0000' ;----- OSCCAL Bits -------------------------------------------------------- CAL5 EQU H'0007' CAL4 EQU H'0006' CAL3 EQU H'0005' CAL2 EQU H'0004' CAL1 EQU H'0003' CAL0 EQU H'0002' ;----- IOCB Bits -------------------------------------------------------- IOCB5 EQU H'0005' IOCB4 EQU H'0004' IOCB3 EQU H'0003' IOCB2 EQU H'0002' IOCB1 EQU H'0001' IOCB0 EQU H'0000' ;----- IOC Bits -------------------------------------------------------- IOC5 EQU H'0005' IOC4 EQU H'0004' IOC3 EQU H'0003' IOC2 EQU H'0002' IOC1 EQU H'0001' IOC0 EQU H'0000' ;----- VRCON Bits --------------------------------------------------------- VREN EQU H'0007' VRR EQU H'0005' VR3 EQU H'0003' VR2 EQU H'0002' VR1 EQU H'0001' VR0 EQU H'0000' ;----- EECON1 ------------------------------------------------------------- WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'0001' RD EQU H'0000' ;----- ANSEL -------------------------------------------------------------- ADCS2 EQU H'0006' ADCS1 EQU H'0005' ADCS0 EQU H'0004' ANS3 EQU H'0003' ANS2 EQU H'0002' ANS1 EQU H'0001' ANS0 EQU H'0000' ;========================================================================== ; ; RAM Definition ; ;========================================================================== __MAXRAM H'FF' __BADRAM H'06'-H'09', H'0D', H'11'-H'18', H'1A'-H'1D', H'60'-H'7F' __BADRAM H'86'-H'89', H'8D', H'8F', H'91'-H'94', H'97'-H'98', H'E0'-H'FF' ;========================================================================== ; ; Configuration Bits ; ;========================================================================== _CPD_ON EQU H'3EFF' _CPD_OFF EQU H'3FFF' _CP_ON EQU H'3F7F' _CP_OFF EQU H'3FFF' _BODEN_ON EQU H'3FFF' _BODEN_OFF EQU H'3FBF' _MCLRE_ON EQU H'3FFF' _MCLRE_OFF EQU H'3FDF' _PWRTE_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FEF' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FF7' _LP_OSC EQU H'3FF8' _XT_OSC EQU H'3FF9' _HS_OSC EQU H'3FFA' _EC_OSC EQU H'3FFB' _INTRC_OSC_NOCLKOUT EQU H'3FFC' _INTRC_OSC_CLKOUT EQU H'3FFD' _EXTRC_OSC_NOCLKOUT EQU H'3FFE' _EXTRC_OSC_CLKOUT EQU H'3FFF' LIST __CONFIG _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _EXTRC_OSC_NOCLKOUT ; ;-------------------------------------- ; work registers ; CNT1 EQU H'20' CNT2 EQU H'21' CNT3 EQU H'22' TEMP1 EQU H'23' ; ;-------------------------------------- ; timing parameter ; SPEED EQU 30 ; CW speed DOTT EQU 1*SPEED ; dot timing DASHT EQU 3*SPEED ; dash timinig DOTSPT EQU 1*SPEED ; dot space timinig CHARSPT EQU 3 ; character space timing WORDSPT EQU 7 ; word space timing ; ;-------------------------------------- ; ORG 0 ; Reset Start ;-------------------------------------- ; main ; MAIN GOTO START ; ; I/O ports initialize ; START CLRF STATUS CLRF GPIO ; init GPIO MOVLW B'00000111' ; comparator off MOVWF CMCON BSF STATUS,RP0 ; File register Bank 1 select MOVLW B'00000000' MOVWF ANSEL ; digital IO MOVLW B'11101000' ; GP0,GP1,GP2,GP4 output, GP3 input MOVWF TRISIO BCF STATUS,RP0 ; select bank 0 BCF INTCON,PEIE ; external interrupt disable ; CLRF GPIO BTFSS GPIO,GP3 GOTO CWID CLOCKLOOP ; total 36 instructions loop MOVLW B'00000011' ; data out MOVWF GPIO NOP NOP NOP NOP NOP NOP NOP MOVLW B'00000110' MOVWF GPIO NOP NOP NOP NOP NOP NOP NOP MOVLW B'00010100' MOVWF GPIO NOP NOP NOP NOP NOP NOP NOP MOVLW B'00010001' MOVWF GPIO NOP NOP NOP NOP NOP GOTO CLOCKLOOP ; ;----------------------------------------- ; CW ID gen. ; ID message is "VVV @" ; CWID CALL DOT ; "V" CALL DOTSP CALL DOT CALL DOTSP CALL DOT CALL DOTSP CALL DASH ; CALL CHARSP ; CALL DOT ; "V" CALL DOTSP CALL DOT CALL DOTSP CALL DOT CALL DOTSP CALL DASH ; CALL CHARSP ; CALL DOT ; "V" CALL DOTSP CALL DOT CALL DOTSP CALL DOT CALL DOTSP CALL DASH ; CALL WORDSP ; short time wait CALL WORDSP CALL WORDSP CALL WORDSP CALL WORDSP ; GOTO CWID ; ;----------------------------------------- ; Dot pulse output routine (use GP0) ; DOT CLRF CNT1 MOVLW DOTT ; dot timing MOVWF CNT2 DOT1 ; total 36 instructions loop MOVLW B'00000001' ; data out MOVWF GPIO NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOVLW B'00000000' ; invert data out MOVWF GPIO DECFSZ CNT1,F GOTO DOT2 GOTO DOT3 DOT2 NOP NOP NOP NOP DOT4 NOP NOP NOP NOP NOP NOP NOP GOTO DOT1 ; DOT3 DECFSZ CNT2,F GOTO DOT4 RETURN ; ;----------------------------------------- ; Dash pulse output routine (use GP0) ; DASH CLRF CNT1 MOVLW DASHT ; dash timing MOVWF CNT2 DASH1 ; total 36 instructions loop MOVLW B'00000001' ; data out MOVWF GPIO NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ; MOVLW B'00000000' ; invert data out MOVWF GPIO DECFSZ CNT1,F GOTO DASH2 GOTO DASH3 DASH2 NOP NOP NOP NOP DASH4 NOP NOP NOP NOP NOP NOP NOP GOTO DASH1 ; DASH3 DECFSZ CNT2,F GOTO DASH4 RETURN ; ;----------------------------------------- ; Dot space timing wait routine ; DOTSP CLRF CNT1 MOVLW DOTSPT ; dash space timing MOVWF CNT2 DOTSP1 ; total 36 instructions loop NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ; NOP NOP DECFSZ CNT1,F GOTO DOTSP2 GOTO DOTSP3 DOTSP2 NOP NOP NOP NOP DOTSP4 NOP NOP NOP NOP NOP NOP NOP GOTO DOTSP1 ; DOTSP3 DECFSZ CNT2,F GOTO DOTSP4 RETURN ; ;--------------------------------------- ; Charactor spase timing wait routine ; CHARSP MOVLW CHARSPT ; dash space timing MOVWF CNT3 CHARSP1 CALL DOTSP DECFSZ CNT3,F GOTO CHARSP1 RETURN ; ;----------------------------------------- ; Word space timing routine ; WORDSP MOVLW WORDSPT ; dash space timing MOVWF CNT3 WORDSP1 CALL DOTSP DECFSZ CNT3,F GOTO WORDSP1 RETURN ; ;------------------------------------------------------ end