Например TDA7294

Форум РадиоКот • Просмотр темы - побитовый вывод числа в пин
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 26, 2025 18:16:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: побитовый вывод числа в пин
СообщениеДобавлено: Вс сен 09, 2012 21:00:19 
Первый раз сказал Мяу!

Зарегистрирован: Сб мар 10, 2012 21:14:01
Сообщений: 32
Рейтинг сообщения: 0
Здравствуйте! помогите пожалуйста с кодом
Код:
char buf[] = {     //массив с цифрами
0b00000011, //0
0b10011111, //1
0b00100101, //2
0b00001101, //3
0b10011001, //4
0b01001001, //5
0b01000001, //6
0b00011111, //7
0b00000001, //8
0b00001001, //9
0b11111111
};
unsigned char a;
for(a=0; a<8; a++){                //цикл для вывода 8 бит данных из массива
PORTB.0 = buf[1] & 1<<a;   //выводим в линию DATA текущий бит       

Это пример из CVAVR всем известно что там есть такая фишка как " PORTB.0 ="," PORTC.4 =" и.т и.п а как его переделать под AVR STUDIO вить там пины портов назначаются по другому !?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Вс сен 09, 2012 21:26:16 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Код:

 for
(a=0; a<8; a++){  //цикл для вывода 8 бит данных из массива
 (buf[1] & 1<<a)?(PORTB|=_BV(PB0)):PORTB&=~_BV(PB0) //выводим в линию DATA текущий бит 
 

Что равносильно
Код:

 if 
(buf[1] & 1<<a){PORTB|=_BV(PB0);}
else {PORTB&=~_BV(PB0;}
 

_________________
В поисках истины человек развивается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Вс сен 09, 2012 21:58:46 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
А для большей переносимости, можно и так:
Код:

 
#define PORT_OUT  PORTB  //используемый порт
 #define PIN_OUT  PB0  //Ножка порта для вывода
 #define OUT_SIZE  8  //Количество битов
 
 for
(int i=0; i<OUT_SIZE; i++)
 {
    (buf[1] & (1<<i)) ? (PORT_OUT |= (1<<PIN_OUT)) : (PORT_OUT &= ~(1<<PIN_OUT));
 }
 


Это в виду того, что макрос _BV(Pxy) отсутствует в других средах (типа IAR, Keyl и прочих). К примеру, на STM32 уже будет тяжко перенести. Придется править везде.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Вс сен 09, 2012 23:02:04 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Точно, но вопрос был про студию.А пины лень было писать на телефоне :)
Так же можно сказать про тернарный оператор, тоже не везде есть его обработка.
А насчет макроса, так то можно сделать заголовочный файл - прокладку для облегчения переносимости. Неужели там нет макросов? Студия вроде как не сильно отступает от стандартов си.
Даже ЕЕПРОМ резервного слова нет, все только в макросах.

PS.Есть готовый проект для студии 5 с выводом на сдвиговый регистр.Я так понимаю этот код для этого нужен?
Если нужно могу скинуть.

_________________
В поисках истины человек развивается.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 00:04:11 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Не для холивара...
Код:
 MOV TEMP, ...
 LDI TEMP2,8
LOOP:
 SBRC TEMP,0
 SBI PORTB,_OUT
 SBRS TEMP,0
 CBI PORTB,_OUT
 ROR TEMP
 DEC TEMP2
 BRNE LOOP
...

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 00:11:30 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Неплохо бы пару комментов для сишников :)

_________________
В поисках истины человек развивается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 00:15:09 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
vitalik_1984 писал(а):
Точно, но вопрос был про студию.А пины лень было писать на телефоне :)
Так же можно сказать про тернарный оператор, тоже не везде есть его обработка.
А насчет макроса, так то можно сделать заголовочный файл - прокладку для облегчения переносимости. Неужели там нет макросов? Студия вроде как не сильно отступает от стандартов си.
Даже ЕЕПРОМ резервного слова нет, все только в макросах.

Ну, можно и самому слепить этот макрос. :)
Я какбэ уже стараюсь писать код полностью переносимым, так как те или иные куски потом сгодятся в других проектах. Сокращает время разработки.
Как-то слепил 25 классов (С++) для работы с кое-каким оборудованием. Изначально, они предназначались для x86 (писалась софтина под вынь)
потом надо было научить МК работать с этим оборудованием. Взял исходники и заголовочники из MVSC 2008 и сунул в проект IAR.
Изменил только содержимое функций обмена с устройствами и индикации\обслуживания GUI (надо было вывести все на графический LCD и программные кнопки заменить на аппаратные)
Ну и лишнее тупо выкинул. Все закомпилировалось и заработало с полпинка. :)))
Затрата времени на перенос - 2 часа.


vitalik_1984 писал(а):
Неплохо бы пару комментов для сишников :)


Код:

 MOV   TEMP
,   ...          ;копирование отправляемого байта в регистр TEMP
 LDI   TEMP2
,  8            ;загрузка константы количества отправляемых битов
LOOP
:                       ;Метка LOOP (цикл отправки)
 SBRC  TEMP,   0            ;пропустить следующую инструкцию, если бит 0 в регистре TEMP сброшен
 SBI   PORTB
,  _OUT         ;установка бита в PORTB
 SBRS  TEMP
,   0            ;пропустить следующую инструкцию, если бит 0 в регистре TEMP установлен
 CBI   PORTB
,  _OUT         ;сброс бита в PORTB
 ROR   TEMP                 
;сдвиг в право содержимого регистра TEMP
 DEC   TEMP2                
;декремент регистра TEMP2
 BRNE  LOOP                 
;Если не ноль, то переходим к метке LOOP
...                           ;Отправка завершена

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 13:47:11 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Так почему порт определен железно?Тоже бы через макрос замутили :wink:

_________________
В поисках истины человек развивается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 17:24:29 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Я обычно делаю так.

SO_PORT - выходной порт, SO_PINMASK - маска выходного пина.

Код:
void ShiftByte(uint8_t byte)
{
  volatile uint8_t mask;

  for (mask=0x80; mask; mask=mask >> 1)
  {
    if (byte & mask)
    {
      SO_PORT|=SO_PINMASK;
    }
    else
    {
      SO_PORT&=~SO_PINMASK;
    }
  }
}

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 19:53:40 
Встал на лапы

Карма: -1
Рейтинг сообщений: 4
Зарегистрирован: Пн мар 26, 2012 05:25:06
Сообщений: 106
Рейтинг сообщения: 0
Можете пояснить зачем в данной функции вы используете volatile?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 20:22:21 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Чтобы оптимизатор случаем переменную не снес и не заоптимизировал до неузнаваемости. Хотя и так не должен, но volatile не повредит.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 20:53:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Цитата:
Я обычно делаю так.

А это получается только для асинхронного режима функция, то есть в нее придется дописывать команды сдвига регистра и защелки.Я правильно понял?

_________________
В поисках истины человек развивается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: побитовый вывод числа в пин
СообщениеДобавлено: Пн сен 10, 2012 21:15:48 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Цитата:
дописывать команды сдвига регистра и защелки


Да. Это каркас. Выдачу вспомогательных сигналов можно вставить по вкусу.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y