Sida 1 av 2

Problem med lite kod

Postat: 27 september 2003, 17:30:58
av PaNiC
ElektronikTomten hjälpte mig att få igång mitt STK500-kit så nu är jag glad :).

Fast jag har lite problem. Jag tänkte att som första program göra något som räknar upp binärt och sedan ner igen.

Så här ser koden ut:

Kod: Markera allt

.include "8515def.inc"

.def temp = R16

reset:
	ldi temp, 0
	out ddrb, temp
	rjmp upp

upp: 
	rcall skriv
	inc temp
	rcall delay
	cpi temp,255
	breq ner
	rjmp upp

ner:
	rcall skriv
	dec temp
	rcall delay
	cpi temp,0
	breq upp
	rjmp ner

delay:
	inc	r17
	cpi	r17,255	
	brne delay
	clr	r17		
	inc	r18	
	cpi	r18,255	
	brne delay	
	clr	r18	
	ret			

skriv:
	out portb, temp
	ret
Lysdioderna på portb förblir släckta och simulatorn fastnar på "rcall skriv" i upp-rutinen. Förslag? :)

Ja. Jag är n00b.

Postat: 27 september 2003, 18:03:01
av erixon
Du måste initsera stack pekaren =)

Exempel

ldi rTEMP,low(RAMEND)
out SPL,rTEMP
ldi rTEMP,high(RAMEND)
out SPH,rTEMP

edit: skrev så syns vad jag menar :roll:

Postat: 27 september 2003, 19:04:24
av PaNiC
Det där var något jag inte har sett innan.
Får leta upp lite information om vad det är.

Tack! :)

Edit: Sweet.. Det ser ganska kul ut :)

Postat: 27 september 2003, 20:07:13
av Melker
Det där pekar stackpekaren till slutet av RAM-minnet. Ifall du inte vet vad stacken är, så är det tex där adressen till nästa instruktion när en subrutin är slut lagras.

Postat: 30 september 2003, 19:04:37
av PaNiC
Ja koden fungerar nu som tidigare antytt. Funderade lite på en sak nu bara. Kan man inte köra ut binära tal direkt? Dvs:

Kod: Markera allt

out portb 10100101
?

Det skulle underlätta ganska mycket i ett av mina kommande projekt.

Postat: 30 september 2003, 19:07:47
av Melker
Skriv 0b innan talet, tex 0b01010101 och 0x för hexadecimala tal, tex 0xFF

Postat: 30 september 2003, 19:13:59
av PaNiC
Lysande. Tack!

Postat: 30 september 2003, 21:22:48
av erixon
Vad jag vet kan man inte sätta värdet direkt utan är tvunget att gå vi ett register...
Där i mot kan man hä på/av en bit på porten med hjälp av sbi och cbi men trolig är det inte vad du inte vill göra

Postat: 30 september 2003, 22:23:25
av PaNiC
erixon: Det vill jag också göra. Inte just nu dock men i framtiden.

Postat: 6 januari 2004, 20:14:17
av PaNiC
I dessa digra dagar då forumet inte fungerar ordentligt får jag istället för att skapa en ny tråd fortsätta på denna. Problemet denna gången är RTC.

Till min nixie-klocka ska jag använda Mega16 samt RTC. Jag har läst PDFen om det från Atmel men där fanns bara kodexempel i C. Jag skulle vilja ha ett exempel i assembler. Kan någon hjälpa till med detta?

Postat: 6 januari 2004, 21:00:31
av Melker
Vad är det för RTC du ska använda?

Postat: 6 januari 2004, 22:34:29
av PaNiC
Realtidsklockan.

Postat: 6 januari 2004, 22:47:03
av PaNiC
Det jag vill åstadkomma är att varje sekund avbryts en loop och ökar ett register med ett.

Postat: 7 januari 2004, 00:18:30
av Melker
Jag vet vad RTC är, men det finns externa RTC-kretsar som man läser ifrån vad tiden är eller så kan man göra en med interna interrupts. Om det är interrupts du ska använda så kan du läsa på tex avr-freaks om hur det fungerar, finns något exempel där hur man använder timers. Står även en del om interrupts på http://www.avrbeginners.net/

Postat: 7 januari 2004, 01:02:59
av PaNiC
Jaså det var så du menade.
En kristall mellan Tosc1 och Tosc2 var hårdvaran jag tänkte mig.