реклама на сайте
подробности

 
 
> Не могу получить бит PORTX.Y
Артем Бум
сообщение May 27 2008, 08:16
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 27-05-08
Пользователь №: 37 836



Следующий код:
Код
#include <avr/io.h>

int main (void)
{
    DDRA = 0x00; // Настройка порта A для ввода

32:    if(PORTA.1 == 1){
        DDRA = 0xFF; // Настройка порта A для вывода
        PORTA = 0;
35:        PORTA.2 = 1;
    }
}


выдаёт ошибку

Код
SOS.c: In function 'main':
SOS.c:32: error: expected ')' before numeric constant
SOS.c:35: error: expected ';' before numeric constant
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Артем Бум
сообщение May 27 2008, 08:48
Сообщение #2





Группа: Новичок
Сообщений: 11
Регистрация: 27-05-08
Пользователь №: 37 836



Такая форма записи доступа к биту описана в книге:
Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. МК-Пресс, Киев, 2006.djvu

среди операторов языка С.

Компилирую WinAVR.

Данный способ мне кажется более ясным для восприятия, пусть и не переносимым.

Не подскажете какие хеадеры нужно подключать и где?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 27 2008, 09:02
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Артем Бум @ May 27 2008, 11:48) *
Компилирую WinAVR.

тогда лучше придерживаться стандартов
Цитата
Данный способ мне кажется более ясным для восприятия, пусть и не переносимым.

А мне вот почему-то более ясным для восприятия кажется другая форма:
Код
#define BIT0 0
#define BIT1 1
...
#define BIT7 0x80
#define SETBIT(reg,bit) reg|=bit
#define CLRBIT(reg,bit) reg&=~bit

void main()
{
  ...
  SETBIT(PORTA,BIT3);
  ...
  CLRBIT(PORTA,(BIT1|BIT3|BIT5));
  ...
}


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Nick_Shl
сообщение May 27 2008, 09:46
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 17-04-08
Пользователь №: 36 850



Цитата(MrYuran @ May 27 2008, 12:02) *
А мне вот почему-то более ясным для восприятия кажется другая форма:
Код
#define SETBIT(reg,bit) reg|=bit
#define CLRBIT(reg,bit) reg&=~bit
А мне больше такая:
Код
#define PORTX.Y(x) PORTX = (PORTX & ~(1 << Y)) | (x << Y)
Это для конкретного порта и пина. x должен быть или 0 или 1.
Использовал в CodeVision - в нем на атмеге128 нельзя обратится к PORTG.x потому как он лежит за пределами памяти адресуемой in/out-ами(если я конечно правильно понял)...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Артем Бум   Не могу получить бит PORTX.Y   May 27 2008, 08:16
- - uriy   Хоть бы написали что за компилятор. Если IAR то та...   May 27 2008, 08:28
- - GDI   А где такая форма записи доступа к биту описана? Х...   May 27 2008, 08:28
- - MrYuran   Цитатаif(PINA && 0x01) {} Возможно я что-т...   May 27 2008, 08:36
|- - VladimirYU   Цитата(Артем Бум @ May 27 2008, 12:48) Та...   May 27 2008, 08:54
|- - XVR   Цитата(Nick_Shl @ May 27 2008, 13:46) А м...   May 28 2008, 07:22
- - uriy   Хидер можно оставить тот же самый. А вот тут я дей...   May 27 2008, 08:57
- - Артем Бум   Код#include <avr/io.h> #define PINA.1 ...   May 27 2008, 11:04
- - MrYuran   не поленитесь, найдите файл io.h и хотя бы бегло е...   May 27 2008, 11:15
- - Barni   Может лучше не PORTA.1, а PINA.1, я так понимаю на...   May 27 2008, 16:06
- - Артем Бум   это работает Код#include <avr/io.h> int c...   May 28 2008, 06:06
|- - Палыч   Цитата(Артем Бум @ May 28 2008, 09:06) эт...   May 28 2008, 06:57
- - GDI   Кстати PINA.1 будет (PINA & 0x02), нумерация б...   May 28 2008, 06:54


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01769 секунд с 7
ELECTRONIX ©2004-2016