Skocz do zawartości

SzymonT

Nowy
  • Zawartość

    5
  • Rejestracja

  • Ostatnio

Reputacja

-10 Słaba

O SzymonT

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. To może sam sobie odpowiem: #define F_CPU 7372800L volatile bool flag=true; int main(void) { sei(); TCCR1B |= 1<<CS11 | 1<<WGM12; TIMSK |= 1<<OCIE1A; OCR1A = 1000; //1.085us for(;;) { Funkcja1(); Funkcja2(); while(flag); flag=true; Funkcja3(); Funkcja4(); while(flag); flag=true; } } ISR(TIMER1_COMPA_vect) { flag=false; } Tak to zrobione jest najbardziej optymalnie? Jak najlepiej wyłączać pracę timera? tak -> TCCR1B &= ~(1 << CS11); ?
  2. Tego się spodziewałem. Tysiąc odpowiedzi, żadnej wartości dodanej.
  3. Algorytm jest prosty i nie wymaga sprostowania. Oczekuję na przykład rozwiązania. Pozdrawiam 5874 postów co? Zaśmiecanie internetu
  4. Witajcie, Chciałbym zrobić coś takiego. Znajduję przykłady przerwań wewnętrznych i zewnętrznych - przy wysterowaniu pinów, jednak czy jest możliwe przerwanie programowe? Jeśli tak to czy ktoś pomoże mi to zrobić? Pewnie jedyna możliwość to połączenie OC1A z INT1 lub PD4 z PD2.. Jak mógłbym modyfikować czas oczekiwania w Funkcjach()? Pozdrawiam int main() { for(;;) { Start_Timera(); Funkcja1(); Funkcja2(); Oczekiwanie_Na_Nadejscie_Przerwania(); Start_Timera(); Funkcja3(); Funkcja4(); Oczekiwanie_Na_Nadejscie_Przerwania(); } }
  5. Witajcie, Mam poprawnie działającą komunikację usart na atmega32L jeśli chodzi o wysyłanie i odbieranie unsigned char. Proszę was o pomoc w stworzeniu buffora słów dla odbieranych znaków. Chciałbym żeby słowo zebrało się w przerwaniu do momentu pojawienia się znaku 0x0A - końca linii. Następnie chcę wykonać kopię. Dokonywać zmian na kopi w funkcji main. Code: #define F_CPU 7372800L #define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #define x 0x78 #define y 0x79 #include <avr/io.h> #include <avr/interrupt.h> #include <string.h> #include <stdlib.h> #include <util/delay.h> volatile char *tabx="x128"; volatile char *taby="y128"; volatile char *tabxx; volatile char *tabyy; volatile stan =0,xx=0; void usart_init(void) { UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; //UCSRA bez zmian - 0x00 UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); } int main(void) { PORTD = 0x02; usart_init(); sei(); for(;;) { char tablx[strlen(tabx)+1]; char tably[strlen(taby)+1]; strcpy(tablx,tabx+1); strcpy(tably,taby+1); int lx = atoi (tablx); int ly = atoi (tably); if(lx>140); //Do_this(); if(ly<120); //Don't_do_this(); } } ISR(USART_RXC_vect) //przerwanie od odbioru danej { static char a; a = UDR; //a ^= 0xff; //UDR = a; if(stan==0) { switch(a) { case(x): stan=1;break; //#define x 0x78 case(y): stan=2;break; //#define y 0x79 } } if(stan==1) { if(a!=0x0A) { tabxx[xx]=a; xx++;} else {stan=0; xx=0; strcpy(tabx, tabxx); } } if(stan==2) { if(a!=0x0A) { tabyy[xx]=a; xx++;} else {stan=0; xx=0; strcpy(taby, tabyy); } } }
×
×
  • Utwórz nowe...