Jump to content

Евгений33

Members
  • Content Count

    2
  • Joined

  • Last visited

Everything posted by Евгений33

  1. Как раз первая строка работает так как надо, все начинается после того, когда встает один из флагов и программа идет в выбор условия.
  2. Добрый вечер! Накидал небольшую программку для того что бы передавать данные с USART0 на USART1 и наоборот, реализовал на Mega162. Весь смысл заключается в том, что мы смотрим в while за флагами RXC регистров UCSR0A и UCSR1A. Как только из него выходим тут же определяем в какой регистр пришли данные с помощью if и флага RXC, и выполняем условия оператора. Но вот беда если с ожиданием все в поряде, то вот со сравнением флагов - косяк, программа действует так как будто оба флага установлены в 1 и выполняет все подряд не взирая на условия. Всю голову себе сломал, ни как не догоняю что не так. #include <mega162.h> #include <stdio.h> void main(void) { unsigned char data; #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif PORTB=0x00; DDRB=0x01; PORTC=0x00; DDRC=0x07; PORTD=0x00; DDRD=0x04; UCSR0A=0x00; UCSR0B=0x18; UCSR0C=0x86; UBRR0H=0x00; UBRR0L=0x52; UCSR1A=0x00; UCSR1B=0x18; UCSR1C=0x86; UBRR1H=0x00; UBRR1L=0x52; ACSR=0x80; while (1) { PORTB=0x00; PORTD=0x00; while(((UCSR0A & 10000000)|(UCSR1A & 10000000))==0); if((UCSR0A & 10000000)==1); { PORTB=0x01; PORTC=0x02; data=UDR0; while ((UCSR1A & 100000)==0); UDR1=data; PORTB=0x00; PORTC=0x00; } if((UCSR1A & 10000000)==1); { PORTD=0x04; PORTC=0x04; data=UDR1; while ((UCSR0A & 100000)==0); UDR0=data; PORTD=0x00; PORTC=0x00; } } }
×
×
  • Create New...