Title: Modify source code PIC16C84 to PIC16F84A
Post by: Korvo on January 01, 2010, 02:12:53 14:12
Hi, i´m newby on programming pic´s, and i have a question: It is possible modify the source code of pic16C84 to run on pic16F84A? I think the only thing to modify on the code is the first´s lines of the progam Here is the first line of the program of the pic16C84:
LIST P=16C84 __CONFIG 3FF9H ;XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP. __IDLOCS 1234 ERRORLEVEL -302
Change the device type is obvious, but is it to modify more anything?
Thanks
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: cncbasher on January 01, 2010, 02:36:17 14:36
yes chances are thats all you need to do , then recompile but without the full code , cannot be certian , as both chips you have selected are in the same base code , then you should be ok as they are also pin compatable i believe , if not then you may need to change pin assignments etc
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: oldvan on January 01, 2010, 07:27:29 19:27
I'd go one up on that and start my work with a 16F88 instead. Pin compatible, adds internal oscillator and some peripherals. Post the source code and we can give it a once over. The CODE tags are important when posting a section of code, they make it look like this: LIST P=16C84 __CONFIG 3FF9H ; XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP. __IDLOCS 1234 ; Fill the ID bits with 1234 ERRORLEVEL -302 ; Remove annoying warnings about using proper bank
Well, I added the new comments myself. ;D
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: Korvo on January 02, 2010, 02:58:46 02:58
Thanks for the reply people. I annexed the file of the source code. If anyone can help i will apreciate very much. Thanks.
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: oldvan on January 02, 2010, 03:40:48 03:40
I did nothing except change the "16c84" to "16f84a" and it compiles fine. TITLE "CTCSS Encoder v1.4 for 16F84A " ; Assemble with MPASM ; LIST P=16F84A __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 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 ;
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 "CTCSSENC v 1.4 " END
Have you built a circuit to test this on yet?
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: Korvo on January 07, 2010, 09:48:08 21:48
Yes, I have build the circuit, but don´t work, a friend of mine tell me that this code work on PIC16C84 and PIC16F84, but don´t work in PIC16F84A. What is the diference in the code? Can I upgrade this code to work on 16F84A or similar microcontroller? Best regards and thanks again
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: oldvan on January 08, 2010, 03:39:46 03:39
Migration information for 16F84 --> 16F84A is here: http://ww1.microchip.com/downloads/en/DeviceDoc/30072b.pdf The PIC16F84A can use crystals up to 20 MHz, resulting in double the execution speed. No changes to the code, other than for timing concerns, are required. No changes to the configuration word are required. The crystal loading capacitors may need to be adjusted for the higher speed crystal, but verifying oscillator operation at the same speed is already recommended for the transition from the PIC16F84 to the PIC16F84A. The 16F84 is functionally the same as 16C84 except flash memory instead of EPROM. The 16F84A is functionally the same as 16F84 except is capable of running at 20 MHz instead of 10 MHz. The code should work unmodified, so if the code works on 16C84 then there is likely a different problem. Please post schematic of the test circuit so I can duplicate it and double-check for you. I'd recommend you move to a 16F88 but if you have 16F84A in hand then may as well get use out of it.
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: Top on January 08, 2010, 05:24:36 05:24
There is another difference between 16C84 and 16F84; the Power-up Timer Enable (PWRTE) bit is reversed. This is correct for a 16C84: __CONFIG 3FF9H ;XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP. But for a 16F84 it should be: __CONFIG 3FF1H ;XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP.
Title: Re: Modify source code PIC16C84 to PIC16F84A
Post by: Rute on January 15, 2010, 04:17:12 16:17
Yes, Top I Right, You can use working HEX file for 16f84 to burn 16f84A, but have to set PWRTE to 1 if is 0 or Yes if is NO only!
|