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

[AVR][C] Terminal i przyciski

panati 01 Lis 2009 11:12 1278 3
REKLAMA
  • #1 7201236
    panati
    Poziom 2  
    mam problem, bo nie wiem jak wyświetlić komunikat z numerem wciśnietego przycisku (button). Działam na symulatorze hapsim i włączam ATmege128. Można to zrobić pewnie przez swich- case, ale czy da się to zrobić krócej ?
    Ten program akurat po naciśnięciu klawiszu na klawiaturze wysyła "x" do terminala.
    I pytanie w jaki sposób zrobić tak, aby po wciśnięciu właśnie buttona wyskakiwał komunikat z numerem wciśniętego przycisku.

    
    
    void UART_init(void)
    {
    UBRR0H = (UART_CONST >> 8); // ustaw predkosc transmisji
    UBRR0L = (UART_CONST & 0xFF);
    _UCR_ = _BV(RXEN)|_BV(TXEN); // załacz tx, rx
    }
    // wysyła znak podany jako parametr na port szeregowy
    void UART_putchar (char c)
    {
    UDR0 = c; // wpisz c do rejestru UDR
    loop_until_bit_is_set(_USR_,TXC); // czekaj na zakonczenie transmisji
    sbi(_USR_,TXC); // ustaw bit TXC w rej. USR
    }
    // odbiera znak z portu szeregowego i zwraca go jako wartosc funkcji
    char UART_getchar (void)
    {
    loop_until_bit_is_set(_USR_,RXC); // czekaj na zakonczenie odbioru
    cbi(_USR_,RXC); // skasuj bit RXC w rej. USR
    return UDR0; // zwróc zawartosc rejestru UDR
    }
    int main(void) // program główny
    {
    
    UART_init(); // inicjalizacja portu szeregowego
    sbi(LED_PORT_D,LED_BIT); // uyj linii jako wyjscia
    while(1) // petla nieskonczona
    {
    
    //UART_putchar(UDR0); //wczytaj z klawiatury
    UART_putchar('x');
    UART_getchar(); // czekaj na znak z portu szeregowego
    
    }
    }
    


    ktoś pomoże? : (
  • REKLAMA
  • #2 7205478
    panati
    Poziom 2  
    dobra.. mam teraz taki kod.. tylko teraz mi nie chce wyświetlać nic w terminalu.. co jest nie tak?

    
    int main(void) // program główny
      {
      DDRB = 0xFF;
      PORTB = 0xFF;
    UART_init(); // inicjalizacja portu szeregowego
    sbi(LED_PORT_D,LED_BIT); // uyj linii jako wyjscia
    char odebrano;
    while(1) // petla nieskonczona
    {
    
    odebrano=UART_getchar();
    if(odebrano==PD0)
    {
    UART_putchar(odebrano);
    }
    }
    
  • REKLAMA
  • #4 7206925
    qw3r
    Poziom 10  
    y no właśnie nie działa ( ;
    Zrobiłem już na swich-case i działa (:
    
     switch (PINB)
          {
             case 1:
       cbi(LED_PORT_O,LED_BIT); // zapal diode LED
    UART_putchar('1'); // wyslij '1' na port szeregowy
    UART_getchar(); // czekaj na znak z portu szeregowego
             break;
    


    btw tamto konto było kolegi.. :d
REKLAMA