1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

migrating asm code 16C84 to 16C710

Discussion in 'Microcontrollers' started by Brute, Oct 31, 2012.

  1. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Got this after compiling:

    Error[152] E:\CTCSS17C710\CTCSSC710.ASM 34 : Executable code and data must be defined in an appropriate section
    Error[113] E:\CTCSS17C710\CTCSSC710.ASM 42 : Symbol not previously defined (ADCON1)
     
  2. Ian Rogers

    Ian Rogers Super Moderator Most Helpful Member

    Joined:
    Mar 28, 2011
    Messages:
    9,310
    Likes:
    914
    Location:
    Rochdale UK
    Code (text):
       
    TITLE   "CTCSS Encoder v1.4 for 16c84 Tony Hunt VK5AH"
    ; 14-4-99
    ;   Assemble with MPASM
    ;   See below for wiring details
    ;
            LIST            P=16C710
            __CONFIG        3FF9H   ;XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP.
            __IDLOCS        1234
        ERRORLEVEL      -302
    ;
    CNT1    EQU 0CH ;PRESCALLER COUNTER REG 1
    CNT2    EQU 0DH ;PRESCALLER COUNTER REG 2
    CNT3    EQU 0EH ;PRESCALLER COUNTER REG 3
    TONREG  EQU 0FH ;REGISTER FOR TONE NUMBER
    PRES1   EQU 10H ;PRESCALLER STORE 1
    PRES2   EQU 11H ;PRESCALLER STORE 2
    PRES3   EQU 12H ;PRESCALLER STORE 3
    PORTA   EQU 5
    PORTB   EQU 6
    TRISA   EQU 85H
    TRISB   EQU 86H
    ADCON1  EQU 88H
    OPTREG  EQU 81H
    PC  EQU 2
    PULLUP  EQU 7
    STATUS  EQU 3
    INTCON  EQU 0BH
    GIE EQU 7
    RBIE    EQU 3
    RBIF    EQU 0
    RP0 EQU 5
    OUT EQU 2
    PTT EQU 7
    ;
        GOTO    START
        ORG 00C8
    START   BSF STATUS,RP0  ;SELECT REG BANK 1
        BSF TRISB,PTT   ;SETUP RB7 AS INPUT FOR PTT
        BCF TRISA,OUT   ;SETUP RA2 AS OUTPUT FOR TONE
        BCF OPTREG,PULLUP   ;SET PULLUP RESISTORS ON PORTB
        MOVLW   0xFF        ; SET PORTB AS I/Ps
        MOVWF   TRISB       ; RB0-RB5 FOR SWITCH INPUTS
        CLRF    ADCON1
    ;

        BCF STATUS,RP0  ;SELECT REG BANK 0
        BCF INTCON,GIE  ;DISABLE GIE INTERUPTS
        BSF INTCON,RBIE ;ENABLE PORT B CHANGE INTERUPT
        MOVF    TRISB,W     ;READ DIP SWITCHES INTO W
        MOVWF   TONREG      ;STORE IN 0F REG
        BCF TONREG,6    ; CLEAR BITS 6&7 AS
        BCF TONREG,7    ; THEY ARE IRRELAVANTS
        MOVF    TONREG,W    ;RE-STORE INTO W
        ADDWF   TONREG,F    ; MULTIPLY BY 3
        ADDWF   TONREG,F    ; FOR TONE TABLE OFFSET
    ;
        MOVF    TONREG,W    ;RELOAD TO W FOR OFFSET
        CALL    TONTBL      ;GOTO TONE LOOKUP TABLE
        MOVWF   PRES1       ;STORE FIRST VALUE FROM TABLE
    ;
        INCF    TONREG,F    ;INCREMENT FOR NEXT TABLE VALUE
        MOVF    TONREG,W    ;RELOAD W FOR OFFSET
        CALL    TONTBL      ;GOTO TONE LOOKUP TABLE
        MOVWF   PRES2       ;STORE SECOND VALUE FROM TABLE
    ;
        INCF    TONREG,F    ;INCREMENT FOR NEXT TABLE VALUE
        MOVF    TONREG,W    ;RELOAD W FOR OFFSET
        CALL    TONTBL      ;GOTO TONE LOOKUP TABLE
        MOVWF   PRES3       ;STORE THIRD VALUE FROM TABLE
    ;
    ;
    RELOAD
        MOVF    PRES1,W     ;LOAD W WITH PRESET FOR 1
        MOVWF   CNT1        ;PRELOAD PRESCALLER 1
        MOVF    PRES2,W     ;LOAD W WITH PRESET FOR 3
        MOVWF   CNT3        ;PRELOAD PRESCALLER 3
        MOVF    PRES3,W     ;LOAD W WITH PRESET FOR 2 READY
    PTTCHK
        BTFSC   PORTB,PTT   ;TEST PTT LINE
        GOTO    WAIT        ;SLEEP TILL LOW
        CALL    CHORUS      ;DO DIVIDER/PRESCALLER ROUTINE
    ;
    OUTPUT
        BTFSS   PORTA,OUT   ;TEST O/P HI OR LO AT PRESENT
        GOTO    HI      ;IF LO GO SET HI
        GOTO    LO      ;IF HI GO SET LO
    ;
    HI
        NOP         ;BALANCE OUT CYCLE TIME MARK&SPACE
        BSF PORTA,OUT   ;MAKE O/P HI
        GOTO    RELOAD      ;RETURN TO START OF CYCLE
    ;
    LO
        BCF PORTA,OUT   ;MAKE O/P LO
        GOTO    RELOAD      ;RETURN TO START OF CYCLE
    ;
    CHORUS
    PRE1   
        DECFSZ  CNT1,F      ;DECREMENT PRESCALLER 1
        GOTO    PRE2
        GOTO    FINE        ;CALL FINE ADJUST SUBROUTINE
    PRE2    MOVWF   CNT2        ;RELOAD PRESCALLER 2
    ;
    PREE    DECFSZ  CNT2,F      ;DECREMENT PRESCALLER 2
        GOTO    PREE        ;GO BACK AND DECREMENT PRE2 TILL 00
    ;
        GOTO    PRE1        ;GO BACK AND DECREMENT PRE1 TILL 00
    ;
    FINE    DECFSZ  CNT3,F      ;DECREMENT PRESCALLER 3
        GOTO    FINE        ;GO BACK AND DECREMENT PRE3 TILL 00
        RETURN          ;RETURN TO CHANGE O/P AND CHECK PTT ETC
    ;
    WAIT    
        BCF INTCON,RBIF ;CLEAR PORT B CHANGE INT FLAG
        SLEEP           ;SLEEP AND WAIT FOR PTT
        NOP
        BCF INTCON,GIE  ;DISABLE GLOBAL INTERUPTS AGAIN
        GOTO    PTTCHK      ;CHECK IF PTT PASSES TEST
    ;
    ;
    ;
    ;TONES TABLE AT 0008H
        ORG 0007H
    TONTBL
        ADDWF   PC,F        ; W+PC ->PC, JUMP DOWN TABLE
    ;
    ;
    ;                              16c84 PIN
    ;                                                    11  10  9   8   7   6
    ;                 TONE  FREQ        RB5 RB4 RB3 RB2 RB1 RB0
    ;
        DT  02,01,0x9D  ; 000   1Khz TEST    0   0   0   0   0   0
        DT  86,82,10    ; 001   67.0         0   0   0   0   0   1
        DT  81,85,10    ; 002   69.4 *       0   0   0   0   1   0
        DT  84,80,0x0F  ; 003   71.9         0   0   0   0   1   1
        DT  7F,85,0x0F  ; 004   74.4         0   0   0   1   0   0
        DT  7B,7C,0x0F  ; 005   77.0         0   0   0   1   0   1
        DT  76,86,0x0F  ; 006   79.7         0   0   0   1   1   0
        DT  72,82,0x0F  ; 007   82.5         0   0   0   1   1   1
        DT  74,8F,0x0E  ; 008   85.4         0   0   1   0   0   0
        DT  63,91,10    ; 009   88.5         0   0   1   0   0   1
        DT  5F,9A,10    ; 010   91.5         0   0   1   0   1   0
        DT  5B,47,11    ; 011   94.8         0   0   1   0   1   1
        DT  55,88,11    ; 012   97.4         0   0   1   1   0   0
        DT  56,49,11    ; 013  100.0         0   0   1   1   0   1
        DT  09,6E,0xB9  ; 014  103.5         0   0   1   1   1   0
        DT  08,81,0xC9  ; 015  107.2         0   0   1   1   1   1
        DT  0A,71,98    ; 016  110.9         0   1   0   0   0   0
        DT  0B,76,83    ; 017  114.8         0   1   0   0   0   1
        DT  0A,0xCA,83  ; 018  118.8         0   1   0   0   1   0
        DT  0A,9A,83    ; 019  123.0         0   1   0   0   1   1
        DT  09,0xF1,83  ; 020  127.3         0   1   0   1   0   0
        DT  08,93,9D    ; 021  131.8         0   1   0   1   0   1
        DT  07,94,0xB0  ; 022  136.5         0   1   0   1   1   0
        DT  07,7C,0xAD  ; 023  141.3         0   1   0   1   1   1
        DT  07,85,0xA5  ; 024  146.2         0   1   1   0   0   0
        DT  08,7B,89    ; 025  151.4         0   1   1   0   0   1
        DT  08,80,83    ; 026  156.7         0   1   1   0   1   0
        DT  07,0xA2,90  ; 027  159.8 *       0   1   1   0   1   1
        DT  08,47,86    ; 028  162.2         0   1   1   1   0   0
        DT  07,60,95    ; 029  165.5 *       0   1   1   1   0   1
        DT  08,86,78    ; 030  167.9         0   1   1   1   1   0
        DT  07,92,87    ; 031  171.3 *       0   1   1   1   1   1
        DT  07,90,85    ; 032  173.8         1   0   0   0   0   0
        DT  07,7D,85    ; 033  177.3 *       1   0   0   0   0   1
        DT  09,5A,66    ; 034  179.9         1   0   0   0   1   0
        DT  09,48,66    ; 035  183.5 *       1   0   0   0   1   1
        DT  07,9E,78    ; 036  186.2         1   0   0   1   0   0
        DT  08,0xBB,60  ; 037  189.9 *       1   0   0   1   0   1
        DT  09,4C,60    ; 038  192.8         1   0   0   1   1   0
        DT  08,9D,60    ; 039  196.6 *       1   0   0   1   1   1
        DT  09,2F,60    ; 040  199.5 *       1   0   1   0   0   0
        DT  07,82,70    ; 041  203.5         1   0   1   0   0   1
        DT  07,76,70    ; 042  206.5 *       1   0   1   0   1   0
        DT  07,66,70    ; 043  210.7         1   0   1   0   1   1
        DT  07,6F,6A    ; 044  218.1         1   0   1   1   0   0
        DT  06,0xA3,70  ; 045  225.7         1   0   1   1   0   1
        DT  06,98,70    ; 046  229.1 *       1   0   1   1   1   0
        DT  06,8A,70    ; 047  233.6         1   0   1   1   1   1
        DT  06,72,70    ; 048  241.8         1   1   0   0   0   0
        DT  04,0xC3,99  ; 049  250.3         1   1   0   0   0   1
        DT  04,0xB9,99  ; 050  254.1 *       1   1   0   0   1   0
        DT  05,1C,99    ; 051  255   *       1   1   0   0   1   1
        DT  03,15,20    ; 052  1750 Eu Tone  1   1   0   1   0   0
        DT  05,0F,10    ; 053  1800 Eu Tone  1   1   0   1   0   1
        DT  01,84,9D    ; 054  1200 Packet   1   1   0   1   1   0
        DT  02,13,30    ; 055  2200 Packet   1   1   0   1   1   1
        DT  03,26,50    ; 056  800   *       1   1   1   0   0   0
        DT  03,0F,50    ; 057  900   *       1   1   1   0   0   1
        DT  02,3F,50    ; 058  1100  *       1   1   1   0   1   0
        DT  03,36,20    ; 059  1300  *       1   1   1   0   1   1
        DT  01,68,20    ; 060  1500  *       1   1   1   1   0   0
        DT  03,09,20    ; 061  2000  *       1   1   1   1   0   1
        DT  02,1A,20    ; 062  2500  *       1   1   1   1   1   0
        DT  02,07,20    ; 063  3500  *       1   1   1   1   1   1
    ;
    ;                   * Indicates non EIA standard tone
    ;
    ;   ORG 2100H
    ;   DE "TonyHunt  VK5AH CTCSSENC v 1.4  "
          END


            All CTCSS tones are within EIA standard of .08% .
            Use a 4Mhz crystal with 2x18pF capacitors.
            PTT line is active LOW. PTT is RB7 Pin 13.
            OUTPUT tone is on RA2 Pin1 ,see Low pass filter diag.
            Lines RB0-RB5 can be fitted with DIP switches to set
            tone frequencies as per table above. A 1 on the table
            indicates the RB pin is logic HI . All RB port pins have
            been programmed with internal pullup resistors and will
            float HI if left open. The binary inputs are read only on
            power up and not each time the PTT is keyed.

            For CTCSS tones use a Low pass filter as shown here as the
            output waveform is square. RO is an padding resistor to
            allow for level adjustment typically 20k.


            RA2--------2k2----------RO----Output
            Pin1          |
                      |
                      1uF
                      |
                      GND
     
    It assembles for me...
     
  3. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Thanks but I'm still getting an error in line 35. It says: Executable code and data must be defined in an appropriate section and this holds it from compiling.

    Do you compile with MPASM? Wich version?
     
  4. dave

    Dave New Member

    Joined:
    Jan 12, 1997
    Messages:
    -
    Likes:
    0


     
  5. Ian Rogers

    Ian Rogers Super Moderator Most Helpful Member

    Joined:
    Mar 28, 2011
    Messages:
    9,310
    Likes:
    914
    Location:
    Rochdale UK

    When it asked you for "Absolute or relocatable code" which did you pick?
     
  6. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Upgraded to the MPASM version to v5.47 and now it compiles but does not ask for what you mention. I'm going to try in a new processor tonight! Thanks for all your help!
     
  7. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    BOR on or off?
     
  8. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Got oscillator running but it gives digital out on pin 1 like 5V DC, no frequency on pin 1.
     
  9. Ian Rogers

    Ian Rogers Super Moderator Most Helpful Member

    Joined:
    Mar 28, 2011
    Messages:
    9,310
    Likes:
    914
    Location:
    Rochdale UK
    BOR Brown out reset... Only needs this if your power supply has a tendency to drift..

    Why dont you download MPLAB and assemble in the IDE! Then you can simulate it before programming the chip...
     
  10. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    I'll do that, thanks. Let you know.
     
  11. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Just assembled and simulated it in MPLAB v8.8 and it assembles without a spot, just like a 16F84 setting and does the same thing but I can't see what happens on pin 1, what to do?
     
  12. Ian Rogers

    Ian Rogers Super Moderator Most Helpful Member

    Joined:
    Mar 28, 2011
    Messages:
    9,310
    Likes:
    914
    Location:
    Rochdale UK
    Ive just been playing with your program in MPLAB.. As there is mostly delays it spends too much of its time in a delay loop..

    When I get a bit of time I'll get it on ISIS and simulate it properly... I'll let you know how I get on....
     
  13. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Thanks for your help, really appreciate that!

    What I cannot understand is why the C84 works properly with the program and the C710 does not. Timing?
     
  14. be80be

    be80be Well-Known Member

    Joined:
    Aug 23, 2008
    Messages:
    4,869
    Likes:
    144
    Location:
    morristown,tn
    Not to sound Funny here but how many of them 16C710 did you have because if you tested the code on them you can only program one time. And if it's UV type CERDIP packaged It's not a good idea to use that but for code testing.
     
  15. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    I have some......like 40+ or so. Got them from a friend who said they were too antique for him but I want to make some people happy in our club with a ctcss encoder to reach some repeaters.

    Tested it already on F84 and it works fine with an extra lowpass filter.
     
  16. atferrari

    atferrari Well-Known Member

    Joined:
    Oct 8, 2003
    Messages:
    2,816
    Likes:
    121
    Location:
    Buenos Aires - Argentina
    Are you sure about the version?

    Curent one is 8.88
     
  17. Ian Rogers

    Ian Rogers Super Moderator Most Helpful Member

    Joined:
    Mar 28, 2011
    Messages:
    9,310
    Likes:
    914
    Location:
    Rochdale UK
    Are you sure about him being sure... MPASM = v5.47.... Whereas MPLAB = v8.88..


    @Brute... It simulates fine....
     
    Last edited: Nov 6, 2012
  18. atferrari

    atferrari Well-Known Member

    Joined:
    Oct 8, 2003
    Messages:
    2,816
    Likes:
    121
    Location:
    Buenos Aires - Argentina
    Oh, yes. Even if he had it wrong, I am even wronger! :( Sorry for the confusion!

    Had I to do this I would RTFM first of all.

    And then do a complete comparison of the CONFIG procedure.

    And then a list of the registers involved noting the bank where they are.

    And then a simulation just skipping the loops for brevity and sanity.

    It is not brain surgery but it takes a bit to make useless another C710. How many by now?

    Oh yes God. Thanks for those flash micros and the convivial environment of the 18F family.
     
  19. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    MPLAB indeed v8.88 MPASM is a module from MPLAB. I used MPLAB V8.88 also.

    Just spoiled two of them.
     
  20. Brute

    Brute New Member

    Joined:
    Oct 31, 2012
    Messages:
    39
    Likes:
    0
    Hi Ian, any news?
     
  21. Ian Rogers

    Ian Rogers Super Moderator Most Helpful Member

    Joined:
    Mar 28, 2011
    Messages:
    9,310
    Likes:
    914
    Location:
    Rochdale UK
    post #36

    I can't check it on a real chip as I only have flash devices... a button press on RB7 sends a tone on RA2. I guess that's what its supposed to do.

    The other thing is... Simulation doesn't simulate the oscillator... So if here is where your problem is... I can't help..
     
    Last edited: Nov 8, 2012

Share This Page