Guest User

Untitled

a guest
Jul 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. #define F_CPU 3686400
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5.  
  6. #define BAUD 9600
  7. #define MYUBRR F_CPU/16/BAUD-1
  8.  
  9. void USART_Init( unsigned int ubrr) {
  10.  
  11.     // Baudrate einstellen
  12.     UBRRH = (unsigned char) (ubrr>>8);
  13.     UBRRL = (unsigned char) ubrr;
  14.  
  15.     // Receiver und Transmitter einstellen
  16.     UCSRB = (1<<RXEN) | (1<<TXEN);
  17.  
  18.     // Frame-Format festlegen 8data, 2stop bit
  19.     UCSRC = (1<<USBS)|(3<<UCSZ0);
  20. }
  21.  
  22. unsigned char USART_Receive( void ) {
  23.  
  24.     // Auf empfangene Daten warten
  25.  
  26.     while ( !(UCSRA & (1<<RXC)) );
  27.  
  28.     return UDR;
  29. }
  30.  
  31. void USART_Transmit( unsigned char data ) {
  32.  
  33.     /* Wait for empty transmit buffer */
  34.     while ( !( UCSRA & (1<<UDRE)) );
  35.  
  36.     /* Put data into buffer, sends the data */
  37.     UDR = data;
  38. }
  39.  
  40. char OneWire_Reset( void ) {
  41.  
  42.     char value;
  43.  
  44.     DDRB |= (1<<PB0);
  45.  
  46.     PORTB &= ~(1<<PB0);
  47.  
  48.     _delay_us(496);
  49.  
  50.     PORTB |= (1<<PB0);
  51.  
  52.     _delay_us(65);
  53.  
  54.     DDRB &= ~(1<<PB0);
  55.  
  56.     if(!(PINB & (1<<PINB0)))
  57.         value = '1';
  58.     else
  59.         value = '0';
  60.  
  61.     _delay_us(424);
  62.  
  63.     return value;
  64. }
  65.  
  66. int main (void) {
  67.  
  68.     DDRB = 0xFF;
  69.     PORTB = 0xFF;
  70.  
  71.     USART_Init(MYUBRR);
  72.  
  73.     while(1) {
  74.  
  75.         USART_Transmit(OneWire_Reset());
  76.  
  77.         _delay_ms(2000);
  78.  
  79.     }
  80.  
  81.     return 0;
  82. }
Add Comment
Please, Sign In to add comment