Jump to content
Sign in to follow this  
Евгений33

Использование Usart В Mega162

Recommended Posts

Добрый вечер! Накидал небольшую программку для того что бы передавать данные с 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;
	 }  

	}

}

Share this post


Link to post
Share on other sites

while(((UCSR0A & 10000000)|(UCSR1A & 10000000))==0);

Я не анализировал Ваш алгоритм, т.к. это бесполезно :D .

10000000 - это 10 миллионов :D , хоть Вы явно имели в виду 0x80. Исправьте и проверьте.

Двоичные числа по-моему надо писать типа 0b10000000. Точно не знаю, т.к. предпочитаю hex - 0х .

Share this post


Link to post
Share on other sites

И логическое ИЛИ надо подправить, и точки с запятой после условия надо убрать


while(((UCSR0A & 0b10000000)||(UCSR1A & 0b10000000))==0)



Edited by TDSS

Иван Сусанин - первый полупроводник

Share this post


Link to post
Share on other sites

Металл-композит как альтернатива ферриту: дроссели Panasonic семейства ETQP

Современные электронные устройства требуют все более компактных и эффективных компонентов. Новые металл-композитные дроссели обладают рядом преимуществ перед дросселями с ферритовым сердечником. Они не имеют ярко выраженного насыщения, обладают отличными частотными свойствами и способны работать при температурах до 150°C и выше. Все это делает их альтернативой стандартным дросселям с ферритовым сердечником в широком спектре автомобильных и промышленных приложений.

Подробнее

Как раз первая строка работает так как надо, все начинается после того, когда встает один из флагов и программа идет в выбор условия.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By dron92
      Подскажите как вернуть к жизни контролер или в утиль!
      Решил собрать программатор AVRISP mkII купил микросхему собрал подключил а устройств нет в диспетчере и  Flip не видит его!
      Начал искать косяки в сборке не нашел решил спаять Отладочная плату
      тот же результат, попробовал подключить через ISP не отвечает !
      Решил пойти на крайние меры  подключил через FuseDoctor сигнатуру он не видел вел 1e9482 вроде увидел но результата сбросить не проучилось но теперь он начал видится в таком формате фото внизу




    • Guest Виктор
      By Guest Виктор
      Здрасте, я хочу разобраться как работает и программируется мк и для этого выбрал среду разработки AtmelStudio. Привлекла она тем, что в ней есть симуляторы микроконтроллеров и покупать отладочные платы с мк не нужно, чтобы просто проверить код, что в какой регистр записывается и т.д. Захотел заглянуть в заголовочный файл, нашёл там строки:
      if __AVR_ARCH__ >= 100
      #    define __SFR_OFFSET 0x00
      #  else
      #    define __SFR_OFFSET 0x20
      #  endif
      P.S. модель взял atmega16
      Стал искать документацию по этому файлу... так и не нашёл. Потом пришла идея посмотреть значение __AVR_ARCH__ через отладку, поставил там точку, нажал на запуск с отладкой, но не вышло... отладчик сразу переходит на функцию мейн. Подумал, что может это препроцессорная директива, поэтому и не заходит, но потом наткнулся на это: https://docs.microsoft.com/ru-ru/visualstudio/debugger/navigating-through-code-with-the-debugger?view=vs-2019 ... там в конце темы показано что в VS можно отлаживать и исходники. Пытался найти такие же настройки в Atmelstudio... не нашёл. Помогите пожалуйста, есть ли такая возможность в AtmelStudio посмотреть значения констант и переменных в заголовочных файлах?



    • By pedrofan
      Здравствуйте, помогите, пожалуйста, данная программа должна несколько раз инкрементировать введеное с клавиатуры значение, например, если я ввожу 31, то на выходе должно получиться 31 32 33 34, а в протеусе получается вот. Прилагаю код.

      lab_4_1.asm
    • By RIMUS1989i
      Здравствуйте. Затеялся собрать анализатор спектра на светодиодах, 20x20 светодиодов, МК ATMEGA328P. 
      Долго ломал голову, как переключать столбцы без использования МК, дабы его не загружать.И вот что у меня получилось. Набросал тестовую прошивку для теста в протеусе. 
      При инилизации подается импульс на вторую ножку U4a, и на предпоследнем столбце.
      Думал сетку сделать на 5 сдвиговых регистрах (как раз 40 сигнальных линий), но боюсь мощности МК не хватит для обработки FFT и вывода на матрицу, будет подвисать.
      Кто что думает по поводу схемы?
      бегущая строка.pdsprj Natali_2012_program.hex
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
×
×
  • Create New...