Gå til innhold

Anbefalte innlegg

Da har jeg endelig fått fyring på min Atmegaboard32.

 

https://www.diskusjon.no/index.php?showtopic=528237

 

Målet mitt er at denne microkontrolleren skal styre min fjernstyrte bil/robot/rullestol ting

Den skal bygges av driv motorene fra en rullestol, styres via PWM fra microkontrolleren og få styresignaler fra pot meter drevet av servoer fra fjernstyringen. Så kommer der inn flere følere og div etterhvert. Dette er iallefall planen men den kommer nokk til å endre seg etterhvert.

 

Men før man kan gå må man lære seg å krype..... Desverre

(Tilgi meg for mine skrivefeil, bare er sann)

 

Så jeg begynte med noe eksempler koder som fulgte med for å forstå hvordan man setter opp porter til inn og ut og hvordan dette funker. Jeg fant en kode der portA fungerer som ett løpelys. Jeg forandret den litt slik at man leser inn en verdi fra portB som bestemmer hastigheten. Vel og bra, det funket, men så er der noen ting jeg lurer på....

 

Først hele koden: Merket i rødt er mine forandringer

 

;**********************************************

; example program for emb-avr e1 family

; atmega32 @16MHz

; test PORTA

; ere co.,ltd.

; www.ere.co.th

;***********************************************

 

.include "m32def.inc"

 

.CSEG

.ORG 0x0000

JMP RESET

 

 

RESET: LDI R16,HIGH(RAMEND) ; main program start

OUT SPH,R16 ; set stack pointer to top of RAM

LDI R16,LOW(RAMEND)

OUT SPL,R16

 

LDI R16,0xFF

OUT DDRA,R16

LDI R16, 0x00

OUT DDRC,R16

 

LOOPI: LDI R17,8

LDI R16,0xFF

CLC

LOOPR: ROL R16

OUT PORTA,R16

CALL DELAY

DEC R17

BRNE LOOPR

 

JMP LOOPI

 

DELAY: IN R0,SREG

 

DEL2: LDI R26,0xFF

LDI R27,0xFF

DEL1: SBIW R26,1

BRNE DEL1

DEC R18

BRNE DEL2

OUT SREG,R0

IN R13,PINC

MOV R18,R13

RET

 

 

Først, hvordan klarer man å hente ut klar tekst med tabulatorer slik at man kan poste koden rett her uten å måtte flytte på alt? Ble bare rot.

 

 

Hvorfor begynner de slik:

 

.CSEG

.ORG 0x0000

JMP RESET

 

 

RESET: LDI R16,HIGH(RAMEND) ; main program start

OUT SPH,R16 ; set stack pointer to top of RAM

LDI R16,LOW(RAMEND)

OUT SPL,R16

 

LDI R16,0xFF

OUT DDRA,R16

 

 

Er det ikke nokk med dette eller:

 

.def Temp = R16 ;Gives "Defines" Register R16 the name Temp

 

.org 0x0000 ;Places the following code from address 0x0000

rjmp RESET ;Take a Relative Jump to the RESET Label

 

RESET: ;Reset Label

ldi Temp, 0xFF ;Store 255 in R16 (Since we have defined R16 = Temp)

out DDRB, Temp ;Store this value in The PORTB Data direction Registe

 

 

 

Holder med spørsmål for denne gang, kommer nokk mye mer :thumbup:

Lenke til kommentar
Videoannonse
Annonse

Hehe.... janeidet.... Burde jeg ha sett :blush:

 

Da skal jeg gå fra assembly til C kode, så bare glem det første masingen. Blir nokk senere

 

 

Men nei da.... No er det Basecom som skal prøves, her vingler vi mer enn.... ettelleranna rart nokke :hmm:

Endret av Behydro
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...