Úkol_potřebuji poradit – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Úkol_potřebuji poradit – Assembler – Fórum – Programujte.comÚkol_potřebuji poradit – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
fdgd
~ Anonymní uživatel
2 příspěvky
3. 2. 2015   #1
-
0
-

Dobrý den, potřeboval ybch poradit s projektem. Tohle je moje zadání: Na zvoleném portu počítače zobrazte pomocí led diod níže uvedenou sekvenci jednotlivých stavů (odpovídá světelným efektům semaforu). Časová prodleva mezi změnou jednotlivých stavů bude 1s, která bdue generována 16bit čítačem-časovačem s využitím obsluhy přerušení. Provádění programu bude možno odstartovat stistem tlačítka S1(funkce tlačítka start sekvence). Po stisku tlačítka S1, proběhne sekvence pouze jednou, k provedení (zopakování) celé sekvence bude třeba znovu stisknout tlačítko S1. Tlačítko S2 kitu bude přepínat mezi pracovním a klidovým režimem semaforu, kdy bude zobrazován stav [3] s periodou zobrazení 1s (bude svítit přerušovaně). kombinace zobrazované na portu počítače [0] 00000111; [1] 00011111; [2] 11100000; [3] 00011000; [4] 00000111; V první fázi tvorby programu nakreslete příslušný vývojový diagram

A tady je můj problém, který je relativně funkční, ale nevím, jak do toho přidat tlačítka. Nemohl by mi někdo poradit?

.NOLIST
.include    "m32def.inc"
.LIST
.DEF    Tmp = R17
.DEF    pom = r18
.DEF    citac = R0
.DEF    pom_int = R1
rjmp main

;************* vektory preruseni
reti ;RESET  Reset Handler
reti ;EXT_INT0  IRQ0 Handler
reti ;EXT_INT1  IRQ1 Handler
reti ;EXT_INT2  IRQ2 Handler
reti ;TIM2_COMP  Timer2 Compare Handler
reti ;TIM2_OVF  Timer2 Overflow Handler
reti ;TIM1_CAPT  Timer1 Capture Handler
reti ;TIM1_OVF  ;Timer1 Overflow Handler
reti ;TIM1_COMPB ; Timer1 CompareB Handler
reti ;EE_RDY  EEPROM Ready Handler
reti ;TIM0_COMP  Timer0 Compare Handler
reti ;TIM0_OVF  Timer0 Overflow Handler
reti ;SPI_STC  SPI Transfer Complete Handler
rjmp TIM1_COMPA;  Timer1 CompareA Handler
reti ;USART_RXC  USART RX Complete Handler
reti ;USART_UDRE  UDR Empty Handler
reti ;USART_TXC  USART TX Complete Handler
reti ;ADC  ADC Conversion Complete Handler
reti ;ANA_COMP  Analog Comparator Handler
reti ;TWI  Two-wire Serial Interface Handler
reti ;SPM_RDY  Store Program Memory Ready Handler
;************** obsluha preruseni pro citac TC0

TIM1_COMPA:    in        pom_int,SREG    //muze se stat ze inc citac zmeni navesti ve stavovem registru
            out        SREG,pom_int    //pro vylouceni vedlejsiho ucinku je ulozen predchozi stav ***
            inc     pom
        //    ldi        tmp,250            //preddelickou mame vydeleno na 15625 / kit bezi 16MHZ takze 62500
        //    cpse    pom,tmp            //tak nechame projit kazdy 125ty krok a ziskame 125HZ / nebo 250HZ
        //    rjmp    ven
            ldi        pom,0            //reset pomu
            inc        r20
            cpse    r20,r21    
            rjmp    ven
            

            ldi        r20,0

ven:        out        SREG,pom_int    //a zde je vlozen zpet***
            reti
;************** hlavni program - zacatek
main:    
;************** inicializace zasobniku
            ldi tmp,HIGH(RAMEND)
            out    SPH,tmp
            ldi    tmp,LOW(RAMEND)
            out    SPL,tmp
            ldi r20,0
            ldi r21,4
;************** inicializace SW citace
            ldi tmp,0
            mov citac,tmp
;************** nastaveni preddelicky na deleni 1
            ldi tmp,0x01  //pak nastavit na 0x03 a bude to pro 256
            out TCCR1B,tmp
            ldi    tmp,0xFA  //nastaveni hodnoty 64000 pro komparátor A
            out    OCR1AH,tmp
;************** nastaveni smeru prenosu portu B je vystup
            ldi tmp,0xFF
            out DDRB,tmp
