ASM för svårt för mig...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

ASM för svårt för mig...

Inlägg av Logan »

Suttit några dagar nu och försökt lära mig ASM och det gör mig inte klokare, är rädd att man ska tappa intresse för PIC :cry: och söker efter lättare språk. Språker ska vara så bra att man kan programera en Display 16X2. ASM får komma senare när jag märker att språket inte går att använda till mina projekt.
Och om ni rekomenderar något språk så skriv gärna var man hittar komelaton med :)
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Det finns väl några basic-varianter för pic, vet inte om någon är gratis. Dock tycker jag att assembler är väldigt lätt för PIC, det är ju bara ca 30 instruktioner. Bara att skriva ut instruktionslistan och sätta igång :)

Det är säkert många här som gärna hjälper dig med PIC ASM...

/Johan
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

Inlägg av Logan »

Hittade en nu som jag ska kolla på. Den heter mikroBasic...
Det kanske är sant att man bara behöver kunna 30 instruktioner, men jag kan inte hitta det rätta tänkandet. Är nog för skadad av VB :? Sedan så värkar det med att man vet hur en PIC funkar inuti med om allt ska vara bra.
Men vad tror ni om mikroBasic?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Att "lära sig ASM", betyder att man helt enkelt bara kastar sig in och programmerar. Vad har du gjort ? Bara läst ? Eller även skrivit något kod ?

> "Språker ska vara så bra att man kan programera en Display 16X2..."

ASM fungerar alldeles utmärkt till det ! :-) :-)

Det är mycket möjligt (till och med sannolikt) att du snabbare får något att "hända" med t.ex någon Basic variant, men inte kommer du att lära dig lika mycket om PIC processorerna. Men om det inte spelar någon roll, så kanske du kan "hoppa över" ASM, även om det inte är något som jag rekomenderar i allmännhet. Utan bakgrunden från ASM blir det svårare att förstå vad kompilatorerna har för sig. Har du tur går det bra, men när det strular är ASM bakgrunden bra att ha med sig.

Dessutom, många av de grundläggande "problem" som man råkar på i början, har nog mer med PIC processorerna som sådana att göra, inte vilket språk man råkar använda. Men även det är omöjligt att veta, eftersom du inte talar om vilka problem du har stött på.

Nä, sluta med gnället och kom med lite konkreta problem ! :-)

Vad är oklart ?
Något i data bladet som är otydligt (finns massor ! :-) )
Någon kod som inte "fungerar" ? (i så fall, visa den !)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> "Sedan så värkar det med att man vet hur en PIC funkar inuti med om allt ska vara bra."

Lite oklart vad du menar, men om det är att man behöver veta *mer* om hur en PIC fungerar "inuti" för att använda ASM, så tror jag inte det.

Spelar ingen roll vilket språk du använder, om du inte vet hur en PIC fungerar så kommer du inte långt...

Men vad är problemet med att veta hur en PIC fungerar inuti ???
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

Inlägg av Logan »

Hittade en tutorial som jag tyckte vara bra
http://www.winpicprog.co.uk/pic_tutorial1.htm

Om man kollar i första exemplet

Kod: Markera allt

      	;Tutorial 1.1 - Nigel Goodwin 2002
	LIST	p=16F628		;tell assembler what chip we are using
	include "P16F628.inc"		;include the defaults for the chip
	__config 0x3D18			;sets the configuration settings 
					;(oscillator type etc.)

	org	0x0000			;org sets the origin, 0x0000 for the 16F628,
					;this is where the program starts running	
	movlw	0x07
	movwf	CMCON			;turn comparators off (make it like a 16F84)

   	bsf 	STATUS,		RP0	;select bank 1
   	movlw 	b'00000000'		;set PortB all outputs
   	movwf 	TRISB
	movwf	TRISA			;set PortA all outputs
	bcf	STATUS,		RP0	;select bank 0

Loop	
	movlw	0xff
	movwf	PORTA			;set all bits on
	movwf	PORTB
	nop				;the nop's make up the time taken by the goto
	nop				;giving a square wave output
	movlw	0x00
	movwf	PORTA
	movwf	PORTB			;set all bits off
	goto	Loop			;go back and do it again

	end
Jag har mest studerat kod som jag brukar göra men jag kan inte se sammanhanget i koden t.ex. movwf används nästan hela tiden och gör mig förvirrad och att det krävs så "mycket" kod för göra något så enkelt

Så igentligen är problemet att jag behöver en lista på vad dessa gör.

Jag VILL lära mig ASM men jag tror att jag ska böra med något mera lättare och sedan gå vidare.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

W är arbetsregistret, så om du vill flytta data mellan olika ställen måste du gå via det

MOVWF flyttar data från W till ett register
MOVLW flyttar en konstant till W
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Jag tror att du bör läsa igenom databladet noga, så att du förstår vad det innebär att manipulera bitar i de olika registren.

Egentligen så består ju assemblerprrogrammering mest av att kontrollera/sätta bitar i olika register eller minnespositioner.

En bra start är kanske att gå igenom exempelkoden rad för rad med databladet väl till hands. När ett register manipuleras kollar du upp i databladet exakt vad den biten gör, och försöker förstå sammanhanget.

Sedan har du rätt i att det krävs mycket kod för att åstadkomma saker, det är ju ett kännetecken för lågnivåspråk.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> "Så igentligen är problemet att jag behöver en lista på vad dessa gör."

Ja men *LÄS* den då !!!

Vad är problemet ???
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Precis, allt står i databladet. Jag lärde mig PIC i början av gymnasiet, det tog ca en vecka innan jag kunde göra lite vettiga saker som att använda uarten osv. Jag skrev ut hela databladet i skolan och bläddrade ständigt fram och tillbaka, till slut kan man det nästan utantill :) Jag hade aldrig rört assembler tidigare.

Läs igenom början av databladet några gånger. Skriv även ut instruktionslistan och minneskartan, de kan vara trevliga att ha framme.
Senast redigerad av strombom 26 augusti 2005, 15:11:28, redigerad totalt 1 gång.
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

Inlägg av Logan »

Ok, då börjar att komma på sin plats.
Nu är det bara allt för loopen som är lite klurigt fortfarande.
Sedan PortA och PortB - Är väll pinnar men vilka? Kanke dom ställer in före

loopen men det ända jag kan se är:
movlw b'00000000' ;set PortB all outputs


Men sedan har dom gjort såhär för PortA:
movwf TRISA ;set PortA all outputs :shock:

EDIT: Oj vad folk skriver snabbt :D
Ok ska skriva ut databladet för min PIC så blir det lite läsning. Hittade en gammal tidning "Datormagazin" Där stog det en bra förklarnig om alla komandon. ska läsa lite där i och sedan så återkommer jag om jag hittar några problem.

Sodja: Gillade din förklaring på MPLAB, hoppas dina exempel blir lika bra!
Senast redigerad av Logan 26 augusti 2005, 15:21:07, redigerad totalt 1 gång.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

För det första, PORTA och TRISA tror jag ligger på samma adress i minnet, för att skilja på dem har PIC 4 st "banker", BANK0,1,2,3... du kan se i koden du klistrade in hur man väljer vilken bank man ska använda. Det är detta minneskartan är bra för...

TRISA avgör om pinnarna är ingångar eller utgångar

PORTA använder man för att läsa av/skriva till in/utgångarna
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En en gång...

*HAR* du läst kap 5 "I/O PORTS" i databladet ?
Speciellt kap 5.1 "PORTA och TRISA Regsiters" ????

PORTA och PORTB är *portar* inte *pinnar*.

I koden sätts både TRASA och TRISB til h'00'.
D.v.s att alla pinnar på både PORTA och PORTB är utgångar.

Dessutom, varöfr har du utelämnat en rad i den snutt du har klippt in ??
Användarvisningsbild
Logan
Inlägg: 630
Blev medlem: 5 januari 2005, 21:31:53
Ort: Jönköping
Kontakt:

Inlägg av Logan »

sodjan: Jag håller på att ladda ner databladet för PIC och ska läsa lite i datormagazinet, ändrade lite på mitt förra inlägg men mitt internett är lite slött när jag tankar så det tog lite tag att ändra.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK. He he... :-)

Helt otroligt att du har försökt *UTAN* databladet !
Hur trodde du att det skulle fungera... :-)

Angående beskrivningar av PIC16 instruktionerna...

Det finns en lista i varje datablad. Men det finns en lite bättre lista i
vad som kallas "Midrange PICmicro Reference Manual". Man behöver inte ladda ner hela manualen, kapitel 29 räcker bra. Så här t.ex :

- Gå till www.microchip.com
- Klicka på "PICmicro Microcontrollers" under rubriken "Products" till vänster.
- Klicka på "Reference Manuals" under "Other Links" i menyn till vänster.
- Leta reda på "Instruction Set - PICmicro Mid-Range MCU Family", klicka eventuellt på "Next" en gång.
- Ladda ner !

Detta är kapitel 29 i referens manualen till "Midrange PICmicro", d.v.s PIC16 serien och PIC12F serien.

Det är naturligtsvis samma instruktioner som beskrivs här som även beskrivs i databladen, men lite mer fylligare och med fler exempel.
Skriv svar