Ik wil kijken of asm programmeren iets voor mij is.
Ik heb daartoe mplab x 2.25 geinstalleerd en wil een klein test programma draaien maar krijg telkens de volgende foutmelding:

No source code lines were found at current PC 0x0.

Dit is het programma:

        org 0x00
temp    equ 0x70
        movlw 0xfe
        movwf temp
loop    rrf temp, 1
        goto loop 
        end

Weet iemand wat ik fout doe?

PC is een Program Counter. Ofwel een tellertje wat het adres in het flash geheugen bij houdt. Deze wijst dus naar de huidige instructie van het programma en voert deze uit.

Bij het opstarten van een micro controller staat de Program Counter op 0x0000 en moet daar dus zijn eerste programma instructie vinden. Die kan hij in jou geval dus niet vinden. Ik weet niet hoe je dit moet oplossen, maar je weet nu wel waar je op moet zoeken om een oplossing te vinden.

Misschien was ik wat onvolledig.
Dit gebeurt me na het builden van het programma en als ik het wil debuggen.
Dus in het geheugen van de assembler.
Ik ben nog een beetje aan het kijken hoe alles werkt.

Variabelen declareren doe je niet middenin je programma, maar ervoor. De .org hoort in ieder geval na de declaratie (in dit geval van temp)
Er ontbreekt wel meer aan het begin van je code, zoals processortype, config,....
Ik weet niet of dat de oorzaak is, er schijnen meerdere oorzaken voor deze melding te zijn. (bij kleinere pic's heb je ook vaak een debug header nodig)
Neem als begin een template file, dan heb je een juist begin (zitten bij MPLab)

Het heeft geloof ik aan het builden.
Als ik gewoon build gaat het fout maar als ik build en clean main project doe gaat het wel goed.
de processor kies je tijdens het aanmaken van het project dus ik vraag me af of dat ook nopg in de code moet staan, maar kwaad kan het niet.
De config had ik inderdaad niet aan gedacht.

Op adres 0x00 moet een goto instructie staan naar het begin van het programma.

Dat geldt alleen als er in de code interrupts worden gebruikt/ingeschakeld. Anders mag je ook rechtstreeks met je eigenlijke programma beginnen op adres 0.

Ja, mag wel, maar je kunt er beter een gewoonte van maken om over de interruptvector (0x04) heen te springen. Dus op adres 0x00 komt te staan: goto 0x05, en daar start je eigenlijke programma.

Daarom raadde ik aan om de templatefiles te gebruiken. Geeft je een comleet 'geraamte' voor je programma, inclusief interrupt context save/restore. (voorbeeld 877a)


;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PIC16F877A. This file contains the basic code              *
;   building blocks to build upon.                                    *  
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;**********************************************************************
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;    Author:                                                          *
;    Company:                                                         *
;**********************************************************************
;    Files Required: P16F877A.INC                                     *
;**********************************************************************
;    Notes:                                                           *
;**********************************************************************

	list		p=16f877A	; list directive to define processor
	#include	<p16f877A.inc>	; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

; '__CONFIG' directive is used to embed configuration data 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.

;***** VARIABLE DEFINITIONS
w_temp		EQU	0x7D	  ; variable used for context saving 
status_temp	EQU	0x7E	  ; variable used for context saving
pclath_temp	EQU	0x7F	  ; variable used for context saving			

;**********************************************************************
	ORG     0x000             ; processor reset vector

	nop			  ; nop required for icd
  	goto    main              ; go to beginning of program

	ORG     0x004             ; interrupt vector location

	movwf   w_temp            ; save off current W register contents
	movf	STATUS,w          ; move status register into W register
	movwf	status_temp       ; save off contents of STATUS register
	movf	PCLATH,w	  ; move pclath register into w register
	movwf	pclath_temp	  ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere

	movf	pclath_temp,w	  ; retrieve copy of PCLATH register
	movwf	PCLATH		  ; restore pre-isr PCLATH register contents
	movf    status_temp,w     ; retrieve copy of STATUS register
	movwf	STATUS            ; restore pre-isr STATUS register contents
	swapf   w_temp,f
	swapf   w_temp,w          ; restore pre-isr W register contents
	retfie                    ; return from interrupt


main

; remaining code goes here


	END                       ; directive 'end of program'

Als ik een nieuw project start kan ik alleen maar C templates laden, althans dat is waaruit ik kan kiezen.
Moet je asm templates apart installeren?

Staan in de 'template' directory van MPAsm Suite. Tenminste, bij de oude MPAsm (zonder 'X' ;) )

Ik heb ze gevonden.
Jammer dat ik niet altijdens het creeëren van een project al een template kan selecteren, het zij zo.