Facebook
From krabeczek, 5 Months ago, written in C.
Embed
Download Paste or View Raw
Hits: 80
  1. /*
  2. * GccApplication5.c
  3. *
  4. * Created: 29.12.2018 14:23:15
  5. * Author : Szymon
  6. */
  7. /*#ifndef F_CPU
  8. #define F_CPU 1000000UL // 16 MHz clock speed
  9. #endif*/
  10.  
  11. #include <avr/io.h>
  12. #include <util/delay.h>
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #define BAUD 9600
  17. #define __UBRR ((F_CPU)/(BAUD*16UL)-1)
  18. #define LF 10
  19. #define CR 13
  20.  
  21.  
  22. void blink_led(int counter)
  23. {
  24.         for(int i=0;i<counter;i++)
  25.         {
  26.                 PORTD |= (1<<4);
  27.                 _delay_ms(300);
  28.                 PORTD &= ~(1<<4);
  29.                 _delay_ms(300);
  30.         }
  31. }
  32.  
  33. void uart_transmit (unsigned char data)
  34. {
  35.         while (!( UCSRA & (1<<UDRE)));                // wait while register is free
  36.         UDR = data;                                   // load data in the register
  37. }
  38.  
  39. unsigned char uart_recieve (void)
  40. {
  41.         while(!((UCSRA) & (1<<RXC)));                   // wait while data is being received
  42.         return UDR;                                   // return 8-bit data
  43. }
  44.  
  45. void uart_init (void)
  46. {
  47.         UBRRH = (__UBRR>>8);                      // shift the register right by 8 bits
  48.         UBRRL = __UBRR;                           // set baud rate
  49.         UCSRB|= (1<<TXEN)|(1<<RXEN); //(1<<RXCIE)) ;              // enable receiver and transmitter
  50.         //UCSRC|= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);   // 8bit data format
  51.         UCSRC = (1<<URSEL)|(3<<UCSZ0);
  52.         UCSRA = (1<<U2X);
  53. }
  54.  
  55. int uart_getstring(char * buffer)
  56. {
  57.         int i=1;
  58.         char c;
  59.         do {
  60.                
  61.                 c = uart_recieve();
  62.                 blink_led(1);
  63.                 if (c != CR) {
  64.                        
  65.                         *buffer++ = c;
  66.                        
  67.                         i++;
  68.                 }
  69.         } while (c != CR);
  70.         //c = uart_recieve();
  71.        
  72.         return i;
  73.         //*buffer = 0;
  74. }
  75.  
  76. void uart_transmit_buffer(char * buffer, int buff_size)
  77. {
  78.        
  79.         for(int i=0; i<buff_size;i++)
  80.         {
  81.                 char t = buffer[i];
  82.                 uart_transmit(t);
  83.                
  84.                
  85.         }
  86.         uart_transmit(CR);
  87.         uart_transmit(LF);
  88.        
  89. }
  90.  
  91.  
  92.  
  93.  
  94. int main(void)
  95. {
  96.         DDRD=0xFF;
  97.        
  98.         char data;
  99.         uart_init();
  100.        
  101.         //int num, hash;
  102.         //char a[12];
  103.         //char silnik;
  104.         //uint8_t L;
  105.         char buffer[14];
  106.         int buff_size;
  107.         //char c = uart_recieve();
  108.         // initialize UA
  109.        
  110.  
  111.         while (1)
  112.         {
  113.                
  114.                 //a=uart_recieve();                   // save the received data in a variable
  115.                 uart_getstring(buffer);        
  116.                 uart_transmit_buffer(buffer, buff_size);
  117.                
  118.                 //silnik = buffer[1];
  119.                 ////scanf(a,"%d %d",&hash, &num);
  120.                 ////int num =atoi(buffer[2,3,4,5]); zle wpisane
  121.                 //switch(silnik /*albo hash[]*/){
  122.                 //case 0: {if(num > 1500)
  123.                 //PORTD |= (1<<3);
  124.                 //else PORTD &= (0<<3); //wylaczamy tranzystor
  125.                 //}
  126.                 //break;
  127.                 //case 1: {if(num > 1500)
  128.                 //PORTD |= (1<<4);
  129.                 //else PORTD &= (0<<4); //wylaczamy tranzystor
  130.                 //}
  131.                 //break;
  132.                 //case 2: {if(num > 1500)
  133.                 //PORTD |= (1<<5);
  134.                 //else PORTD &= (0<<5); //wylaczamy tranzystor
  135.                 //}
  136.                 //break;
  137.                 //case 3: {if(num > 1500)
  138.                 //PORTD |= (1<<6);
  139.                 //else PORTD &= (0<<6); //wylaczamy tranzystor
  140.                 //}
  141.                 //break;
  142.                 //case 4: {if(num > 1500)
  143.                 //PORTD |= (1<<7);
  144.                 //else PORTD &= (0<<7); //wylaczamy tranzystor
  145.                 //}
  146.                 //break;
  147.                 //
  148.                 //default:
  149.                 //break;
  150.                 //}
  151.                 //
  152.                 //
  153.                 //
  154.                
  155.  
  156.                
  157.         }
  158.         return 0;
  159. }
  160.  
  161.  
  162.  
  163.