Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Code change from 12C508A to 16F84A

Status
Not open for further replies.

Sheeraz Khan

Member level 3
Joined
Dec 29, 2002
Messages
62
Helped
1
Reputation
2
Reaction score
0
Trophy points
1,286
Activity points
440
12c508a

Hi

This code is for 12C508A what is the process to convert this code for 16F84A

SK

Code:
;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PICmicro PIC12C508A. This file contains the basic code     *
;   building blocks to build upon.                                    *
;                                                                     *
;   If the internal RC oscillator is not implemented then the first   *
;   instruction after the ORG 0x000 directive is not required.        *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PICmicro data sheet for additional        *
;   information on the instruction set.                               *
;                                                                     *
;   Template file assembled with MPLAB V3.99.18 and MPASM V2.15.06.   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     * 
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************

	list      p=12c508a           ; list directive to define processor
	#include <p12c508a.inc>       ; processor specific variable definitions

	__CONFIG   _CP_ON & _WDT_OFF & _MCLRE_ON & _LP_OSC 	;external /MCLR, no wdt, 32kHz oscillator

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

	#define		SEC_OUT		GPIO,0		;
	#define		_SEC_OUT 	GPIO,1		;
	#define		MIN_OUT		GPIO,2		;

;***** CONSTANT DEFINITIONS
OPTION_CFG		EQU		B'11000100'	;option register configuration: no pullups, no wakeup, internal TMR0 1:16
PORT_CFG		EQU		0x00		;port configuration, all outputs
PORT_INI		EQU		B'00000010'	;port initialization value, SEC_OUT low, /SEC_OUT high, MIN_OUT low
CONST_03		EQU		D'77'		;constant used to generate 0.3sec delays


;***** VARIABLE DEFINITIONS
MIN         EQU     0x07        ;temporary storage, counter 60 seconds




;**********************************************************************
		ORG     0x1FF             ; processor reset vector
; Internal RC calibration value is placed at location 0x1FF by Microchip
; as a movlw k, where the k is a literal value.

        ORG     0x000            		; coding begins here
		
			goto	Main		;jump to beginning of code

		
		ORG		0x008		;save these locations for code changes

Main:		movlw	OPTION_CFG		;setup option reg
			option			;
			movlw	PORT_INI	;initialize port
			movwf	GPIO		;
			movlw	PORT_CFG	;configure port pins
			tris	GPIO		;
			movlw	0x01		;initialize timer
			movwf	TMR0		;
			movlw	D'60'		;initialize counter
			movwf	MIN		;

Wait_0:		movf	TMR0,W			;read timer
			btfss	STATUS,Z	;check if it rolled over
			goto	Wait_0		;if not, wait
		
			bcf		MIN_OUT		;clear minute output
			bsf		SEC_OUT		;set SEC_OUT output
			bcf		_SEC_OUT	;clear the /SEC_OUT
			decfsz	MIN,F			;decrement minute counter
			goto	Wait_03			;if not zero, go generate 0.3sec pulse

			movlw	D'60'			;reload counter
			movwf	MIN			;
			bsf		MIN_OUT		;set minute output
Wait_03:	movlw	CONST_03			;wait here for 0.3s
			subwf	TMR0,W			;
			btfss	STATUS,C		;
			goto	Wait_03			;

			bcf		SEC_OUT		;clear seconds output
			bsf		_SEC_OUT	;set complementary output
			goto	Wait_0			;go back wait in the loop

;-----------------------------------------------------------------------



		END                       ; directive 'end of program'
 

16f84a instruction set

Sheeraz Khan said:
Hi

This code is for 12C508A what is the process to convert this code for 16F84A

SK

Code:
;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PICmicro PIC12C508A. This file contains the basic code     *
;   building blocks to build upon.                                    *
;                                                                     *
;   If the internal RC oscillator is not implemented then the first   *
;   instruction after the ORG 0x000 directive is not required.        *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PICmicro data sheet for additional        *
;   information on the instruction set.                               *
;                                                                     *
;   Template file assembled with MPLAB V3.99.18 and MPASM V2.15.06.   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     * 
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************

	list      p=12c508a           ; list directive to define processor
	#include <p12c508a.inc>       ; processor specific variable definitions

	__CONFIG   _CP_ON & _WDT_OFF & _MCLRE_ON & _LP_OSC 	;external /MCLR, no wdt, 32kHz oscillator

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

	#define		SEC_OUT		GPIO,0		;
	#define		_SEC_OUT 	GPIO,1		;
	#define		MIN_OUT		GPIO,2		;

;***** CONSTANT DEFINITIONS
OPTION_CFG		EQU		B'11000100'	;option register configuration: no pullups, no wakeup, internal TMR0 1:16
PORT_CFG		EQU		0x00		;port configuration, all outputs
PORT_INI		EQU		B'00000010'	;port initialization value, SEC_OUT low, /SEC_OUT high, MIN_OUT low
CONST_03		EQU		D'77'		;constant used to generate 0.3sec delays


;***** VARIABLE DEFINITIONS
MIN         EQU     0x07        ;temporary storage, counter 60 seconds




;**********************************************************************
		ORG     0x1FF             ; processor reset vector
; Internal RC calibration value is placed at location 0x1FF by Microchip
; as a movlw k, where the k is a literal value.

        ORG     0x000            		; coding begins here
		
			goto	Main		;jump to beginning of code

		
		ORG		0x008		;save these locations for code changes

Main:		movlw	OPTION_CFG		;setup option reg
			option			;
			movlw	PORT_INI	;initialize port
			movwf	GPIO		;
			movlw	PORT_CFG	;configure port pins
			tris	GPIO		;
			movlw	0x01		;initialize timer
			movwf	TMR0		;
			movlw	D'60'		;initialize counter
			movwf	MIN		;

Wait_0:		movf	TMR0,W			;read timer
			btfss	STATUS,Z	;check if it rolled over
			goto	Wait_0		;if not, wait
		
			bcf		MIN_OUT		;clear minute output
			bsf		SEC_OUT		;set SEC_OUT output
			bcf		_SEC_OUT	;clear the /SEC_OUT
			decfsz	MIN,F			;decrement minute counter
			goto	Wait_03			;if not zero, go generate 0.3sec pulse

			movlw	D'60'			;reload counter
			movwf	MIN			;
			bsf		MIN_OUT		;set minute output
Wait_03:	movlw	CONST_03			;wait here for 0.3s
			subwf	TMR0,W			;
			btfss	STATUS,C		;
			goto	Wait_03			;

			bcf		SEC_OUT		;clear seconds output
			bsf		_SEC_OUT	;set complementary output
			goto	Wait_0			;go back wait in the loop

;-----------------------------------------------------------------------



		END                       ; directive 'end of program'

you have to look at two datasheets for 12C508 and 16F84A and find the differences between them like reset vector and the values for registers and you have to notice that 16F84a isn't conainning internal oscilator you to put this in mind.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top