04-03-2018, 04:16 PM
Instalirao AVR Studio 7 super je...ali malo sam isao citat assembler i napravio sam ovaj led blink u assembleru...kompilirao sa avrasm i to radi...evo i koda...pa ako se slazete da krenem sa assemblerom pa ako gdje zapnem da se pomogne...znam da je assembler low level programming language ali nekako mi se iskreno najvise svidja i logican mi je...a i kad ga svladam kadnije dekompiliram HEX file od nekog projekta i lakse cu da shvatim sto sei kako pisalo..a i tocno se vidi kako avr radi i gdje je koji registar stack i stack pointer i sbi (set bit input) i cbi (clear bit input)...slican je jakoo C kodu koji sam napisao za LED blink ali mislim da ce moj izbor ici na assembler...jer tu se radi o tome da nema pretvaranja c u asm...nema vecih filova koje imaju trial verzije compilera i prirodan mi je jezik...
evo i asm kod za led blink preko delaya (za timere cu za koji dan posto citam opsezan tutorial na netu)...znam da jedino bode u oci ova delay rroutina ali i to ce da se sredi samo da malo pohvatam registre brne i dec ..dakle mikrokontroler broji u prazno i eto delaya...
/*
* LED Blink
*/
.include "C:\FastAVR\inc\m328pdef.inc"
.DSEG
.CSEG
.ORG 0x0000
Reset:
; Initialize Stack
ldi yl, byte1(RAMEND)
out SPL, yl
ldi yh, byte2(RAMEND)
out SPH, yh
sbiw yl, 32
; Set PORTD Output
ldi zl, byte1(255)
out DDRD, zl
Loop:
; Turn LED On
sbi PORTD, 0
; Wait 500ms
ldi zl, byte1(1000)
ldi zh, byte2(1000)
call WaitMs
; Turn LED Off
cbi PORTD, 0
; Wait 500ms
ldi zl, byte1(1000)
ldi zh, byte2(1000)
call WaitMs
; Return To Loop
rjmp Loop
;/////////////////////////////////////////////////////////
WaitMs:
ldi r20, 0x14
WaitMs1:
ldi r21, 0xC7
WaitMs2:
dec r21
brne WaitMs2
dec r20
brne WaitMs1
dec zl
brne WaitMs
ret
Jedino trebam pomoc oko fuse bitova...imam atmega328p spojen xtal1 i xtal2 18.432MHz quartz i 2x 22pF keramiku nanjih pa na masu..pa me zanima kako trebam da podesim fuse bitove da radi na punom taktu?
Evo ekrana LOW FUSE:
evo i asm kod za led blink preko delaya (za timere cu za koji dan posto citam opsezan tutorial na netu)...znam da jedino bode u oci ova delay rroutina ali i to ce da se sredi samo da malo pohvatam registre brne i dec ..dakle mikrokontroler broji u prazno i eto delaya...
/*
* LED Blink
*/
.include "C:\FastAVR\inc\m328pdef.inc"
.DSEG
.CSEG
.ORG 0x0000
Reset:
; Initialize Stack
ldi yl, byte1(RAMEND)
out SPL, yl
ldi yh, byte2(RAMEND)
out SPH, yh
sbiw yl, 32
; Set PORTD Output
ldi zl, byte1(255)
out DDRD, zl
Loop:
; Turn LED On
sbi PORTD, 0
; Wait 500ms
ldi zl, byte1(1000)
ldi zh, byte2(1000)
call WaitMs
; Turn LED Off
cbi PORTD, 0
; Wait 500ms
ldi zl, byte1(1000)
ldi zh, byte2(1000)
call WaitMs
; Return To Loop
rjmp Loop
;/////////////////////////////////////////////////////////
WaitMs:
ldi r20, 0x14
WaitMs1:
ldi r21, 0xC7
WaitMs2:
dec r21
brne WaitMs2
dec r20
brne WaitMs1
dec zl
brne WaitMs
ret
Jedino trebam pomoc oko fuse bitova...imam atmega328p spojen xtal1 i xtal2 18.432MHz quartz i 2x 22pF keramiku nanjih pa na masu..pa me zanima kako trebam da podesim fuse bitove da radi na punom taktu?
Evo ekrana LOW FUSE: