Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. //NOWY PROJEKT - sprawdzanie predkosci naciskania 2x klawisza.
  2. //jezeli szybko moze swiecic jedna dioda, jesli wolniej 2 diody, jak przepełni sie licznik to nic.
  3.  
  4. #include <avr/io.h>
  5. #include <avr/interrupt.h>
  6. #include <util/delay.h>
  7.  
  8. #define LED_PIN (1<PB1)
  9. #define KEY_PIN (1<<PD2)
  10. #define KEY_DOWN !(PIND & KEY_PIN)
  11.  
  12. static inline void init_led(void);
  13. static inline void init_switch(void);
  14. static inline void init_timer(void);
  15. static inline void init_exti(void);
  16. uint8_t is_switch_pressed(void);
  17.  
  18. int main(void)
  19. {
  20. init_led();
  21. init_switch();
  22. init_timer();
  23. init_exti();
  24. sei(); //globalne odblokowanie przerwan
  25. while (1)
  26. {
  27. //tu system powiadomien predkosci naciskania
  28. }
  29. }
  30.  
  31. static inline void init_led(void)
  32. {
  33. DDRB |= LED_PIN ;//kierunek pinu na wyjscie LED
  34. PORTB |= LED_PIN ;//wylaczenie LED
  35. }
  36. static inline void init_switch(void)
  37. {
  38. PORTD |= KEY_PIN ;
  39. }
  40. static inline void init_timer(void)
  41. {
  42. OCR1A = 31249;//wartosc przez ktora dzieli sie taktowanie dla 1sekundy
  43. TCCR1B |= (1 << WGM12)//tryb CTC (compare)
  44. | (1 << CS12);//prescaler = 256
  45. }
  46. static inline void init_exti(void)
  47. {
  48. EICRA |= (1 << ISC01);//generowanie przerwan zboczem narastajacym
  49. EIMSK |= (1 << INT0);//maska przerwania - wlaczenie przerwania
  50. }
  51. ISR(TIMER1_COMPA_vect)
  52. {
  53. //if (EIFR | (1 << INTF0))//External Interrupt Flag Register 1 odsyła do wykonania przerwania
  54. //PORTB ^= LED_PIN;//zmien stan led
  55. }
  56. ISR(INT0_vect)
  57. {
  58. //if (is_switch_pressed() && OCR1A >= 1000) //jesli klawisz klikniety
  59. OCR1A -= 1000;//pomniejsz wartosc rejestru porownawczego
  60. if (OCR1A < 1000)
  61. {
  62. OCR1A = 65534;////jesli rejestr dojdzie do zera przekrec go do maxa
  63. }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement