Martijn Berntsen
pe4mb
heeft iemand hier verstand van het programmeren in assembler, ik heb namelijk wat vragen:
- hoe kan is een soort toggle bit maken, dus door op een knopje te drukken dat hij 1 wordt en als je weer drukt moet hij weer 0 worden?
- hoe kan ik een voorwaardelijke opdracht uitvoeren die afhangt van de waarde van een bepaalde variabele?
de microcontroler die ik wil programmeren is een 89S8252 met het flashboard van de electuur (oktober/november ofzo)
bij voorbaat dank.
Martijn Berntsen
Ah ja, ben ik ook over aan het denk is dat ding de moeite waard ?
Verder zou ik de cursus volgen die in de 6 nummers erna komt !
Grtz,
Martijn Berntsen
pe4mb
Op vr 15-02-2002 19:47:51 schreef Antoine:
Ah ja, ben ik ook over aan het denk is dat ding de moeite waard ?
als je er iets over wilt weten, vraag maar hoor.
Op vr 15-02-2002 20:39:51 schreef Martijn Berntsen:
[...]
als je er iets over wilt weten, vraag maar hoor.
vraag 1) toggle.
als bit0 je toggle bit is:
-tel 1 op bij je variable, en negeer de rest van de bits,
eventueel kun je bij een sprong van 1 naar 0 er weer 2 afhalen
zodat de rest van de inhoud goed blijft, of verwijder deze met een
and. xxxxxxx1 and 00000001 levert alleen bit0 op = 1
vraag 2) if then else
voorwaardelijke sprongen worden via de statussen van de vlaggen gedaan
groter of kleiner dan via de carry en gelijk aan via de zero
* if x - gewenste waarde = 0 then z =1
* if c = 1 --> x < gewenste waarde
* if c = 0 --> x => gewenste waarde
succes
willie wortel
Op vr 15-02-2002 20:39:51 schreef Martijn Berntsen:
[...]
als je er iets over wilt weten, vraag maar hoor.
Heb je die print zelf gemaakt of besteld ben Elektuur, als je het zelf gemaakt hebt zou je er voor mij dan ook een willen maken ? tegen betaling uiteraard, ik vind elektuur behoorlijk prijzig met hun printen. Hoor het wel
Antoine
avdcruyssen@gmx.net
Martijn Berntsen
pe4mb
Op za 16-02-2002 13:07:52 schreef Antoine:
[...]
Heb je die print zelf gemaakt of besteld ben Elektuur, als je het zelf gemaakt hebt zou je er voor mij dan ook een willen maken ? tegen betaling uiteraard, ik vind elektuur behoorlijk prijzig met hun printen. Hoor het wel
Antoine
avdcruyssen@gmx.net
nee, die heb ik niet zelf gemaakt, dan moet je hem doormetaliseren, hij is dubbelzijdig. ik heb hem gewoon besteld.
martijn
Martijn Berntsen
pe4mb
Op vr 15-02-2002 22:47:39 schreef williewortel:
[...]
vraag 1) toggle.
als bit0 je toggle bit is:
-tel 1 op bij je variable, en negeer de rest van de bits,
eventueel kun je bij een sprong van 1 naar 0 er weer 2 afhalen
zodat de rest van de inhoud goed blijft, of verwijder deze met een
and. xxxxxxx1 and 00000001 levert alleen bit0 op = 1vraag 2) if then else
voorwaardelijke sprongen worden via de statussen van de vlaggen gedaan
groter of kleiner dan via de carry en gelijk aan via de zero
* if x - gewenste waarde = 0 then z =1
* if c = 1 --> x < gewenste waarde
* if c = 0 --> x => gewenste waardesucces
willie wortel
dus, om bijvoorbeeld een togglebit te maken kan ik het zo doen?
if P1.1 = 1 --> P1.1 => 0
if P1.1 = 0 --> P1.1 => 1
of kun je ook AND, OR of XOR gebruiken??
martijn
sven
pointers don't kill programs, programmers kill programs
Hoi allemaal;
volgens mij heeft Sven gelijk wanneer hij zegt dat IF geen instructie is dat tot assembler behoort. IF is een instructie uit de hogere programmeertalen zoals bvb. Pascal.
Ik heb zelf ook het flashboard bij elektuur aangekocht en ik zit met een gelijkaardig probleem ivm het programmeren.
Mijn vraag is nu of niemand soms een site weet waar men informatie (en eventueel programmavoorbeelden) kan vinden over assembler.
succes
sven
pointers don't kill programs, programmers kill programs
ook maarnet opnieuw begonnen , hier heb je enkele links
http://members.home.nl/bzijlstra/software/examples/asmex.htm
Op zo 17-02-2002 16:26:24 schreef Martijn Berntsen:
[...]
dus, om bijvoorbeeld een togglebit te maken kan ik het zo doen?
if P1.1 = 1 --> P1.1 => 0
if P1.1 = 0 --> P1.1 => 1of kun je ook AND, OR of XOR gebruiken??
martijn
xor is nog makkelijker; weer bit nul als voorbeeld:
accu = xxxxxxx0B
xor: 00000001B
result: xxxxxxx1B
xor: 00000001B
result: xxxxxxx0B
zou het op deze manier niet lukken:
main mov a, #00H
mov P1, a
JB P3.1 tel
sjmp main
tel inc a
sjmp main
.end
Op deze manier schrijf je eerst de waarde 00H naar de accu, vervolgens schrijf je de waarde naar poort1. Als je dan P3.1 set, dan moet het programma een sprong maken naar tel. Hier wordt de accu verhoogt met 1.
Ik heb dit zelf nog niet getest maar volgens mij heeft dit een goede kans om te werken.
succes
sven
pointers don't kill programs, programmers kill programs
wat gebeurt er dan als A = 255?
indien dit een probleem zou zijn, is dit dan niet beter?
main mov a, #01H
mov P1, a
JB P3.1 tel
sjmp main
tel cpl a
sjmp main
.end
zo te zien is bovenstaand een afgeleide van Intel programmeertaal. Zo ook Parallax (assembler met macro's waarin ik oa programmeer.)
Ik zou het volgende doen in Parallax (dit kun je volgens mij zelf wel omzetten naar Atmel.
declaratie variabelen:
toggle = MM.0 ; WAARIN MM = vrije geheugen locatie
"sub routine"
toggle_proc jb toggle,clr_bit ;INDIEN TOGGLE GESET SPRING NAAR CLR_BIT
setb toggle ;NIET GESET DUS? SET NU!
ret ;RETURN NAAR AANROEP PROCEDURE
clr_bit clrb toggle ;WAS GESET, CLR NU!
ret ;RETURN NAAR AANROEP PROCEDURE
roep nu in je programma toggle_proc aan en je bitje wordt geset of gecleared.
grtx rudx
Jeroen
Moderator