;************** povoleni preruseni citace/casovace1
            ldi tmp,0x10 //v rezimu komparatoru A
            out TIMSK,tmp
;************** povoleni vsech preruseni
            sei            //instrukce sei globalni povoleni preruseni
            ldi    pom,0    //vyresetovani meho pomocneho registru

cyklus:        rcall    vystup
            cpi        r20,1
            breq    ct_tab1
            cpi        r20,2
            breq    ct_tab2
            cpi        r20,3
            breq    ct_tab3
            rjmp       cyklus

vystup:     mov        tmp,citac
            out        PORTB,tmp
            ret

ct_tab1:        
            LDI     ZL,LOW(Tab*2)                                    
            adiw    ZL,0
            LPM
            MOV     citac,R0
            rjmp    cyklus

ct_tab2:        
            LDI     ZL,LOW(Tab*2)                                    
            adiw    ZL,1
            LPM
            MOV     citac,R0
            rjmp    cyklus
                    
ct_tab3:            
            LDI     ZL,LOW(Tab*2)                                    
            adiw    ZL,2
            LPM
            MOV     citac,R0
            rjmp    cyklus

tab:
.DW    0x071F, 0xFFE0

Nahlásit jako SPAM
IP: 78.128.154.–
Reklama
Reklama
hlucheucho+10
Posthunter
3. 2. 2015   #2
-
0
-

Nebylo by od věci nám napsat na jakém procesoru to je. Hádám AVR.  Tlačítka máš připojené k portu procesoru. Je třeba vědět ke kterému a jak jsou ošetřeny kmitání kontaktů při stisku a uvolnění tlačítka. Změnu stavu tlačítek lze bud zjistit pravidelným čtením příslušného portu nebo, pokud to příslušné bity portu umožňují (u některých AVR to umožňují celé porty - On Pin Change Interrupt), obsluhovat externí přerušení. Po stisku tlačítka S1 provedeš sekvenci požadovaných stavů jednou, pak skončíš v nekonečné smyčce nebo lépe v Idle Mode (možná by šlo i Power Down). Musíš si utvořit proměnnou pro uložení stavu provoz/klid a tu měnit stiskem tlačítka S2. Podle stavu této proměnné pak zvolit příslušný režim viz zadání.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e478:81...–
fdgd
~ Anonymní uživatel
2 příspěvky
3. 2. 2015   #3
-
0
-

Ano je to AVR, kit EvB 4.3 v4, ATMega32. Jde o to, že tento program jsme dávali dohromady ve více lidech a ani jeden tomu pořádně nerozumíme, potřebovali bychom příklad nějaké kódu

Nahlásit jako SPAM
IP: 78.128.154.–
hlucheucho+10
Posthunter
3. 2. 2015   #4
-
0
-

Podle schématu tlačítka budou zapojená jak si je zadrátuješ, např. na port D - S1 na PD2, S2 na PD3, tak získáš možnost obsluhy tlačítek přes externí přerušení INT0, INT1. Příslušné bity portu nastavíš jako vstupní (zápis do DDR registru, viz datasheet). Aktivní úroveň (při stisknutém tlačítku) bude L, z tohoto důvodu bude vhodné použít přerušení při sestupné hraně. Pro správnou funkci doporučuji připojit ještě Pull Up rezistory asi 10k. K tlačítku paralelně kondenzátor 100nF pro odstranění jevů ze zákmitů kontaktů tlačítek.

Řešil bych to jako stavový automat, v nějakém registru bych si evidoval jeho stav (klid, provoz, proběhnout sekvenci po stisku S1) - pojmenujme ho třeba "status".

Celý program je přerušením řízený. INT0 a INT1 obsluhují tlačítka, časovač např. Timer1, pak generuje časové intervaly - asi bude generovat menší interval a 1s se určí jako násobek tohoto intervalu. Vždy po vypršení 1s inkrementuj čítač - pojmenujme ho třeba "počitadlo". Tlačítka budou zapisovat stav do "status". V hlavní smyčce bych provedl zápis na výstup podle "status" a "počitadlo" a pak procesor uvedl do Idle.

hu

Nahlásit jako SPAM
IP: 193.86.81.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 253 hostů

Podobná vlákna

Potrebujem poradiť — založil stevo

Potřebuju poradit — založil Pechy

Potrebujem poradiť C++ — založil toso992

Potřebuji poradit — založil Robert

Poradit s úlohou — založil elijax

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý