|
|
  |
Atmega3250 PORTJ (7ми битный порт), проблема с установкой произвольного бита |
|
|
|
Sep 18 2008, 19:22
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(toshas @ Sep 18 2008, 21:42)  Добрый вечер!
есть atmega3250, PORTJ имеет только 7 бит, программа codevision 1.24.7f: при явном задании PORTJ=0b0000010 бит1 правильно ставится в "1" и на ножке 5 вольт. необходимо изменить бит1 не затронув остальные. конструкция PORTJ = PORTJ ^ (1 << 1) работающая на 8ми битных портах здесь дает следующее: на ножке вольтметр показывает 2.5В и соответственно осциллограф периодическое переключение 0-1 как правильно написать код ? спасибо! Как обычно: Код #define LED_PIN 1 PORTJ |= (1<<LED_PIN); // установить 1 PORTJ &= ~(1<<LED_PIN); // 0 соответственно Ваша конструкция (1 << 1) малоинформативна, лучше сразу воспользоваться помощью препроцессора и определить такие константы, как выводы порта через #define.
|
|
|
|
|
Sep 19 2008, 06:08
|
Местный
  
Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339

|
Цитата(MTh @ Sep 19 2008, 07:33)  Проверьте не настроена ли какая-нить периферия работающая с этими выводами.... больше идей нет. при задании всех битов в порте все работает как надо, периферия тут не причем. Цитата(oll @ Sep 19 2008, 08:37)  В codevision можно так - PORTJ.1=1; для этого порта такая запись не подходит, компиляция проходит с ошибкой.
|
|
|
|
|
Sep 19 2008, 07:02
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(toshas @ Sep 19 2008, 10:08)  ... периферия тут не причем. Хватит в экстрасенсов играть! Код проекта полностью если хотите чтобы Вам помогли. Анатолий.
|
|
|
|
|
Sep 19 2008, 07:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(toshas @ Sep 18 2008, 21:42)  конструкция PORTJ = PORTJ ^ (1 << 1) работающая на 8ми битных портах здесь дает следующее: на ножке вольтметр показывает 2.5В и соответственно осциллограф периодическое переключение 0-1 конструкция PORTJ = PORTJ ^ (1 << 1) ИНВЕРТИРУЕТ 1 бит а конструкция PORTJ = PORTJ | (1 << 1) УСТАНАВЛИВАЕТ 1 бит если вы в цикле напишите инвертирование, то как раз получите переключение и мультиметр покажет нечто среднее (~2.5V), т.к. измеряет постоянку.
|
|
|
|
|
Sep 19 2008, 09:13
|
Местный
  
Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339

|
Цитата(Petka @ Sep 19 2008, 11:05)  конструкция PORTJ = PORTJ ^ (1 << 1) ИНВЕРТИРУЕТ 1 бит а конструкция PORTJ = PORTJ | (1 << 1) УСТАНАВЛИВАЕТ 1 бит если вы в цикле напишите инвертирование, то как раз получите переключение и мультиметр покажет нечто среднее (~2.5V), т.к. измеряет постоянку. спасибо! ткнули носом что называется)
|
|
|
|
|
Sep 20 2008, 13:26
|
Местный
  
Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339

|
Цитата(bloodden @ Sep 20 2008, 01:05)  Подождите, а КАК оно у Вас раньше работало установкой бита? Цитата(SysRq @ Sep 20 2008, 01:28)  Сдается мне, то что написано во 2 и 3 сообщении темы он и не пробовал применять  обычно я пользуюсь разрешенной в свавр записью PORTN.M=...; прошу прощения за долгую полемику, первый же ответ в теме является правильным, если не отождествить от усталости ^ и | (
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|