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

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

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


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



Edited by TDSS

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

Share this post


Link to post
Share on other sites

Вебинар «Параметры выше, цена ниже. Обновление в линейке AC/DC- и DC/DC-преобразователей MORNSUN» (26.01.2021)

Приглашаем 26 января на бесплатный вебинар, посвящённый преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре будут рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату. Рассмотрим новую группу продукции – встраиваемые источники питания в кожухе.

Подробнее

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

Share this post


Link to post
Share on other sites

Вебинар "Новый BlueNRG-LP с Bluetooth 5.2 и Long Range — волшебная палочка разработчика IoT" (04/02/2021)

Приглашаем 4 февраля на бесплатный вебинар о BlueNRG-LP - новом программируемом чипе SoC STMicroelectronics. На вебинаре будут детально рассмотрены новые возможности, особенности подключения, аппаратные и программные средства для разработки, а также практические примеры работы с микросхемой.

Подробнее

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  

  • Сообщения


  • Макетная плата МВ102 + блок питания + набор проводов

  • Similar Content

    • By Обычный Человек
      Микроконтроллер ATmega328p, внешний кварц 16МГц. Компилятор avr-gcc с оптимизацией O1

      Написал код для управление шаговым двигателем. Работает так: требуемая скорость задается переменной STP1_ReqSpeed, дальше с частотой 100Гц срабатывает таймер TIM0, который высчитывает с какой частотой надо подавать сигналы на вход шагового драйвера. TIM1 работает в режиме частотно импульсной модуляции и по прерыванию меняет значение пина на противоположное.

      Управление работает, скорость регулируется, но по какой то причине случаются пропуски шагов. Чаще всего во время ускорения. Количество пропусков от 0 до 4, обычно 2-3, длятся 32мс.

      Из кода вырезал неиспользуемое. Заменить прерывания на аппаратный ШИМ возможности нет. Как убрать эти пропуски?
      Осциллограммы:
       
       
    • By Артур Измаилов
      1.Создать схему в которой два светодиоды загораются в следующей последовательности:  1 и 2, 2 и 3, 3 и 4, …, 15 и 16, 1 и 2 и т.д. (т.е. создается эффект движения двух светодиодов).
      Дано условие выше. Решение задачи нужно представить в Proteus. Код для программирования пишу в AtmelStudio 7. Схему собрал в Proteus. Вывел 16 светодиодов через 2 порта (Порт B и Порт D). МК использовал ATMEGA 8 вариации в корпусе DIP с 28 ножками (SPDIL28). 
      До этого смог написать схему, чтобы работали светодиоды в последовательности 1.2.3.4.5....16.1.2.3.4 и тд. Делал через оператор FOR. Однако с этим кодом начались проблемы. Помогите пожалуйста. 
      Нижу представил изображение кода. 
      Заранее спасибо!
       

    • By Lisitsin
      Собираем компьютер ZX Spectrum на микроконтроллерах AVR своими руками!
      Проект открытый, все исходники и информация проекта по ссылке
      https://yadi.sk/d/9S2S0ZmNqsLykQ
      Проект печатной платы выполнен в PCAD-2006, программное обеспечение разработано в AVRStudio  4b401
      Здесь отвечу на все возникающие вопросы и помогу со сборкой и запуском
    • By O5-14
      По поводу этого https://cxem.net/mc/mc220.php девайса. Как напоминалка паролей думал сделать, только в моих краях 1604 нету( Под wg12864 нет случаем модификации ? 
      И что такое значит "Текстовые файлы должны быть в обычном txt формате и без форматирования" - первая часть понятна. А без форматирования ? Одна длинная строка ? Пробелы-то хоть можно ?
    • By Karl-Ieronim
      Коллеги, всем привет. 
      Увидел вот такой проект. 
      Несмотря на явную привлекательность что-то совсем мало повторивших. 
      Может кто-то из завсегдатаев форума делал этот проект? 
      Интересует ваше мнение: хочу повторить, но не силен в программировании, поэтому беспокоюсь на счёт подводных камней с которыми не смогу справиться. 
×
×
  • Create New...