Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 7372800UL
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <util/delay.h>
- uint8_t tmp = 0xff;
- uint8_t flag = 0;
- uint8_t left = 0b01111111;
- uint8_t right = 0b11111110;
- uint16_t top = 13000;
- uint16_t step = 500;
- ISR(TIMER1_COMPA_vect)
- {
- if(PORTA == 0b11110111)
- {
- PORTA = 0xff;
- left = 0b01111111;
- right = 0b11111110;
- flag = 0;
- }
- else
- {
- if (flag == 0)
- {
- PORTA = left;
- left = left >> 1;
- left = left + 0b10000000;
- flag = 1;
- }
- else if (flag == 1)
- {
- PORTA = right;
- right = right << 1;
- right = right + 0x01;
- flag = 0;
- }
- }
- }
- ISR(INT0_vect)
- {
- if(OCR1A > step)
- {
- OCR1A = OCR1A - step;
- }
- }
- ISR(INT1_vect)
- {
- if(OCR1A < top-step)
- {
- OCR1A = OCR1A + step;
- }
- }
- int main(void)
- {
- DDRA = 0xff;
- PORTA = 0xff;
- DDRB = 0x00;
- PORTB = _BV(0) | _BV(1);
- TCCR1A = 0x00;
- TCCR1B = _BV(WGM12) | _BV(CS11) | _BV(CS10);
- OCR1A = 25519;
- TIMSK = _BV(OCIE1A);
- MCUCR = _BV(ISC01) | _BV(ISC11);
- GICR = _BV(INT0) | _BV(INT1);
- sei();
- while(1)
- {
- if(bit_is_clear(PINB, 0))
- {
- if(OCR1A > step)
- {
- OCR1A = OCR1A - step;
- }
- _delay_ms(150);
- }
- if(bit_is_clear(PINB, 1))
- {
- if(OCR1A < top-step)
- {
- OCR1A = OCR1A + step;
- }
- _delay_ms(150);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement