Anonymní profil fdgd – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil fdgd – Programujte.comAnonymní profil fdgd – Programujte.com

 

Příspěvky odeslané z IP adresy 78.128.154.–

fdgd
Assembler › Úkol_potřebuji poradit
3. 2. 2015   #198749

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

fdgd
Assembler › Úkol_potřebuji poradit
3. 2. 2015   #198742

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

 

 

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