logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega8, uart i Hyper Terminal, dioda led

bullyman 01 Lut 2011 16:34 2188 7
  • #1 9087755
    bullyman
    Poziom 11  
    Jestem początkujący i chciałbym sprawdzić jak działa uart i Hyper Terminal. Chciałem za pomocą instrukcji z klawiatury zapalić diode lecz bez efektu. Prosze o wytknięcie złego rozumowania lub błędów w kodzie.

    #include<avr/io.h>
    #include<avr/interrupt.h>
    
    void UartInit(void);
    void LedInit(void);
    
    volatile char cZnak='3';
    
    int main(){
    
    	UartInit();
    	LedInit();
    	
    	PORTC&=~(1<<PC3);
    	
    	sei();
    	
    	while(1){
    		
    		switch(cZnak){
    		
    		case '1':
    			PORTC&=~(1<<PC3);
    		break;
    			
    		case '2':
    			PORTC|=(1<<PC3);
    		break;
    			
    		default:
    		break;
    		}
    		
                 }
    	
    	return 0;
    }
    
    ISR(USART_RXC_vect){
    	
    	cZnak=UDR;
    }
    
    void UartInit(void){
    	UCSRB|=(1<<RXCIE)|(1<<RXEN);
    	UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    	UBRRL=12;// 9600 bit/s- szybkość transmisji
    }
    void LedInit(void){
    	DDRC=(1<<PC3);
    }
  • #3 9088174
    bullyman
    Poziom 11  
    PRG            = USART
    OBJ            = USART.o
    MCU_TARGET     = atmega8
    OPTIMIZE       = -O2
    
    DEFS           =
    LIBS           =
    
    # You should not have to change anything below here.
    
    CC             = avr-gcc
    
    # Override is only needed by avr-lib build system.
    
    override CFLAGS        = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
    override LDFLAGS       = -Wl,-Map,$(PRG).map
    
    OBJCOPY        = avr-objcopy
    OBJDUMP        = avr-objdump
    
    all: $(PRG).elf lst text eeprom
    
    $(PRG).elf: $(OBJ)
    	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
    
    clean:
    	rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak 
    	rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
    
    lst:  $(PRG).lst
    
    %.lst: %.elf
    	$(OBJDUMP) -h -S $< > $@
    
    # Rules for building the .text rom images
    
    text: hex bin srec
    
    hex:  $(PRG).hex
    bin:  $(PRG).bin
    srec: $(PRG).srec
    
    %.hex: %.elf
    	$(OBJCOPY) -j .text -j .data -O ihex $< $@
    
    %.srec: %.elf
    	$(OBJCOPY) -j .text -j .data -O srec $< $@
    
    %.bin: %.elf
    	$(OBJCOPY) -j .text -j .data -O binary $< $@
    
    # Rules for building the .eeprom rom images
    
    eeprom: ehex ebin esrec
    
    ehex:  $(PRG)_eeprom.hex
    ebin:  $(PRG)_eeprom.bin
    esrec: $(PRG)_eeprom.srec
    
    %_eeprom.hex: %.elf
    	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
    
    %_eeprom.srec: %.elf
    	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
    
    %_eeprom.bin: %.elf
    	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
    
    # Every thing below here is used by avr-libc's build system and can be ignored
    # by the casual user.
    
    FIG2DEV                 = fig2dev
    EXTRA_CLEAN_FILES       = *.hex *.bin *.srec
    
    dox: eps png pdf
    
    eps: $(PRG).eps
    png: $(PRG).png
    pdf: $(PRG).pdf
    
    %.eps: %.fig
    	$(FIG2DEV) -L eps $< $@
    
    %.pdf: %.fig
    	$(FIG2DEV) -L pdf $< $@
    
    %.png: %.fig
    	$(FIG2DEV) -L png $< $@
    

    w którym miejscu powinienem to ustawić?
  • #4 9088236
    LordBlick
    VIP Zasłużony dla elektroda
    Na początku wpisujesz :
    F_CPU=11059200 // Dla zegara 11.0592MHz
    Potem w części dotyczącej flag kompilatora C jako kolejną linijkę :
    CFLAGS += -DF_CPU=${F_CPU}UL


    bullyman napisał:
    # Override is only needed by avr-lib build system.
    
    override CFLAGS        = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
    override LDFLAGS       = -Wl,-Map,$(PRG).map
    Mam wrażenie, że powinieneś te "overide" wy...walić...
    P.S. Nie jestem pewny czy pomimo powyższych zabiegów to zadziała. Poszukaj na forum działających przykładów, bo nie jesteś pierwszą osobą, która pyta w tym temacie...
  • #5 9088320
    bullyman
    Poziom 11  
    a może ja coś zle robie od strony czysto fizycznej, bo z tego co rozumiem to za pomocą hyper terminala wciskając na klawiaturze '1' dioda powinna sie zaswiecić, a czy nie trzeba jakoś tego transformować na kod ASCI? Bo możliwe że ja w programie coś namieszałem. A zegar mam 1Mhz
  • #7 9088381
    bullyman
    Poziom 11  
    tak też myślałem, ale czy bedzie rozróżniał zmiane stanu żeby zaświecić diode. Chyba że ktoś ma inny program którym można sprawdzić działanie uarta.
REKLAMA