 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.07 Kraj: Divača (Kačiče)
|
Objavljeno: Ned Feb 03, 2008 9:58 pm Naslov sporočila: |
|
|
Popolnoma prav si razumel.
Citiram: |
Darko, mogoče bi odprl novo temo na programiranje AVR v zbirniku? |
Lahko, a dvomim, da bo kaj veliko pisanja na to temo. No kakorkoli imam kar nekaj stvaritev narejenih izključno v ASM.
A nebi šel več ponavljat. Je prezamudno.
_________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Feb 03, 2008 9:58 pm Naslov sporočila: |
|
|
VolkD je napisal/a: |
Zakaj se sploh mučit z assemblerjem že takoj na začetku?.... |
He, he zame Assembler ni bil nikoli mučenje . Mislim, da je edini način, da spoznaš arhitekturo mikrokontrolerja do podrobnosti.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Feb 03, 2008 11:11 pm Naslov sporočila: |
|
|
Evo sem se že malo igral. AVR studio je kar precej podoben MPLAB-u, tako , da glede tega vrjetno ne bo večjega problema. Simulacija lepo dela. Moram jutri sestavit eno testno ploščo.
Vprašanje:
- a omgogoča AVRStudio številčenje vrstic - če, kje se vključi
- kako razume assembler binarno vrednost? (pic recimo B'11111111')
Opis: |
|
Velikost datoteke: |
165.95 KB |
Pogledana: |
99 krat |

|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
tonko Član


Pridružen-a: Sob 25 Jun 2005 13:45 Prispevkov: 541 Aktiv.: 2.28 Kraj: Črnomelj
|
Objavljeno: Ned Feb 03, 2008 11:55 pm Naslov sporočila: |
|
|
Silvo, pusti asembler in se primi C-ja, pa boš videl koliko časa bi lahko v preteklosti prihranil na ta račun. Lahko si bi privoščil še kakšen dopust več vsako leto.
Preizkusi Codevision CVAVR compiler, ki je odlično orodje in boš kmalu pozabil na PIC-e in asembler.
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Feb 04, 2008 12:52 pm Naslov sporočila: |
|
|
tonko je napisal/a: |
Silvo, pusti asembler in se primi C-ja, pa boš videl koliko časa bi lahko v preteklosti prihranil na ta račun. Lahko si bi privoščil še kakšen dopust več vsako leto.
Preizkusi Codevision CVAVR compiler, ki je odlično orodje in boš kmalu pozabil na PIC-e in asembler.  |
Na PIC-e vrjetno ne bom pozabil, ker čisto zadostujejo mojim potrebam.
Tole mi je pravzaprav izziv, zato sem se zadeve lotil v assemblerju. Mislim pa, da je to edini način, ko si prisiljen, da dobro spoznaš arhitekturo mikrokontrolerja.
PS
Kako je s temi "čudežnimi" fuse biti pri AVR-jih. Dostikrat sem prebral da jih je nekdo postavil narobe, na kar ni bilo več mogoče serijsko programiranje.
Ravno si delam en vmesnik, da bom lahko ATTIY26L dal na testno ploščo. Imam ga namreč v SMD ohišju. Uporabil bom darkotov programator. Kako morajo biti postavljeni fuse biti?
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
MrPizza Član


