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

Prosze o pomoc -program na Atmega 16

mgucio 20 Sty 2010 20:14 960 1
REKLAMA
  • #1 7565604
    mgucio
    Poziom 10  
    Prosze o pomoc
    Jak zmienić ten kod programu by po naciśnięciu konkretnego klawisza klawiatury np. klawisz 'a' ma zaświecić diodę, klawisz 'b' ma zgasić diode.
    Po naciśnięciu innych klawiszy dioda ma niereagować


    #include <avr/io.h>                // dostęp do rejestrów 
    
    // Zmieniając poniższe definicje można dostosować program do potrzeb 
    
    #define F_CPU                16000000ul         // częstotliwość zegara w Hz 
    
    #define LED_PORT        PORTD                // port diody LED 
    #define LED_BIT                4                // bit diody LED 
    
    #define DDR(x) _SFR_IO8(_SFR_IO_ADDR(x)-1) // adr. rej. kier. PORTx 
    #define PIN(x) _SFR_IO8(_SFR_IO_ADDR(x)-2) // adr. rej. wej. PORTx 
    
    #define LED_PORT_O        LED_PORT             // rejestr wyjściowy 
    #define LED_PORT_D        DDR(LED_PORT)   // rejestr kierunkowy 
    #define LED_PORT_I        PIN(LED_PORT)   // rejestr wejściowy 
    
    
    #define cbi(sfr, b) (sfr &= ~(1<<b)) // bit 0 na pin portu 
    #define sbi(sfr, b) (sfr |= (1<<b))  // bit 1 na pin portu 
    
    
    
    // Definicje funkcji 
    
    // inicjalizacja portu szeregowego 
    void UART_Init( unsigned int baud ) 
    { 
       /* Set baud rate */ 
       UBRRH = 0; 
       UBRRL = 51; 
       /* Enable receiver and transmitter */ 
       UCSRB = (1<<RXCIE)|(1<<TXEN)|(1<<RXEN); 
          /* Set frame format: 8data, 1stop bit */ 
       UCSRC = (1<<URSEL)|(3<<UCSZ0); 
    } 
    
    // wysyła znak podany jako parametr na port szeregowy 
    void UART_putchar (unsigned char c) 
    { 
         /* Wait for empty transmit buffer */ 
       while ( !( UCSRA & _BV(UDRE)) ) 
       ; 
    
       /* Put data into buffer, sends the data */ 
       UDR = c; 
    } 
    
    // odbiera znak z portu szeregowego i zwraca go jako wartość funkcji 
    unsigned char UART_getchar (void) 
    { 
         /* Wait for data to be received */ 
       while ( !(UCSRA & (1<<RXC)) ) 
       ; 
       /* Get and return received data from buffer */ 
       return UDR; 
    } 
    
    int main(void)                        // program główny 
    { 
      UART_Init(19200);                        // inicjalizacja portu szeregowego 
    
      sbi(LED_PORT_D,LED_BIT);        // użyj linii jako wyjścia 
    
      while(1)                        // pętla nieskończona 
      { 
        cbi(LED_PORT_O,LED_BIT);        // zapal diodę LED 
        UART_putchar('1');                // wyślij '1' na port szeregowy 
        UART_getchar();                // czekaj na znak z portu szeregowego 
        sbi(LED_PORT_O,LED_BIT);        // zgaś diodę LED 
        UART_putchar('0');                // wyślij '0' na port szeregowy 
        UART_getchar();                // czekaj na znak z portu szeregowego 
      } 
    }
  • REKLAMA
  • #2 7565842
    _Robak_
    Poziom 33  
    zapoznaj sie z funkcjami bit_is_set(PINx,PINn) i bit_is_clear(PINx,PINn)
REKLAMA