Kan iemand misschien mij uitleggen wat hieronder gebeurd?
Het is een stukje ASM uit een GSM Schakelaar (November Elektuur).

Ze schrijven deze code vóórdat het programma begint. Ik zie geen Equ of iets anders en heb dus ook geen idee wat ze doen / defineren (vanaf CBLOCK)


		list	p=16f84
		radix	hex
		include	<p16f84.inc>
w		equ	0
f		equ	1
;
;	Here is the working area (RAM)
;
	cblock	0x0C
		safe_w			;safe areas for w- and			
		safe_s			;STATUS-registers
		lippu			;flag to increment seconds counter
		yla_osa			;here we cumulate number of  
		ala_osa			;interrupts for time keeping
		laskuri1		;seconds counter
		laskuri2		;timeout-counter
		digicount		;digit-counter
		apu			;just for help
		neljä			;here
		kolme			;are
		kaksi			;password
		yksi			;digits
	endc
;

En dan had ik nog een vraag over hetzelfde ASM bestand, namelijk hetvolgende;

Ik zie in de volgende code 2x de code ORG voorkomen, ik dacht dat deze alleen aan het begin van de programmering mocht worden gebruikt om aan te geven waar je programma begint (uit CO Tutorial)


org	0x00
		goto	start		;goto work
;
;	Timer interrupts are handled here. Clock rate 3,579 MHz 
;	means 3495 interrupts per second.
;	
		org	0x04
		movwf	safe_w		;save w 
		swapf	STATUS,w	;and
		movwf	safe_s		;S
		clrwdt			;just for sure
		incf	ala_osa,f	;add 1 to lower part
		btfsc	STATUS,Z	;overflow?
		incfsz	yla_osa,f	;yes, so let us add to upper part
		goto	pois		;go away, if upper part not full

PS mocht iemand geintresseerd zijn inde hele code dan kan ik die eventueel posten!

het CBLOCK definieerd de geheugen adressen vanaf 0C
je zou voor elke waarde ook een EQU kunnen schrijven nu word dit door de compiler gedaan.

dus SAFE_W equ 0c is hetzelfde als
CBLOCK 0C

safe_w
enz.

org 00h is het begin van je programma
org 04h is het adres waarheen word gesprongen als er een interupt is
je geeft gewoon aan waar die code moet beginnen
als jij wilt dat iets altijd op plekje 20 staat zet je er org 20h voor

de org 04h kan je nietg verplaatsen deze word altijd aangeroepen door de interupt handler(zie datasheet)

Op 5 februari 2006 19:06:31 schreef The Headhunter:
het CBLOCK definieerd de geheugen adressen vanaf 0C
je zou voor elke waarde ook een EQU kunnen schrijven nu word dit door de compiler gedaan.

dus SAFE_W equ 0c is hetzelfde als
CBLOCK 0C

safe_w
enz.

org 00h is het begin van je programma
org 04h is het adres waarheen word gesprongen als er een interupt is
je geeft gewoon aan waar die code moet beginnen
als jij wilt dat iets altijd op plekje 20 staat zet je er org 20h voor

de org 04h kan je nietg verplaatsen deze word altijd aangeroepen door de interupt handler(zie datasheet)

Is save_s dan weer de volgende plek in het geheugen ná 0C?

hoe kan je een interupt maken van een pin naar bijv. o4h? Waar geef je dat aan? (en hoe)

idd de volgende zou dan c1 zijn.
het voordeel is dat jij dat niet hoeft te onthouden.

kijk even in de datasheet.
alle interupts komen uit op 04h.
in het INTCON register bepaalje welk interupt actief is.
ook is er een register waar je kan zien welke er getriggert is.