Pridružen-a: Sob 06 Dec 2003 11:17 Prispevkov: 57 Aktiv.: 0.24 Kraj: Okolica MB
|
Objavljeno: Tor Feb 05, 2008 2:21 am Naslov sporočila: |
|
|
Silvo je napisal/a: |
.... Rad bi nekaj literature o assemblerju, kak primer kode, skratka nekaj, da lahko sploh začnem pisati ter ob enem študirati arhitekturo. ...
|
http://www.mikrocontroller.net/articles/AVR-Tutorial
Na tej strani so primeri programov v assemblerju ( i/o, prekinitve, sklad, pulzno-širinska modulacija,LCD ...). Stran je v nemščini, je pa zanimiva za začetnike.
Na isti strani je tudi tutorial za programiranje v C-ju.
_________________ Lep pozdrav,
Boštjan |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Feb 05, 2008 6:37 pm Naslov sporočila: |
|
|
Moji prvi koraki - "spustil" prvi program v attiny-ja Programator dela . Ledica tudi utripa.
Sedaj pa vprašanje:
Kako je s skladom?
Tole sem recimo napisal:
Koda: |
rjmp GLAVNI
.org $0c
GLAVNI:
ldi r16,0xff
out DDRB,r16
ZANKA:
// ser r16 set all bit
ldi r16,0x40
out PORTB,r16
// rcall PAVZA
rjmp PAVZA
Z2:
clr r16
out PORTB,r16
rjmp PAVZA2
PAVZA:
ldi r16,0xff
mov r1,r16
mov r2,r16
Z1:
dec r1
mov r16,r1
cpi r16,0
brne Z1
ldi r16,0xff
mov r1,r16
dec r2
mov r16,r2
cpi r16,0
brne Z1
rjmp Z2
//ret
PAVZA2:
ldi r16,0xff
mov r3,r16
mov r4,r16
Z1a:
dec r3
mov r16,r3
cpi r16,0
brne Z1a
ldi r16,0xff
mov r3,r16
dec r4
mov r16,r4
cpi r16,0
brne Z1a
rjmp ZANKA |
Tukaj sta pravzaprav dve enaki zanki. Kako uporabiti instrukcijo RCALL ? (call attiny26 ne podpira)
Če recimo podrutino kličem z rcall PAVZA do nje sicer pridem a ret ne vrača pravilno.
Simulator tudi javlja:
Koda: |
AVR Simulator: Uninitialized stack pointer used at 0x0010 |
Je potrebno PC pred klicem kako ročno shranit ? Če, kako?
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Feb 05, 2008 8:36 pm Naslov sporočila: |
|
|
Odgovarjam samemu sebi.
V reset rutini je potrebno določiti velikost sklada. V PDF-ju sem tudi zasledil, da se le ta v C-ju določi v linker file-tu.
Evo sem dobil veselje. Napisano malo drugače -"leteče luči"
Koda: |
include "tn26def.inc"
;moj prvi testni program atttiny26 & assembler
.org $000
rjmp GLAVNI
.org $0c
GLAVNI:
ldi r16,RAMEND
out SP,r16
ldi r16,0xff
out DDRB,r16
ZANKA:
ldi r16,0x8
mov r3,r16
out PORTB,r16
rcall PAVZA
clc
rol r3
mov r16,r3
out PORTB,r16
rcall PAVZA
clc
rol r3
mov r16,r3
out PORTB,r16
rcall PAVZA
clc
rol r3
mov r16,r3
out PORTB,r16
rcall PAVZA
rjmp ZANKA
PAVZA:
ldi r16,0xff
mov r1,r16
mov r2,r16
Z1:
dec r1
mov r16,r1
cpi r16,0
brne Z1
ldi r16,0xff
mov r1,r16
dec r2
mov r16,r2
cpi r16,0
brne Z1
ret
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
spy Član


