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

[atmega8][c] naprawa kodu beep

carkar 24 Cze 2010 18:39 1158 6
  • #1 8227362
    carkar
    Poziom 15  
    
    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    void beep(unsigned int frequency, unsigned int duration)
    {
       unsigned int i,t,n;
       t = 125000/frequency;
       n = (250UL*duration)/t;
    
       PORTB |= 0x01;
       PORTB &= ~0x02;
       for(i=0; i < n; i++)
       {
          PORTB ^= 0x01;
          PORTB ^= 0X02;
          _delay_loop_2(t);
       }
    }
    
    int (main) {
    DDRB = 0x03;
    PORTB = 0x00;
    DDRD = 0x0F;
    int i = 1;
    int n;
    while(1) {
    
    switch(i) {
    	case 1: for(n=0;n<1000;n=n+250) {
    	beep(7000+n,2500);
    		switch(PIND) {
    		case 0x01: i = 2;
    		break;
    		case 0x02: i = 3;
    		break;
    		case 0x03: i=4;
    		break;
    	}
    	break;
    	case 2: for(n=0;n<1000;n=n+250) {
    	beep(10000+n,2500);
    		switch(PIND) {
    		case 0x00: i = 1;
    		break;
    		case 0x02: i = 3;
    		break;
    		case 0x03: i=4;
    		break;
    	}
    	break;
    	case 3: for(n=0;n<1000;n=n+250) {
    	beep(12000+n,2500);
    		switch(PIND) {
    		case 0x00: i = 1;
    		break;
    		case 0x01: i = 2;
    		break;
    		case 0x03: i=4;
    		break;
    	}
    	break;
    	case 4: for(n=0;n<1000;n=n+50) {
    	beep(300+n,2500);
    		switch(PIND) {
    		case 0x00: i = 1;
    		break;
    		case 0x01: i = 2;
    		break;
    		case 0x02: i=3;
    		break;
    		}
    	break;
    	}
    }
    }
    


    Czy może mi ktoś powiedzieć co jest źle w tym programie??
  • #2 8227397
    tadzik85
    Poziom 38  
    Brak znajomości języka C to jest złe. switch case wygląda całkowicie inaczej
  • #3 8227948
    carkar
    Poziom 15  
    No tak chwilowy zanik pamięci :)
    Niestety dalej przy kompilacji syntax error
  • #4 8228201
    tadzik85
    Poziom 38  
    wewnętrzne casy łatwiej zrobić na ifach, stosuj tabulatory bo w tak pisanym kodzie łatwiej o błąd a to ktorej lini czepia ci się kompilator?

    Dodano po 7 [minuty]:

    zdaje się ze brak zamknięcia klamry na końcu
  • #5 8230719
    carkar
    Poziom 15  
    Tabulatory gotowe. Teraz możesz mi powiedzieć w czym jest błąd???
  • #6 8230738
    tadzik85
    Poziom 38  
    brak klamry na końcu, i nie o takie tabulatory mi chodziło

    klamra otwierająca i zamykająca powinny być dokładnie w pionie wnętrze wysunięte tabulatorem każda wewnętrzna klamra również. klamry otwierające radzę pisać w nowej linii. Poprawia to czytelność, łatwiej zauważyć gdzie zaczyna i kończy się jakaś pętla czy if.
  • #7 8231447
    carkar
    Poziom 15  
    No brak 5x } i działa. :)
REKLAMA