Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #define F_CPU 7372800UL
  2.  
  3. #include <avr/io.h>
  4. #include <avr/interrupt.h>
  5. #include <util/delay.h>
  6. uint8_t tmp = 0xff;
  7. uint8_t flag = 0;
  8. uint8_t left = 0b01111111;
  9. uint8_t right = 0b11111110;
  10. uint16_t top = 13000;
  11. uint16_t step = 500;
  12. ISR(TIMER1_COMPA_vect)
  13. {
  14. if(PORTA == 0b11110111)
  15. {
  16. PORTA = 0xff;
  17. left = 0b01111111;
  18. right = 0b11111110;
  19. flag = 0;
  20.  
  21. }
  22. else
  23. {
  24.  
  25. if (flag == 0)
  26. {
  27. PORTA = left;
  28. left = left >> 1;
  29. left = left + 0b10000000;
  30. flag = 1;
  31. }
  32. else if (flag == 1)
  33. {
  34. PORTA = right;
  35. right = right << 1;
  36. right = right + 0x01;
  37. flag = 0;
  38. }
  39.  
  40. }
  41. }
  42. ISR(INT0_vect)
  43. {
  44. if(OCR1A > step)
  45. {
  46. OCR1A = OCR1A - step;
  47. }
  48.  
  49. }
  50. ISR(INT1_vect)
  51. {
  52. if(OCR1A < top-step)
  53. {
  54. OCR1A = OCR1A + step;
  55. }
  56. }
  57.  
  58.  
  59. int main(void)
  60. {
  61. DDRA = 0xff;
  62. PORTA = 0xff;
  63.  
  64. DDRB = 0x00;
  65. PORTB = _BV(0) | _BV(1);
  66.  
  67. TCCR1A = 0x00;
  68. TCCR1B = _BV(WGM12) | _BV(CS11) | _BV(CS10);
  69. OCR1A = 25519;
  70.  
  71. TIMSK = _BV(OCIE1A);
  72. MCUCR = _BV(ISC01) | _BV(ISC11);
  73. GICR = _BV(INT0) | _BV(INT1);
  74. sei();
  75.  
  76. while(1)
  77. {
  78. if(bit_is_clear(PINB, 0))
  79. {
  80. if(OCR1A > step)
  81. {
  82. OCR1A = OCR1A - step;
  83.  
  84. }
  85. _delay_ms(150);
  86. }
  87.  
  88. if(bit_is_clear(PINB, 1))
  89. {
  90. if(OCR1A < top-step)
  91. {
  92. OCR1A = OCR1A + step;
  93. }
  94. _delay_ms(150);
  95. }
  96. }
  97.  
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement