Continue to Site

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.

  • 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.

Code Convertion 12C508 to 16F84

Status
Not open for further replies.

darryl_co

New Member
Hi,
Is there any software that can convert the code written for PIC12C508 to work with PIC16F84 ? If not
Please help me to convert the the code to PIC16F84 compatible.Thanks in advance.
 

Attachments

  • PIC12C508.asm
    4.4 KB · Views: 174
  • PIC12C508.HEX
    637 bytes · Views: 127
Last edited:
You can try this I changed to PORTA
Code:
	list      p=16F84             ; list directive to define processor
	#include <p16F84.inc>         ; processor specific variable definitions

	__CONFIG   _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC
;	TITLE 'SWEEP OSCILLATOR'

;	ASSEMBLER: MPASM v01.50
;	DEVELOPED USING MPLAB FOR WINDOWS/16 3.22.02
;
;
;	SET CHIP CONFIGURATION TO: 
;		MCLR - ENABLE,  CP - OFF,  WATCHDOG - OFF,  INT. RC OSC		
;
;	
;
 ;       #DEFINE INDF    0000                    ;
;        #DEFINE TMR0    0001                    ;
;        #DEFINE PCL     0002                    ;
;        #DEFINE STATUS  0003                    ;
;        #DEFINE FSR     0004                    ;   
;		#DEFINE PORTA   0005                    ;
;
        #DEFINE TABPNT  0xC0                    ;FREQUENCY TABLE POINTER
        #DEFINE FCOUNT  0xC1                    ;FREQUENCY COUNTING REGISTER
;
;       DEFINE GPIO BITS
;       #DEFINE		    0006,0                 
        #DEFINE OUTPUT  0006,1                  ;OUTPUT SIGNAL
;       #DEFINE         0006,2                 
;       #DEFINE         0006,4                 
;     	#DEFINE         0006,5             
;
;       DEFINE STATUS REGISTER
        #DEFINE CARRY   0000                  ;CARRY FLAG
        #DEFINE DCARRY  0001                  ;DECIMAL CARRY FLAG
        #DEFINE ZERO    0002                  ;ZERO FLAG
        #DEFINE RPAGE   0005                  ;REGISTER PAGE SELECT
;
	ORG	0X00
;	MOVWF	OSCCAL			;LOAD CALIBRATION VALUE FOR INTERNAL OSC.
	GOTO	START			;AFTER POWER ON, OR RESET GO TO 'START'
;
	ORG	0008				;BEGIN CODE AT 0008
;
;Clear registers 10 - 20:
;
START	MOVLW	0x10		; INITIALISE FSR
	MOVWF	FSR		; 
NXREG	CLRF	INDF 		; CLEAR INDICATED REGISTER
	INCF	FSR,1 			; STEP ON TO NEXT
	BTFSC	FSR,4			; CHECK TO SEE IF COMPLETE (HEX 20 REACHED)
	GOTO	NXREG			; LOOP UNTIL ALL REGISTERS ARE CLEAR
;
;Set up i/o ports
;
	MOVLW	0x0				; SET UP INITIAL VALUES TO 0 IN W
	MOVWF	PORTA			; WRITE TO GPIO PORT LATCHES 
	MOVLW	B'00111101'		; SET GPIO 1 TO OUTPUT - OTHERS TO INPUT
	MOVWF	TRISA			; WRITE TO 'TRIS' REGISTER 
;
;Set up OPTION register contents
;
	MOVLW	B'11000111'		; SET UP OPTION BITS - 1/256 PRESCALER TO TIMER 
	MOVWF   OPTION_REG					; TRANSFER TO OPTION REGISTER
;
;Initialise timer and frequency table pointer
;
MAIN	MOVLW	0X01		;LOAD START VALUE FOR STEP TIMER	
	MOVWF	TMR0			;
	MOVLW	0X23			;INITIALISE FREQUENCY TABLE POINTER
	MOVWF	TABPNT			;
;
;
;****CODE FROM 'FREQ' DOWN TO END OF 'OFLOOP' IS CRITICAL FOR OUTPUT FREQUENCIES
;****DO NOT ALTER NUMBER OF MACHINE CYCLES
;
FREQ	CALL	TABLE		;GET VALUE FOR FREQUENCY COUNTER
	MOVWF	FCOUNT			;LOAD FREQUENCY COUNTER
	BSF	OUTPUT				;TURN ON OUTPUT
;
FTIMH	MOVF	TMR0,0		;TEST FOR TIME UP			
	BTFSC	STATUS,Z			;CONTINUE UNTIL TIMER IS ZERO		
	GOTO	NXTF			;TIMER IS ZERO SO JUMP TO END ROUTINE
	DECFSZ	FCOUNT,1		;DECREMENT FREQUENCY COUNTER 
	GOTO	FTIMH			;LOOP UNTIL ZERO

	CALL	TABLE			;GET VALUE FOR FREQUENCY COUNTER
	MOVWF	FCOUNT			;LOAD FREQUENCY COUNTER	
	NOP						;NOPS ADDED TO MATCH ON AND OFF TIME
	NOP
	BCF	OUTPUT
;
FTIML	MOVF	TMR0,0		;TEST FOR TIME UP			
	BTFSC	STATUS,Z			;CONTINUE UNTIL TIMER IS ZERO		
	GOTO	NXTF			;TIMER IS ZERO SO JUMP TO END ROUTINE
	DECFSZ	FCOUNT,1		;DECREMENT FREQUENCY COUNTER 
	GOTO	FTIML			;LOOP UNTIL ZERO

	GOTO	FREQ			;CONTINUE UNTIL TIMER IS ZERO	

NXTF	MOVLW	0X01		;RELOAD LOAD START VALUE FOR STEP TIMER	
	MOVWF	TMR0			;
	DECF	TABPNT,1		;STEP ONE DOWN IN TABLE
	BTFSS	STATUS,Z
	GOTO	FREQ			;NOT ZERO SO DO NEXT FREQUENCY

	BCF	OUTPUT				;END OF TABLE SO TURN OFF FOR ONE STEP 
FLOOP	MOVF	TMR0,0		;TEST TIMER FOR TIME UP			
	BTFSS	STATUS,Z			;TIMER IS ZERO SO JUMP TO END ROUTINE	
	GOTO	FLOOP			;NOT ZERO SO LOOP UNTIL TIME IS UP
;
	GOTO	MAIN			;SEQUENCE ENDED SO BEGIN AGAIN

;
TABLE	ORG	0080
	MOVF	TABPNT,0		;LOAD TABLE POINTER INTO W
	ADDWF	PCL,1			;ADD W TO CURRENT LOCATION
	RETLW	0X38			;RETURN WITH LOCATION CONTENTS IN W
	RETLW	0X35
	RETLW	0X32
	RETLW	0X2F
	RETLW	0X2C
	RETLW	0X29
	RETLW	0X27
	RETLW	0X24
	RETLW	0X22
	RETLW	0X20
	RETLW	0X1E
	RETLW	0X1C
	RETLW	0X1B
	RETLW	0X1A
	RETLW	0X19
	RETLW	0X18	
	RETLW	0X17
	RETLW	0X16
	RETLW	0X15
	RETLW	0X14
	RETLW	0X13
	RETLW	0X12
	RETLW	0X11
	RETLW	0X10
	RETLW	0X0F
	RETLW	0X0E
	RETLW	0X0D
	RETLW	0X0C
	RETLW	0X0B
	RETLW	0X0A
	RETLW	0X09
  	RETLW	0X08
	RETLW	0X07
	RETLW	0X06
	RETLW	0X05
	RETLW	0X04
;
	ORG	0100
	DATA	'M'
	DATA	'A'
	DATA	'G'
	DATA	'E'
	DATA	'N'
	DATA	'T'
	DATA	'A'
;
	DATA	'E'
	DATA	'L'
	DATA	'E'
	DATA	'C'
	DATA	'T'
	DATA	'R'
	DATA	'O'
	DATA	'N'
	DATA	'I'
	DATA	'C'
	DATA	'S'
;
;
;
	END
 
Last edited:
I'm sure it didn't I just changed it for the 16f84 I didn't test it there was maybe some things that still needed to be changed

Thats where you come back into the picture and tell what it was doing, wrong and you and I and the rest of the people who may want to help will try to fix it.

Like tell what it didn't do and you think it should of done would help.

The code may not be to bad off the wdt is set and is timing out

I missed that try this hex
 

Attachments

  • PIC12C508.HEX
    633 bytes · Views: 120
Last edited:
I happen to to have both chips and that code is so old it wouldn't build for the 12f508 because of the defines I fixed that and tried it out.

It's not a real good SWEEP OSCILLATOR
 
be80be-when I said that the code did not work is that I did not get any output at any of the port a or port b pins.After a lot searching I bumped at a shop keeping 12F508, but as u say "that code is so old it wouldn't build for the 12f508 because of the defines I fixed that and tried it out. " Can you send me the fixed code? Also what changes do I make if I need output on GP0 along with GP1 but anti-phase of GP1?
 
Here I think this is what your after

Code:
        LIST    P=12F508, R=HEX	
    #include <p12F508.inc>        ; processor specific variable definitions
    __CONFIG   _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC
;	TITLE 'SWEEP OSCILLATOR'

;	ASSEMBLER: MPASM v01.50
;	DEVELOPED USING MPLAB FOR WINDOWS/16 3.22.02
;
;
;	SET CHIP CONFIGURATION TO: 
;		MCLR - ENABLE,  CP - OFF,  WATCHDOG - OFF,  INT. RC OSC		
;
;	
;
;        #DEFINE INDF    0000                    ;
;        #DEFINE TMR0    0001                    ;
;        #DEFINE PCL     0002                    ;
;        #DEFINE STATUS  0003                    ;
;        #DEFINE FSR     0004                    ;
 ;       #DEFINE OSCCAL  0005                    ;     
;		#DEFINE GPIO    0006                    ;
;
        #DEFINE TABPNT  0007                    ;FREQUENCY TABLE POINTER
        #DEFINE FCOUNT  0008                    ;FREQUENCY COUNTING REGISTER
;
;       DEFINE GPIO BITS
;       #DEFINE		    0006,0                 
        #DEFINE OUTPUT  GPIO                  ;OUTPUT SIGNAL
;       #DEFINE         0006,2                 
;       #DEFINE         0006,4                 
;     	#DEFINE         0006,5             
;
;       DEFINE STATUS REGISTER
        #DEFINE CARRY   0003,0                  ;CARRY FLAG
        #DEFINE DCARRY  0003,1                  ;DECIMAL CARRY FLAG
        #DEFINE ZERO    0003,2                  ;ZERO FLAG
        #DEFINE RPAGE   0003,5                  ;REGISTER PAGE SELECT
;
	ORG	0X00
	MOVWF	OSCCAL			;LOAD CALIBRATION VALUE FOR INTERNAL OSC.
	GOTO	START			;AFTER POWER ON, OR RESET GO TO 'START'
;
	ORG	0008				;BEGIN CODE AT 0008
;
;Clear registers 10 - 20:
;
START	MOVLW	0x10		; INITIALISE FSR
	MOVWF	FSR		; 
NXREG	CLRF	INDF 		; CLEAR INDICATED REGISTER
	INCF	FSR,1 			; STEP ON TO NEXT
	BTFSC	FSR,4			; CHECK TO SEE IF COMPLETE (HEX 20 REACHED)
	GOTO	NXREG			; LOOP UNTIL ALL REGISTERS ARE CLEAR
;
;Set up i/o ports
;
	MOVLW	0x0				; SET UP INITIAL VALUES TO 0 IN W
	MOVWF	GPIO			; WRITE TO GPIO PORT LATCHES 
	MOVLW	B'00000000'		; SET GPIO 1 TO OUTPUT - OTHERS TO INPUT
	TRIS	GPIO			; WRITE TO 'TRIS' REGISTER 
;
;Set up OPTION register contents
;
	MOVLW	B'11000111'		; SET UP OPTION BITS - 1/256 PRESCALER TO TIMER 
	OPTION					; TRANSFER TO OPTION REGISTER
;
;Initialise timer and frequency table pointer
;
MAIN	MOVLW	0X01		;LOAD START VALUE FOR STEP TIMER	
	MOVWF	TMR0			;
	MOVLW	0X23			;INITIALISE FREQUENCY TABLE POINTER
	MOVWF	TABPNT			;
;
;
;****CODE FROM 'FREQ' DOWN TO END OF 'OFLOOP' IS CRITICAL FOR OUTPUT FREQUENCIES
;****DO NOT ALTER NUMBER OF MACHINE CYCLES
;
FREQ	CALL	TABLE		;GET VALUE FOR FREQUENCY COUNTER
	MOVWF	FCOUNT			;LOAD FREQUENCY COUNTER
	MOVLW   b'01010101'
	MOVWF	OUTPUT				;TURN ON OUTPUT
;
FTIMH	MOVF	TMR0,0		;TEST FOR TIME UP			
	BTFSC	ZERO			;CONTINUE UNTIL TIMER IS ZERO		
	GOTO	NXTF			;TIMER IS ZERO SO JUMP TO END ROUTINE
	DECFSZ	FCOUNT,1		;DECREMENT FREQUENCY COUNTER 
	GOTO	FTIMH			;LOOP UNTIL ZERO

	CALL	TABLE			;GET VALUE FOR FREQUENCY COUNTER
	MOVWF	FCOUNT			;LOAD FREQUENCY COUNTER	
	NOP						;NOPS ADDED TO MATCH ON AND OFF TIME
	MOVLW   b'10101010'
	MOVWF	OUTPUT	
;
FTIML	MOVF	TMR0,0		;TEST FOR TIME UP			
	BTFSC	ZERO			;CONTINUE UNTIL TIMER IS ZERO		
	GOTO	NXTF			;TIMER IS ZERO SO JUMP TO END ROUTINE
	DECFSZ	FCOUNT,1		;DECREMENT FREQUENCY COUNTER 
	GOTO	FTIML			;LOOP UNTIL ZERO

	GOTO	FREQ			;CONTINUE UNTIL TIMER IS ZERO	

NXTF	MOVLW	0X01		;RELOAD LOAD START VALUE FOR STEP TIMER	
	MOVWF	TMR0			;
	DECF	TABPNT,1		;STEP ONE DOWN IN TABLE
	BTFSS	ZERO
	GOTO	FREQ			;NOT ZERO SO DO NEXT FREQUENCY

	MOVLW   b'01010101'
	MOVWF	OUTPUT
FLOOP	MOVF	TMR0,0		;TEST TIMER FOR TIME UP			
	BTFSS	ZERO			;TIMER IS ZERO SO JUMP TO END ROUTINE	
	GOTO	FLOOP			;NOT ZERO SO LOOP UNTIL TIME IS UP
;
	GOTO	MAIN			;SEQUENCE ENDED SO BEGIN AGAIN

;
TABLE	ORG	0080
	MOVF	TABPNT,0		;LOAD TABLE POINTER INTO W
	ADDWF	PCL,1			;ADD W TO CURRENT LOCATION
	RETLW	0X38			;RETURN WITH LOCATION CONTENTS IN W
	RETLW	0X35
	RETLW	0X32
	RETLW	0X2F
	RETLW	0X2C
	RETLW	0X29
	RETLW	0X27
	RETLW	0X24
	RETLW	0X22
	RETLW	0X20
	RETLW	0X1E
	RETLW	0X1C
	RETLW	0X1B
	RETLW	0X1A
	RETLW	0X19
	RETLW	0X18	
	RETLW	0X17
	RETLW	0X16
	RETLW	0X15
	RETLW	0X14
	RETLW	0X13
	RETLW	0X12
	RETLW	0X11
	RETLW	0X10
	RETLW	0X0F
	RETLW	0X0E
	RETLW	0X0D
	RETLW	0X0C
	RETLW	0X0B
	RETLW	0X0A
	RETLW	0X09
  	RETLW	0X08
	RETLW	0X07
	RETLW	0X06
	RETLW	0X05
	RETLW	0X04
;
	ORG	0100
	DATA	'M'
	DATA	'A'
	DATA	'G'
	DATA	'E'
	DATA	'N'
	DATA	'T'
	DATA	'A'
;
	DATA	'E'
	DATA	'L'
	DATA	'E'
	DATA	'C'
	DATA	'T'
	DATA	'R'
	DATA	'O'
	DATA	'N'
	DATA	'I'
	DATA	'C'
	DATA	'S'
;
;
;
	END
 

Attachments

  • PIC12C508b.HEX
    662 bytes · Views: 119
be80be- You have been very supportive.Thank you very much for the help.If I am not asking for to much can the it sweep between two frequency ranges alternately ?
 
You have to be more specific.
Do you want: 2kHz to 4kHz then 300Hz to 100Hz then 2kHz to 4kHz then 300Hz to 100Hz etc.
How long do you want the: "2kHz to 4kHz" to take, and how long for the: "300Hz to 100Hz"
 
Colin55 - "Do you want: 2kHz to 4kHz then 300Hz to 100Hz then 2kHz to 4kHz then 300Hz to 100Hz etc" -Yes,each range should take around 170 mSec( 2kHz to 4kHz in 170ms then 300Hz to 100Hz in 170ms then 2kHz to 4kHzin 170ms then 300Hz to 100Hzin 170ms, no pause between the ranges)
 
The same stepping as in the present code would be preferred.I am talking of a sweep oscillator (sweep from 2khz upto 4khz in 170ms and then goto 300hz and sweep down to 100hz in 170ms then back to 2khz and so on).How to use code protection for this PIC?
 
blueroomelectronics - "Why do you want code protection?" -Just for safety.
I think it would be easier if instead of the dual frequency I opt for extended range.How do I increase the range on the higher and/or lower frequency sweep range and increase the rate of the sweep ?
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top