Pridružen-a: Sre 06 Sep 2006 20:43 Prispevkov: 403 Aktiv.: 1.76 Kraj: Tržič
|
Objavljeno: Tor Feb 05, 2008 10:39 pm Naslov sporočila: |
|
|
Silvo programira v AVRjih? Bravo!! Kar tako dalje...
Asembler je dober začetek, da spoznaš "peš pot". Kasneje presedlaš na C, kjer se ne loviš več na trapastih napakah.
Sprosti se pri registrih - "working" registrov je tukaj od R0 do R31, ne samo r16. Splača se jih porabiti za bolj uporabljive spremenljivke, da ne mečeš stalno iz in v ram.
Stack se ti polni v ramu od zadaj, če se prav spomnim imajo pici ločen stack. Pri večjih programih pazi na globino, da ti stack ne povozi spremenljivk v ramu (na začetku).
Ena oblika zakasnilnih zank:
Koda: |
pavza: ldi r16,0xFF
ldi r17,0xFF
zanka: dec r16
brne zanka
dec r17
brne zanka
....
|
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Sre Feb 06, 2008 2:49 pm Naslov sporočila: |
|
|
AVRji so super.
Sklad se nahaja na koncu pomnilnika in raste od konca proti začetku.
Fuse bitov pa se žal ne da shraniti v program kot pri PICih.
Do sedaj sem vse projekte pisal v ASM. Čim gre za malo bolj kompliciran projekt, pa lahko zgubljaš dneve in tedne, če ne začneš s Cjem. Mene to še čaka
za vzpodbudo....
primer headerja programa:
Koda: |
;==============================================================================
;
; FUSE BITS
; 1 = UnProgrammed | |
; 0 = Programmed |X|
;
; CKSEL = 1010 (up, p, up, p) ok = Crystal Oscillator, Slowly Rising Power
; { 0000 (all programmed) ok = Ext. Clock, Fast Rising Power }
; { 0010 (default) = Int. RC Oscillator, Slowly Rising Power }
;
; OCDEN = 1
; JTAGEN = 1
; BODLEVEL = 0
; BODEN = 0
; EESAVE = 1 (default)
;
; BOOTxxx = 1 (default)
; xxLOCK = 1 (default)
;
;==============================================================================
;
;
;==============================================================================
; .DEVICE ATmega323 ; Use the ATmega 323 - definiran ze v .INCLUDE 323
.NOLIST
.INCLUDE "def_m323def.inc" ; ATmega323 definicije
.LIST
;===== KONSTANTE ==============================================================
; skrajne vrednosti pri nastavitvi Meje v meniju
.EQU MejaMinH = 0
.EQU MejaMinL = 41 ; enaka ali večja od konstantne meje za ZeloDobre magnete
.EQU RTI_cnt_load = 3 ; RTI izvede akcijo na vsakih NN interruptov.
.EQU PavzaPWMVklopaMotorja = 10 ; delay vrednost za hitrost soft-start PWM zagona motorja
;===== DEFINICIJE REGISTROV =====
; .DEF je samo za registre
.DEF Rdata = R00 ; prenos podatkov
.EQU ramRdata = 0x00 ; dostop do registra 0 preko RAM-a
.DEF WorkL = R06 ; splošni 16-bitni register
.DEF WorkH = R07
; 16-bitni register za seštevanje do 64 meritev pri povprečenju
.DEF MeritevAH = R8 ;16-bitni rezultat meritve na eni strani
.DEF MeritevAL = R9
.DEF MeritevBH = R10 ;16-bitni rezultat meritve na drugi strani
.DEF MeritevBL = R11
.DEF Rtemp = R16 ; večnamenski register
.DEF Rtemp2= R17 ; večnamenski register
;===== I/O DEFINICIJE =====
; port a
.EQU bLEDr = 0
.EQU bLEDz = 1
.EQU LED_byte = 0b00000011 ; pozicija obeh ledic na portu za toggle barv
.EQU sIVZ = 5 ; izbiralni ventil zaprt - odmaknjen saržer
.EQU sIVO = 4 ; izbiralni ventil odprt - saržer sklopljen
;===== spremenljivke v SRAM-u =================================================
.DSEG ; podatkovni pomnilnik (SRAM)
ResetFlags: .BYTE 1 ; izvor reseta: 000, J-Tag, Watchdog, Brown-out, External, Power-on
MeritevAH_direkt: .BYTE 1 ;16-bitni rezultat iz ADC
MeritevAL_direkt: .BYTE 1
MeritevBH_direkt: .BYTE 1 ;16-bitni rezultat iz ADC
MeritevBL_direkt: .BYTE 1
CifraPredznak: .BYTE 1
Cifra10000: .BYTE 1
Cifra1000: .BYTE 1
Cifra100: .BYTE 1 ; pretvorba BIN -> ASCII
Cifra10: .BYTE 1
Cifra1: .BYTE 1
BlkCntH: .BYTE 1
BlkCntL: .BYTE 1
BlokMeritev: .BYTE 1024
;EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
;EEEEE konstante procesa v EEprom-u EEEEEE
;EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
; te vrednosti tukaj so že prej definirane kot konstante (EQU)
.ESEG
EEzacetek:
EEchecksum:
.DB 128 ; Check-sum (XOR) vseh sledečih podatkov
EEzacetekParametrov:
EEmejaDH: ; (mejaH:mejaL)
.DB dcMejaDH ; meja med dobrimi in slabimi magneti
EEmejaDL:
.DB dcMejaDL
EEpavzaADC: ; (CasSample)
.DB dcPavzaADC ; pavza med vzorci ADC pri meritvah
;==============================================================================
.CSEG ; programski pomnilnik
; ===== DEFINICIJE INTERRUPT VEKTORJEV ========================================
; pogoji: BOOTRST = 0, IVSEL = 0
; Address
; Code Label Comment
.ORG 0x000
jmp iRESET ; Reset Handler
.ORG INT0addr
jmp iEXT_INT0 ; IRQ0 Handler
.ORG INT1addr
jmp iEXT_INT1 ; IRQ1 Handler
.ORG INT2addr
jmp iEXT_INT2 ; IRQ2 Handler
.ORG OC2addr
jmp iTIM2_COMP ; Timer2 Compare Handler
.ORG OVF2addr
jmp iTIM2_OVF ; Timer2 Overflow Handler
.ORG ICP1addr
jmp iTIM1_CAPT ; Timer1 Capture Handler
.ORG OC1Aaddr
jmp iTIM1_COMPA ; Timer1 CompareA Handler
.ORG OC1Baddr
jmp iTIM1_COMPB ; Timer1 CompareB Handler
.ORG OVF1addr
jmp iTIM1_OVF ; Timer1 Overflow Handler
.ORG OC0addr
jmp iTIM0_COMP ; Timer0 Compare Handler
.ORG OVF0addr
jmp iTIM0_OVF ; Timer0 Overflow Handler
.ORG SPIaddr
jmp iSPI_STC ; SPI Transfer Complete Handler
.ORG URXCaddr
jmp iUSART_RXC ; USART RX Complete Handler
.ORG UDREaddr
jmp iUSART_UDRE ; UDR Empty Handler
.ORG UTXCaddr
jmp iUSART_TXC ; USART TX Complete Handler
.ORG ADCCaddr
jmp iADC_CC ; ADC Conversion Complete Interrupt Handler
.ORG ERDYaddr
jmp iEE_RDY ; EEPROM Ready Handler
.ORG ACIaddr
jmp iANA_COMP ; Analog Comparator Handler
.ORG TWSIaddr
jmp iTWSI ; Two-wire Serial Interface Interrupt Handler
; ===== PROGRAM ===============================================================
.ORG 0x02A
; ===== INTERRUPT RUTINE ======================================================
iRESET: jmp PROGRAM_START ; Reset Handler
; ===== INICIALIZACIJA ========================================================
PROGRAM_START:
ldi Rtemp,high(RAMEND) ; Main program start
out SPH,Rtemp ; Set Stack Pointer to end of RAM
ldi Rtemp,low(RAMEND)
out SPL,Rtemp
; globalni izklop interruptov
cli
; nastavitev IO portov A, B, C, D
clr Rtemp ; brisanje izhodov
out PORTA, Rtemp
out PORTB, Rtemp
out PORTC, Rtemp
out PORTD, Rtemp
|
Moja podporna knjižnica za premetavanje in izpis številk:
Koda: |
; *************************************************************************************************
; * Konverzija BIN 0-255 => DEC potrebuje registra Cnt, Rtemp in 3 lokacije v RAM-u
; * vhod = Rtemp
; * izhod = Cifra100, Cifra10, Cifra1
; *************************************************************************************************
BIN2ASCII:
clr Cnt
sts Cifra100, Cnt
sts Cifra10 , Cnt
sts Cifra1 , Cnt
b2a_re100: inc Cnt
subi Rtemp, 100
brcc b2a_re100 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje 100 (ni overflow)
; C=0 ... negativen rezultat -> popravimo in nadaljujemo z odštev. 10
dec Cnt
sts Cifra100, Cnt
ldi Rtemp2, 100
add Rtemp, Rtemp2 ; korekcija: Rtemp + 100 -> Rtemp
clr Cnt
b2a_re10: inc Cnt
subi Rtemp, 10
brcc b2a_re10 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje 100 (ni overflow)
; C=0 ... negativen rezultat -> popravimo in nadaljujemo z odštev. 10
dec Cnt
sts Cifra10, Cnt
ldi Rtemp2, 10
add Rtemp, Rtemp2 ; korekcija: Rtemp + 10 -> Rtemp
; enice
ldi Rtemp2, 48 ; offset cifer v ASCII tabeli
add Rtemp, Rtemp2
sts Cifra1, Rtemp
lds Rtemp, Cifra10
add Rtemp, Rtemp2 ; offset cifer v ASCII tabeli
sts Cifra10, Rtemp
lds Rtemp, Cifra100
add Rtemp, Rtemp2 ; offset cifer v ASCII tabeli
sts Cifra100, Rtemp
RET
; *************************************************************************************************
BIN2ASCII_Wsig:
push WorkH
push WorkL
ldi Rtemp, '+'
sts CifraPredznak, Rtemp
tst WorkH
brpl B2A_continue ; pozitivna številka
; negativna številka
ldi Rtemp, '-'
sts CifraPredznak, Rtemp
ldi Rtemp, 0x00 ; negacija spodnjih 8 bitov
sub Rtemp, WorkL
mov WorkL, Rtemp
ldi Rtemp, 0x00 ; negacija zgornjih 8 bitov
sbc Rtemp, WorkH
mov WorkH, Rtemp
rjmp B2A_continue
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;$$ 16-bitna konverzija BIN 0-65535 => DEC potrebuje registra Cnt, WorkH,L in 5 lokacij v RAM-u
;$$ vhod = WorkH:WorkL
;$$ izhod = Cifra10000, Cifra1000, Cifra100, Cifra10, Cifra1
;$$ ohrani WORKH:WORKL
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
BIN2ASCII_W:
push WorkH
push WorkL
B2A_continue: ; iz predznačenega dela tukaj nadaljuje
clr Cnt
sts Cifra10000 , Cnt
sts Cifra1000 , Cnt
sts Cifra100 , Cnt
sts Cifra10 , Cnt
sts Cifra1 , Cnt
; 10000 = 27h 10h
; 1000 = 03h E8h
; 100 =
; 10 = 10
; 1 = 1
clr Cnt
ldi Rtemp, 0x10 ; low(10.000)
ldi Rtemp2,0x27 ; high(10.000)
b2aw_re5:
inc Cnt
sub WorkL, Rtemp ; low(10.000)
sbc WorkH, Rtemp2 ; high(10.000)
brcc b2aw_re5 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje (ni overflow)
; C=0 ... negativen rezultat -> popravimo in nadaljujemo z nasl. odštev.
dec Cnt
sts Cifra10000, Cnt
; korekcija: Rtemp + 10.000 -> Rtemp
add WorkL, Rtemp
adc WorkH, Rtemp2
clr Cnt
ldi Rtemp, 0xE8 ; low(1.000)
ldi Rtemp2,0x03 ; high(1.000)
b2aw_re4:
inc Cnt
sub WorkL, Rtemp
sbc WorkH, Rtemp2
brcc b2aw_re4 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje (ni overflow)
; C=0 ... negativen rezultat -> popravimo in nadaljujemo z nasl. odštev.
dec Cnt
sts Cifra1000, Cnt
; korekcija: Rtemp + 1.000 -> Rtemp
add WorkL, Rtemp
adc WorkH, Rtemp2
clr Cnt
ldi Rtemp, 100 ; low(100)
ldi Rtemp2, 0 ; high(100)
b2aw_re3:
inc Cnt
sub WorkL, Rtemp
sbc WorkH, Rtemp2
brcc b2aw_re3 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje (ni overflow)
; C=0 ... negativen rezultat -> popravimo in nadaljujemo z nasl. odštev.
dec Cnt
sts Cifra100, Cnt
; korekcija: Rtemp + 100 -> Rtemp
add WorkL, Rtemp
adc WorkH, Rtemp2
clr Cnt
ldi Rtemp, 10 ; low(10)
ldi Rtemp2, 0 ; high(10)
b2aw_re10:
inc Cnt
sub WorkL, Rtemp
sbc WorkH, Rtemp2
brcc b2aw_re10 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje 100 (ni overflow)
; C=0 ... negativen rezultat -> popravimo in nadaljujemo z odštev. 10
dec Cnt
sts Cifra10, Cnt
; korekcija: Rtemp + 10 -> Rtemp
add WorkL, Rtemp
adc WorkH, Rtemp2
; enice
ldi Rtemp2, 48 ; offset cifer v ASCII tabeli
add WorkL, Rtemp2
sts Cifra1, WorkL
lds Rtemp, Cifra10
add Rtemp, Rtemp2 ; offset cifer v ASCII tabeli
sts Cifra10, Rtemp
lds Rtemp, Cifra100
add Rtemp, Rtemp2 ; offset cifer v ASCII tabeli
sts Cifra100, Rtemp
lds Rtemp, Cifra1000
add Rtemp, Rtemp2 ; offset cifer v ASCII tabeli
sts Cifra1000, Rtemp
lds Rtemp, Cifra10000
add Rtemp, Rtemp2 ; offset cifer v ASCII tabeli
sts Cifra10000, Rtemp
pop WorkL
pop WorkH
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;==============================================================================
; izpis 8-bitne cifre na LCD
LCD_WR_NUM8:
call bin2ascii
rjmp LWN16_8
RET
;==============================================================================
; izpis 16-bitne cifre na LCD
LCD_WR_NUM16:
call bin2ascii_W
lds I2C_dataIO, Cifra10000
call LCDPUTCHAR
lds I2C_dataIO, Cifra1000
call LCDPUTCHAR
LWN16_8: lds I2C_dataIO, Cifra100
call LCDPUTCHAR
lds I2C_dataIO, Cifra10
call LCDPUTCHAR
lds I2C_dataIO, Cifra1
call LCDPUTCHAR
RET
;==============================================================================
; izpis 16-bitne predznačene cifre na LCD
LCD_WR_NUM16sig:
call bin2ascii_Wsig
lds I2C_dataIO, CifraPredznak
call LCDPUTCHAR
lds I2C_dataIO, Cifra10000
call LCDPUTCHAR
lds I2C_dataIO, Cifra1000
call LCDPUTCHAR
lds I2C_dataIO, Cifra100
call LCDPUTCHAR
lds I2C_dataIO, Cifra10
call LCDPUTCHAR
lds I2C_dataIO, Cifra1
call LCDPUTCHAR
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Feb 06, 2008 3:21 pm Naslov sporočila: |
|
|
spy je napisal/a: |
Silvo programira v AVRjih? Bravo!! Kar tako dalje...
|
Ja res...
K temu je precej pripomogel Darko. (Njegov programator, ter nekaj primerkov mikrokontrolerjev, ki mi jih je podaril) Zelo težko namreč doma nekaj gledam, pa da to ne probam
Nekako pa tudi sam želim spoznati in si ustvariti svoje menje glede PIC <->Avr.
Mikrokontroler sem šele dan ali dva nazaj dal na testno ploščo z namenom, da sprobam programator. Za pinout je bil potreben datashet, tako se je začelo... Dokumentacijo sem ravno iztiskal.
Lahko pa napišem že nekaj občutkov.
AvrStudio je izredno dobro orodje. Ima tudi dober assemblerski help, tako da poleg datasheta mikrokontrolerja skoraj ne potrebuješ ničesar drugega. Ja seveda, programator. Tudi darkotov programator je odličen.
Začel sem z ATTINY26L (darkotovo darilo). Le tega bi lahko v grobem primerjal z PIC16F88. Razlike v arhitekturi so seveda očitne. (drugačna organizacija pomnilnika, rama.., več prekinitvenih vektorjev, drugačen sklad...) V načinu programiranja v sammem assemblerju pa ne vidim tako zelo veliko razlik. Instrukcij je sicer več imenujo se drugače, so pa funkcijsko podobne ali enake pic-ovim. Za enkrat ne pričakujem nekih velikih težav. V prihodnjih dneh gre na protobord še kak displej.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Feb 06, 2008 3:26 pm Naslov sporočila: |
|
|
Aly hvala za tale košček kode.
PS
Sem se že bal, da bom edini assemblerjaš.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Sre Feb 06, 2008 4:37 pm Naslov sporočila: |
|
|
Silvo banke nič ne pogrešaš?
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Feb 06, 2008 4:55 pm Naslov sporočila: |
|
|
gumby je napisal/a: |
Silvo banke nič ne pogrešaš?  |
Pogrešam, pogrešam
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Feb 06, 2008 9:36 pm Naslov sporočila: |
|
|
Evo še se igram - usposobil sem en timer ter T0 prekinitev probal branje vhoda (tipka) Koda je sicer zmedena, ker gre pred vsem za testiranje instrukcij ter vgrajene periferije. Jutri že gre na testno ploščo nekaj 7-segmentih led displejev.
PS
Na forumu vas je cel kup, ki ste nabavili darkotov programator. Se mi bo še kdo pridružil?
Koda: |
include "tn26def.inc"
.def STEVEC=r10
.org $000
rjmp GLAVNI
.org $006 ;prekinitveni vektor T0
rjmp PREKINITEV_T
.org $0c
GLAVNI:
ldi r16,RAMEND
out SP,r16
ldi r16,0xff
out DDRB,r16
ldi r16,3
out TCCR0,r16
sbi DDRA,0 ;pin RA0 izhod
sbi PORTA,0 ;pin RA0 visok
sbi PORTA,1
sei ;generalni vklop prekinitve (status register bit 7)
ldi r16,0b00000010 ;vklop prekinitve T0
out TIMSK,r16
ldi r16,0b00000001 ;
out TCCR0,r16
ZZ1:
sbic PINA,1
rjmp ZZ1
ldi r16,25
mov STEVEC,r16
;rcall PREKINITEV_T
ZANKA:
ldi r16,0b0001000
mov r3,r16
out PORTB,r16
rcall PAVZA
clc
rol r3
mov r16,r3
out PORTB,r16
rcall PAVZA
clc
rol r3
mov r16,r3
out PORTB,r16
rcall PAVZA
clc
rol r3
mov r16,r3
out PORTB,r16
rcall PAVZA
// rcall BLINK
rjmp ZANKA
PAVZA:
ldi r16,0xff
mov r1,r16
mov r2,r16
Z1:
dec r1
mov r16,r1
cpi r16,0
brne Z1
ldi r16,0xff
mov r1,r16
dec r2
mov r16,r2
cpi r16,0
brne Z1
ret
PREKINITEV_T:
dec STEVEC
breq SEKUNDA
reti
SEKUNDA:
rcall BLINK
ldi r16,250
mov STEVEC,r16
reti
BLINK:
sbic PORTA,0
rjmp LED_OFF
sbi PORTA,0
ret
LED_OFF:
cbi PORTA,0
ret |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|