willyp
http://www.020it.nl - Industriële elektronica ontwikkeling. - http://www.procircuits.nl
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)
willyp
http://www.020it.nl - Industriële elektronica ontwikkeling. - http://www.procircuits.nl
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 0Csafe_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 voorde 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.